ros2自定义消息接口
时间: 2025-04-22 16:58:56 AIGC 浏览: 61
### ROS2 中创建和使用自定义消息接口
#### 定义自定义消息文件
为了在 ROS2 中创建自定义的消息接口,需要先编写 `.msg` 文件来描述数据结构。这些文件通常放置于包中的 `msg/` 目录下[^1]。
例如,在名为 `my_custom_msgs` 的软件包里可以建立如下路径下的新文件:
```plaintext
my_custom_msgs/msg/Temperature.msg
```
该文件的内容可能像这样简单地表示温度读数:
float64 degree_celsius
#### 修改 CMakeLists.txt 和 package.xml
为了让构建系统识别新的消息类型,需更新两个配置文件。对于基于 ament 构建系统的项目来说,这涉及到编辑 `CMakeLists.txt` 来添加对消息生成的支持以及修改 `package.xml` 添加依赖项[^2]。
- **CMakeLists.txt**
```cmake
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/Temperature.msg"
)
```
- **package.xml**
增加 `<exec_depend>` 或者 `<buildtool_depend>` 标签指向必要的工具链版本,比如 `rosidl_default_runtime` 和 `rosidl_default_generators`.
```xml
<depend>rosidl_default_runtime</depend>
<buildtool_depend>rosidl_default_generators</buildtool_depend>
```
#### 编译并安装消息接口
完成上述更改之后,通过命令行执行编译操作使改动生效。进入工作空间顶层目录运行下面的指令序列以确保所有变更被正确处理[^3]:
```bash
colcon build --packages-select my_custom_msgs
source install/setup.bash
```
此时应该可以在环境中看到已注册的新消息类型,并可用于发布订阅等场景之中。
#### 发布与订阅自定义消息
一旦成功建立了自定义消息格式及其对应的 IDL 接口,则可以通过编程方式利用 Python 或 C++ API 实现节点间的通信功能。这里给出一段简单的 Python 示例代码用于发送 Temperature 数据给其他监听者[^4]。
```python
import rclpy
from rclpy.node import Node
from my_custom_msgs.msg import Temperature as TempMsg
class MinimalPublisher(Node):
def __init__(self):
super().__init__('minimal_publisher')
self.publisher_ = self.create_publisher(TempMsg, 'temperature', 10)
timer_period = 0.5 # seconds
self.timer = self.create_timer(timer_period, self.timer_callback)
self.i = 0
def timer_callback(self):
msg = TempMsg()
msg.degree_celsius = 20 + (self.i % 10) * 0.5
self.publisher_.publish(msg)
self.get_logger().info('Publishing: "%f"' % msg.degree_celsius)
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()
```
同样也可以很容易地写出接收端逻辑来获取来自主题的数据流。
阅读全文
相关推荐



















