ROS2 自定义消息
时间: 2025-05-14 17:58:50 AIGC 浏览: 38
### 如何在ROS 2中创建和使用自定义消息
#### 创建自定义消息类型
为了在ROS 2中创建自定义消息,首先需要在一个功能包中定义一个新的`.msg`文件。该文件应位于功能包的消息目录下(通常为`msg/`),并遵循特定的语法来描述消息的内容[^2]。
假设我们正在开发一个名为`my_custom_msgs`的功能包,并希望为其添加一种新的消息类型`MyMessage.msg`:
```plaintext
float64 data
string name
```
上述代码表示新消息包含两个字段:一个是浮点数类型的`data`,另一个是字符串类型的`name`[^4]。
#### 配置CMakeLists.txt 和 package.xml 文件
为了让ROS 2构建系统识别这些新定义的消息,在功能包根目录下的`package.xml`文件中需加入如下依赖项声明:
```xml
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
```
接着修改同一路径中的 `CMakeLists.txt` 文件,确保它能处理新增加的消息源码以及关联必要的工具链支持:
```cmake
find_package(ament_cmake REQUIRED)
find_package(builtin_interfaces REQUIRED)
add_message_files(
FILES
MyMessage.msg
)
generate_messages()
ament_export_dependencies(message_runtime)
```
以上设置告知编译器哪些具体的消息应该被生成及其所需的基础接口[^3]。
#### 编写节点程序利用自定义消息
一旦完成了前面几步的操作之后就可以着手编写实际的应用逻辑部分了。这里给出一段简单的 Python 脚本作为例子演示如何发送此类定制化信息给订阅者端接收解析:
```python
import rclpy
from rclpy.node import Node
from my_custom_msgs.msg import MyMessage
class MinimalPublisher(Node):
def __init__(self):
super().__init__('minimal_publisher')
self.publisher_ = self.create_publisher(MyMessage, 'topic', 10)
timer_period = 0.5 # seconds
self.timer = self.create_timer(timer_period, self.timer_callback)
self.i = 0
def timer_callback(self):
msg = MyMessage()
msg.data = float(self.i)
msg.name = f'Message {self.i}'
self.get_logger().info(f'Sending: "{msg}"')
self.publisher_.publish(msg)
self.i += 1
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]。
#### 总结
综上所述,从零开始搭建一套完整的基于自定义消息传递机制的过程大致如此。这不仅限于理论层面的理解还需要动手实践才能真正掌握其中细节之处。
阅读全文
相关推荐


















