ROS教程(二十三):自定义消息

本教程介绍如何在ROS中自定义消息类型,并演示了在C++及Python中使用自定义消息的方法。此外还介绍了如何正确地引用和输出消息类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义消息

Description:  本教程将展示如何使用ROS  Message Description Language 来定义你自己的消息类型.

Tutorial Level:  INTERMEDIATE 

Next Tutorial:   在Pyhon中使用C++类  

自定义消息

自定义一个消息类型很简单,只要将.msg文件放到一个package的msg文件夹下即可。请参考创建.msg 文件 (不要忘记选择相应的编译构建系统)。

引用和输出消息类型

消息类型都被归属到与package相对应的域名空间下,例如:

C++

切换行号显示
   1 #include <std_msgs/String.h>
   2 
   3 std_msgs::String msg;

Python

切换行号显示
   1 from std_msgs.msg import String
   2 
   3 msg = String()

依赖项

如果你要使用在其他package里定义的消息类型,不要忘记添加以下语句:

<build_depend>name_of_package_containing_custom_msg</build_depend>
<run_depend>name_of_package_containing_custom_msg</run_depend>

到 package.xml

教程ROSNodeTutorialPython展示了使用自定义消息类型来创建talker和listener的C++和Python实现。

### ROS2 自定义消息类型的创建与使用 #### 创建自定义消息包 为了在ROS2中创建并使用自定义消息类型,首先需要建立一个新的包来容纳这些消息文件。这可以通过`ros2 pkg create`命令完成,并指定依赖项以支持消息构建。 ```bash ros2 pkg create py_topic_custom_msg --build-type ament_python --dependencies rclpy std_msgs message_generation cd py_topic_custom_msg ``` 此操作建立了名为`py_topic_custom_msg`的新包用于存放Python版本下的自定义消息[^2]。 #### 定义新的消息结构 接着,在上述新建的软件包内添加`.msg`文件描述所需的数据格式。假设要传递一个简单的温度读数加上时间戳,则可以在`msg/TemperatureWithTime.msg`里编写如下内容: ```plaintext std_msgs/msg/Header header float64 temperature ``` 这里利用了标准库中的Header作为前缀以便携带时间和其他元数据信息[^1]。 #### 修改CMakeLists.txt (针对C++) 对于采用C++实现的应用程序而言,还需编辑该包里的`CMakeLists.txt`文档加入下面几行配置语句确保能够正确处理新引入的消息资源: ```cmake find_package(rosidl_default_generators REQUIRED) rosidl_generate_interfaces(${PROJECT_NAME} "msg/TemperatureWithTime.msg" ) ``` 之后保存更改后的文本文件准备下一步骤的操作[^3]。 #### 构建项目并安装环境变量 无论是哪种编程语言的选择,都需要执行一次完整的编译流程使改动生效。具体做法是在工作空间根目录下依次输入下列指令刷新整个工程的状态: ```bash colcon build --packages-select py_topic_custom_msg source install/setup.bash ``` 通过这种方式可以保证所有生成的目标二进制以及接口都被正确加载到当前shell环境中去。 #### 测试发布者和订阅者的交互过程 最后一步就是验证所设计的功能是否正常运作了。为此需启动一对相互配合工作的节点实例来进行实际的信息交换实验。例如,先在一个终端窗口里面激活生产端服务: ```bash ros2 run py_topic_custom_msg temp_publisher_node ``` 与此同时另启另一个控制台开启消费侧逻辑监听来自对方发送过来的内容更新情况: ```bash ros2 run py_topic_custom_msg temp_subscriber_node ``` 这样就完成了从无到有搭建一套基于自定义消息协议之上的通讯链路全过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值