UGV Rover ROS2 语音控制平台;Python 调用 ROS2三种主流方式;

📅 2026/7/29 2:03:57 👁️ 阅读次数 📝 编程学习
UGV Rover ROS2 语音控制平台;Python 调用 ROS2三种主流方式;

UGV Rover ROS2 语音控制平台

平台: Waveshare UGV Rover / Jetson Orin / ROS2 Humble / Docker

DockerROS2工具类应用

文档里太多命令控制实现了,整个工具类方便发命令控制
将所有容器内命令执行统一收口到DockerROS2工具类,main.py和mapping.py不再有重复的_CONTAINER、_ROS2_SOURCE定义。

Pythonclass DockerROS2:def run(cmd, timeout)        # 同步执行def run_bg(cmd)              # 后台执行,返回 Popen 句柄def run_async(cmd, timeout)  # 异步执行def node_running(node_name)  # 检查节点是否运行def shell(cmd, timeout)      # 返回 (returncode, output)

ros2服务列表

ros2服务列表:已启动当前所有运行中的节点的service接口,相当于查询机器人现在能做什么操作。只有节点启动后对应的服务才会出现。

查看当前运行的所有ROS2 节点

  • ros2的docker容器内部执行:
    ros2 service list
  • 宿主机执行:
docker exec -it ugv_jetson_ros_humble bash -i -c \"source /root/.bashrc && source /home/ws/ugv_ws/install/setup.bash && \ros2 node list"

Python 调用 ROS2三种主流方式;

三种主流方式:

  1. rclpy(官方推荐)
    直接在 Python 里初始化 ROS2 节点,发布 topic、调用 service,不需要任何中间层:
  • 优点:最直接,性能最好,官方支持
  • 缺点:必须在 ROS2 环境里运行,目前做了环境隔离所以条件不够
  1. rosbridge + websocket(现在用的)
    ROS2 节点通过 rosbridge 暴露 WebSocket 接口,任何语言都可以通过 JSON 协议控制:
  • 优点:语言无关,程序可以跑在容器外
  • 缺点:多一层转发,有延迟,复杂操作需要拼 JSON
  1. subprocess 调用命令行(现在用于启动节点)
  • 优点:简单直接,适合启动 launch 文件
  • 缺点:只适合启动/停止节点,不适合频繁的控制指令

rosbridge详解

rosbridge 能做的:

  • 发布 topic
  • 订阅 topic
  • 调用 service
  • 发送 action

rosbridge 不能做的:

  • ros2 launch xxx.launch.py
  • ros2 run xxx
  • 启动/关闭整个节点
    rosbridge本质上是一个已运行节点的代理,它把ROS2的通信接口转变成WebSocket,但它没有能力去启动新的进程。