ROS2 Jazzy 一页纸速查清单(WSL2+VSCode|C++/Python双版)
一、固定开发启动流程(必看)
核心铁律:仅在 WSL 终端执行,禁止直接双击 Windows VSCode 图标打开项目
cd ~/ros2_ws && code .
✅ 窗口左下角显示 WSL: Ubuntu-24.04,即为正确 ROS2 开发环境
二、创建功能包命令
进入源码目录:cd ~/ros2_ws/src
C++ 包创建 :ros2 pkg create --build-type ament_cmake --node-name my_node cpp_demo_pkg
Python 包创建 :ros2 pkg create --build-type ament_python --node-name my_py_node py_demo_pkg
三、C++ 标准模板(发布者)
1. my_node.cpp
Plain
#include <chrono>
#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>
using namespace std::chrono_literals;
class DemoNode : public rclcpp::Node{
public:
DemoNode():Node("demo_node"){
pub_ = create_publisher<std_msgs::msg::String>("topic",10);
timer_ = create_wall_timer(500ms,[this](){
std_msgs::msg::String msg;
msg.data = "Hello ROS2 C++";
pub_->publish(msg);
});
}
private:
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub_;
rclcpp::TimerBase::SharedPtr timer_;
};
int main(int argc,char** argv){
rclcpp::init(argc,argv);
rclcpp::spin(std::make_shared<DemoNode>());
rclcpp::shutdown();
return 0;
}
2. CMakeLists.txt(末尾追加)
Plain
add_executable(my_node src/my_node.cpp)
ament_target_dependencies(my_node rclcpp std_msgs)
install(TARGETS my_node DESTINATION lib/${PROJECT_NAME})
四、Python 标准模板(发布+订阅)
1. 发布者 my_py_node.py
Plain
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class MyPyPublisher(Node):
def __init__(self):
super().__init__('my_py_publisher')
self.publisher_ = self.create_publisher(String, 'my_py_topic', 10)
self.timer = self.create_timer(0.5, self.timer_callback)
self.counter = 0
def timer_callback(self):
msg = String()
msg.data = f'Hello Python: {self.counter}'
self.get_logger().info(f'Publishing: "{msg.data}"')
self.publisher_.publish(msg)
self.counter += 1
def main(args=None):
rclpy.init(args=args)
node = MyPyPublisher()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
2. 订阅者 my_subscriber.py
Plain
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class MyPySubscriber(Node):
def __init__(self):
super().__init__('my_py_subscriber')
self.sub = self.create_subscription(String,'my_py_topic',self.callback,10)
def callback(self, msg):
self.get_logger().info(f'Received: "{msg.data}"')
def main(args=None):
rclpy.init(args=args)
node = MyPySubscriber()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
3. setup.py 节点注册(关键)
Plain
entry_points={
'console_scripts': [
'my_py_node = py_demo_pkg.my_py_node:main',
'my_subscriber = py_demo_pkg.my_subscriber:main',
],
},
五、通用编译 & 运行指令
工作区编译:cd ~/ros2_ws && colcon build --symlink-install
加载环境变量:source install/setup.bash
C++ 运行:ros2 run cpp_demo_pkg my_node
Python 发布者运行:ros2 run py_demo_pkg my_py_node
Python 订阅者运行:ros2 run py_demo_pkg my_subscriber
六、C++ / Python 核心区别
-
创建指令:C++=ament_cmake | Python=ament_python
-
配置文件:C++依赖CMakeLists.txt | Python依赖setup.py
-
代码热更新:Python 开启软链接编译后无需重编译,C++ 修改代码必须重编译
七、高频调试命令
-
ros2 topic list查看所有话题 -
ros2 topic echo /话题名实时监听话题数据 -
ros2 node list查看当前运行节点 -
ros2 pkg list | grep 包名校验包是否加载成功
八、报错极速修复
-
ros2: command not found →
source /opt/ros/jazzy/setup.bash -
colcon 命令不存在 →
sudo apt install python3-colcon-common-extensions -
找不到节点/模块报错 → 重新执行
source install/setup.bash -
终端为PS模式 → 切换为 Ubuntu-2404 (WSL) 终端
九、WSL 工具指令
彻底释放内存(PowerShell执行):wsl --shutdown
十、核心开发铁律
-
仅通过 WSL 终端
code .打开 ROS2 项目 -
每次编译后必须执行 source 加载环境
-
开发前确认 VSCode 左下角为 WSL 环境

