Win11部署Ubuntu24.04+ROS2 Jazzy+机器人仿真环境+vs code 开发环境

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 foundsource /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

十、核心开发铁律

  1. 仅通过 WSL 终端 code . 打开 ROS2 项目

  2. 每次编译后必须执行 source 加载环境

  3. 开发前确认 VSCode 左下角为 WSL 环境