一、针对ROS2开发的Python通讯外部工具整理,涵盖串口、网络、Web及多功能协议支持工具,均提供官方下载链接及适用场景说明:
⚙️1、串口通信工具
-
ROS2 Serial Library
-
简介:专为ROS2 Humble优化的串口库,支持异步读写和自定义协议解析。
-
下载链接:
-
GitHub源码:ZhaoXiangBox/serial
-
预编译包(优快云):ROS2-Humble串口库
-
-
-
FishProtocol
-
简介:C++/Python双语言支持的多协议库(含串口),提供ROS2节点集成示例,支持零配置切换协议。
-
安装命令:
bash
-
sudo apt install libboost-dev git clone https://github.com/fishros/fish_protocol
-
ROS2示例:支持回调式数据接收与发送(代码示例)。
🌐 2、网络通信工具
-
FishProtocol(UDP/TCP)
功能:同一库支持UDP Server/Client、TCP通信,适用设备间远程数据交互。
配置示例:
cpp
proto_config.protocol_type_ = PROTOCOL_TYPE::UDP_SERVER;
proto_config.udp_server_ip_ = "0.0.0.0";
proto_config.udp_server_port_ = 3474;
-
ROS2-TCP Bridge
-
简介:实现ROS2与Simulink的TCP数据互通,含Python发布/订阅模板。
-
下载链接:py_pubsub通讯代码
-
🖥️ 3、Web通信工具
-
rosbridge_suite + roslibjs
-
功能:通过WebSocket连接ROS2与浏览器,支持Topic/Service调用。
-
安装步骤:
bash
-
-
-
sudo apt install ros-<distro>-rosbridge-suite # distro如humble git clone https://github.com/RobotWebTools/roslibjs
-
HTML示例:实时发布
/cmd_vel
话题(代码参考)。
-
🔧 4、多功能协议支持
工具名称 | 协议支持 | 语言 | 下载链接 | 适用场景 |
---|---|---|---|---|
FishProtocol | 串口/UDP/TCP | C++/Python | GitHub | 多协议统一管理、硬件兼容性强 |
ros2cli | DDS原生通信 | Python | GitHub | 命令行调试与管理 |
Micro-ROS | 微控制器通信 | C | 官方文档 | 嵌入式设备接入ROS2网络 |
💎 5、使用建议
-
优先选型:
-
硬件交互 → FishProtocol(跨协议支持)
-
Web控制 → rosbridge_suite(生态成熟)
-
嵌入式场景 → Micro-ROS(资源占用低)
-
-
调试工具:
-
命令行操作使用 ros2cli(如
ros2 topic pub
/ros2 service call
)。
-
以上工具均经过ROS2 Humble/Foxy验证。遇到依赖问题可参考各项目GitHub Issues或ROS社区论坛
二、ROS2核心通信接口详解
2.1 定时器与同步机制
2.1.1 基础定时器
python
class TimerExample(Node): def __init__(self): super().__init__('timer_demo') # 创建1Hz定时器 self.timer1 = self.create_timer( 1.0, # 秒 self.timer1_callback ) # 创建500ms定时器 self.timer2 = self.create_timer( 0.5, self.timer2_callback ) def timer1_callback(self): self.get_logger().info("1Hz定时器触发") def timer2_callback(self): self.get_logger().info("500ms定时器触发", throttle_duration_sec=2) # 节流输出
2.1.2 定时器同步技术
python
import rclpy from rclpy.clock import Clock from rclpy.time import Duration class SyncTimers(Node): def __init__(self): super().__init__('sync_timers') self.clock = Clock() self.start_time = self.clock.now() # 创建多个定时器 self.timer_slow = self.create_timer(2.0, self.slow_callback)