ROS实操入门系列(六)ROS topic通讯之自定义复杂msg消息类型解决实际需求一

  • 常见Msg消息
  • 需求一
  • 自定义消息
  • 编写代码
  • 需求一升级,需要定义更多的复杂消息(下一章)
  • https://www.lanqiao.cn/courses/2947,提供准备好的云主机ros环境,进行实操,课程包括了 Topic 通讯, Service 通讯,ROS 自定义消息,URDF可视化,TF坐标转换等技术要点。每个技术点都会结合例子先把原理讲解清楚,为了达到学以致用的目的,我们会再进行知识拓展,针对每个技术点实现对应的生动有趣的需求,保证学完后会有很大的收获。

msg消息 是ROS topic通讯节点间传递的内容。msg消息描述的是业务间传递数据,也可以理解为业务间数据的抽象化。

常见Msg消息


  1. std消息 (std消息属于基本数据类型消息,和python类似,描述的是数字,字符串,布尔类型等。)

    在这里插入图片描述

  2. geometry消息 (空间数据描述)

    在这里插入图片描述

  3. sensor消息 (传感器消息)在这里插入图片描述


需求一


  1. 已知有两个节点,其中一个节点是Publisher,另外一个节点是Subscriber。Publisher发布的消息是 学生数据 ,包含了学生的 姓名 和 年龄 。要求实现这个两个节点,并且模拟数据发布和订阅
  2. Publisher和Subscriber的编写我们已经会了。但是中间传输的数据类型,默认系统是没有提供的。这个时候我们需要自己定制消息格式。总的来说,这个自定义的消息格式中,需要包含name和age。通常在编程语言中,我们还是要去确定消息字段中的类型。例如,Python程序,表达数据类型是这样的:
    name = ‘’
    age = 0
    定义类型的时候需要把python的类型修改成对应的msg类型
    在这里插入图片描述

自定义消息


在Ros中,如果没有现成的消息类型来描述要去传递的消息时,我们会自定义消息。
通常我们会新建一个Package来去自定义消息,这个Package一般不去写任何的业务逻辑,只是用来声明自定义的消息类型,可以只定义一种消息类型,也可以定义多种消息类型,根据业务需求来定。所以,我们会单独的创建一个package,用来定义消息.


  1. 创建package
    包名取名也是有讲究的,业务名_msgs。大家可以看看std_msgs,geometry_msgs,都是遵循这个规则。

  2. 创建msg目录
    在package包下新建msg文件夹

  3. 创建msg文件
    在msg文件夹下创建.msg文件. .msg文件就是自定义消息文件,用来描述消息格式的。例如案例中, 我们会去创建 student.msg文件, 内容如下图,这个自定义的消息包含两个数据形式,name和age,name的类型 是string,age的类型是int64。这个msg文件其实遵循一定规范的,每一行表示一种数据。前面是类型,后面是名称。在这里插入图片描述

  4. 在package.xml种添加如下配置:在这里插入图片描述

  5. 配置CMakeLists.txt
    (1) 在find_package添加message_generation,结果如下:

    find_package(catkin REQUIRED COMPONENTS
    roscpp
    rosmsg
    rospy
    message_generation
    )

    (2) 添加add_message_file,这里的student.msg要和你创建的msg文件名称一致,且必须时在msg目录下,否则编译会出现问题,结果如下:

        add_message_files(
    FILES
    student.msg
    )

    (3)generation_msg 配置:
    在这里插入图片描述

    (4) 修改catkin_package,为catkin编译提供了依赖 message_runtime,结果如下:

    catkin_package(
    # INCLUDE_DIRS include
    # LIBRARIES demo_msg
    CATKIN_DEPENDS roscpp rosmsg rospy message_runtime
    # DEPENDS system_lib
    )

    (5) 编译项目(在下一章的升级需求中,因为添加了其他的消息类型,所以会遇到编译报错的问题,下一章会为大家进行讲解。)

        cd 工作空间
    catkin_make

    在这里插入图片描述

    (5) 命令校验

    rosmsg show student_msgs/student

    在这里插入图片描述


编写代码


  1. 这一步很重要!!!退出clion, 在运行clion的窗口进入到工作空间目录执行 source devel/setup.bash, 需要重新把环境加载,不然写代码时找不到刚才写的消息类

  2. 编写publisher,如果执行了第一步还是不能导入student_msgs,仍需要再重复第一步,直到可以找到为止在这里插入图片描述

  3. 编写subscriber在这里插入图片描述

  4. 运行上面的两个文件查看结果在这里插入图片描述
    =============================================================================


需求一升级,需要定义更多的复杂消息(下一章)


自定义msg消息类型至此已经讲解完毕,下一章将会把需求升级,需要定义更多的复杂消息在这里插入图片描述


https://www.lanqiao.cn/courses/2947,提供准备好的云主机ros环境,进行实操,课程包括了 Topic 通讯, Service 通讯,ROS 自定义消息,URDF可视化,TF坐标转换等技术要点。每个技术点都会结合例子先把原理讲解清楚,为了达到学以致用的目的,我们会再进行知识拓展,针对每个技术点实现对应的生动有趣的需求,保证学完后会有很大的收获。