2.09ROS通讯的自定义消息类型介绍

在ROS(Robot Operating System)中,自定义消息类型允许用户定义特定的数据结构,以便在节点之间传递复杂的数据。这对于创建灵活且强大的通信系统至关重要。自定义消息类型通过.msg文件定义,然后可以使用rosmsg命令查看消息结构,或在C++和Python代码中使用这些消息类型。

以下是创建和使用自定义消息类型的步骤:

1. 创建自定义消息类型文件

在你的ROS工作空间的src目录下,创建一个新的.msg文件来定义你的自定义消息类型。例如,创建一个名为CustomMsg.msg的文件。

cd ~/your_workspace/src
mkdir my_package/msg
nano my_package/msg/CustomMsg.msg

2. 定义消息结构

CustomMsg.msg文件中,定义你的消息字段。例如:

string name
int32 age
float32 height

这定义了一个包含字符串、整数和浮点数字段的消息类型。

3. 构建消息文件

使用catkin_makecatkin build命令构建你的工作空间,这样ROS就能识别你的自定义消息类型。

cd ~/your_workspace
catkin_make
source devel/setup.bash

4. 查看自定义消息类型

使用rosmsg命令查看你的消息类型结构:

rosmsg show my_package/CustomMsg

5. 在代码中使用自定义消息类型

在你的ROS节点中,你可以创建、发布和订阅使用自定义消息类型的消息。以下是C++和Python的示例代码。

C++ 示例

#include "my_package/CustomMsg.h"
// ...

ros::Publisher pub = nh.advertise<my_package::CustomMsg>("my_topic", 1000);
my_package::CustomMsg msg;
msg.name = "Alice";
msg.age = 30;
msg.height = 1.75;

// 发布消息
pub.publish(msg);

Python 示例

from my_package.msg import CustomMsg
import rospy

def publish_custom_msg():
    pub = rospy.Publisher('my_topic', CustomMsg, queue_size=10)
    rospy.init_node('publisher_node')
    msg = CustomMsg()
    msg.name = 'Alice'
    msg.age = 30
    msg.height = 1.75

    # 发布消息
    pub.publish(msg)
    rospy.sleep(1)

if __name__ == '__main__':
    try:
        publish_custom_msg()
    except rospy.ROSInterruptException:
        pass

通过这些步骤,你可以在ROS中创建和使用自定义消息类型,从而在节点之间传递复杂的数据结构。自定义消息类型是ROS中实现高级通信功能的基础。