ros2 自定义消息发布python
时间: 2025-06-08 15:11:05 AIGC 浏览: 38
### 使用Python在ROS2中发布自定义消息
#### 准备工作
为了能够使用Python编写程序来发布自定义消息,在开始之前需确保已经安装好ROS2环境并配置好了工作空间。接着要创建一个新的功能包用于存放即将编写的代码以及自定义的消息类型。
#### 定义自定义消息
进入所建立的功能包路径下,比如`py_custom_msg`,按照如下方式操作:
- 在该包内新建一个名为`msg`的文件夹;
- 将想要传递的数据结构描述成`.msg`格式保存在这个新创建的文件夹里[^2]。
假设现在有一个简单的自定义消息叫做`CustomMessage.msg`,其内容可能是这样的:
```text
string name
int32 id
float64 value
```
这表示此条目包含了三个字段——字符串类型的名称、整数型ID还有浮点数值。
#### 修改必要的配置文件
对于基于Python实现的部分来说,并不需要像C++那样去编辑复杂的构建脚本(CMakeLists.txt),但是仍然需要更新`setup.py`以使这些新的消息被正确处理。另外还需要确认`package.xml`已声明依赖项以便于后续步骤能顺利执行[^3]。
#### 实现发布者节点
下面给出一段完整的Python代码作为例子展示怎样利用上述提到的方法发送我们刚刚定义好的那种特殊形式的信息给其他订阅者接收端口。
```python
from py_custom_msg.msg import CustomMessage # 导入自定义消息类型
import rclpy
from rclpy.node import Node
class MinimalPublisher(Node):
def __init__(self):
super().__init__('minimal_publisher')
self.publisher_ = self.create_publisher(CustomMessage, 'topic', 10)
timer_period = 0.5 # seconds
self.timer = self.create_timer(timer_period, self.timer_callback)
def timer_callback(self):
msg = CustomMessage()
msg.name = "Example"
msg.id = 42
msg.value = 78.9
self.get_logger().info('Publishing: "%s", %d, %.2f' % (msg.name, msg.id, msg.value))
self.publisher_.publish(msg)
def main(args=None):
rclpy.init(args=args)
minimal_publisher = MinimalPublisher()
rclpy.spin(minimal_publisher)
minimal_publisher.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
```
这段代码展示了如何通过周期性的回调函数向指定主题广播含有特定属性的对象实例化后的数据流[^1]。
阅读全文
相关推荐






