树莓派ros2模块通信
时间: 2025-04-03 10:03:24 浏览: 29
### 实现树莓派上的 ROS2 模块间通信
在树莓派上实现 ROS2 模块间的通信涉及安装 ROS2、配置环境以及编写和运行节点程序。以下是关于如何完成这一目标的具体说明。
#### 安装 ROS2 环境
首先,在树莓派上部署 ROS2 是必要的。可以通过 Docker 来简化安装过程,使用预构建的镜像来快速启动 ROS2 环境[^3]:
```bash
docker pull ros:humble
docker run -it --name my_ros_container -v $(pwd):/workspace ros:humble bash
```
这一步骤利用了容器化技术,使得 ROS2 的依赖项管理更加便捷。
#### 创建并编译工作空间
创建一个新的 ROS2 工作空间,并添加自定义包用于模块间通信演示:
```bash
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/
colcon build
source install/setup.bash
```
上述命令初始化了一个新的 ROS2 工作区,并设置了环境变量以便后续操作能够识别到新构建的内容。
#### 编写示例节点代码
下面展示两个简单的 Python 节点作为例子——一个是发布者(Publisher),另一个是订阅者(Subscriber)。这两个节点之间通过 `std_msgs` 中的消息类型传递数据。
**发布者节点 (talker.py)**
此脚本每隔一秒发送一次字符串消息给主题 `/chatter`:
```python
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class MinimalPublisher(Node):
def __init__(self):
super().__init__('minimal_publisher')
self.publisher_ = self.create_publisher(String, 'topic', 10)
timer_period = 1.0 # seconds
self.timer = self.create_timer(timer_period, self.timer_callback)
def timer_callback(self):
msg = String()
msg.data = f'Hello World: {self.get_clock().now()}'
self.publisher_.publish(msg)
def main(args=None):
rclpy.init(args=args)
minimal_publisher = MinimalPublisher()
try:
rclpy.spin(minimal_publisher)
except KeyboardInterrupt:
pass
finally:
minimal_publisher.destroy_node()
if __name__ == '__main__':
main()
```
**订阅者节点 (listener.py)**
该脚本监听来自同一主题的数据流并将接收到的信息打印出来:
```python
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class MinimalSubscriber(Node):
def __init__(self):
super().__init__('minimal_subscriber')
self.subscription = self.subscribe(String, '/chatter', self.listener_callback, 10)
def listener_callback(self, msg):
self.get_logger().info(f'I heard: "{msg.data}"')
def main(args=None):
rclpy.init(args=args)
minimal_subscriber = MinimalSubscriber()
try:
rclpy.spin(minimal_subscriber)
except KeyboardInterrupt:
pass
finally:
minimal_subscriber.destroy_node()
if __name__ == '__main__':
main()
```
以上两段代码分别展示了如何设置基本的发布与接收逻辑[^5]。
#### 启动节点
确保已加载正确的环境后,可依次执行以下两条指令以激活各自的进程:
```bash
ros2 run your_package_name talker.py &
ros2 run your_package_name listener.py
```
当一切正常运作时,终端会显示由 Publisher 发送过来的时间戳信息被 Subscriber 成功捕获的结果。
---
### 注意事项
- 如果计划与其他设备比如 STM32 进行交互,则需考虑串口或 CAN 总线等低级通讯方式的支持情况[^4]。
- 对于多 DDS 提供商支持的需求,应关注 Middleware 层面的设计原则及其适配方法。
阅读全文
相关推荐


















