学习如何使用.msg文件创建用户自定义的消息,并且在节点中使用这些自定义消息,这包含一个关于要传输的数据类型的标准。

首先在chapter2_turtleial包中创建一个msg文件夹,在文件夹中创建一个chapter2_msg.msg文件,并添加以下命令行:

int32 A
int32 B
int32 C

此外在package.xml文件中查找以下命令行并取消注释:

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

这些命令行支持在ROS构建系统中配置消息和服务。此外需要在CMakeList.txt中添加一行代码如下:

find_package(catkin REQUIRED COMPONENTSroscppstd_msgsmessage_generation
)

然后在CMakeList.txt中查找以下命令行并取消注释,同时添加新消息文件名称:

add_message_files(FILESchapter2_msg.msg
)
generate_messages(DEPENDENCIESstd_msgs
)

最后编译包:

$ cd ~/catkin_ws
$ catkin_make

可以使用rosmsg命令检查一切是否正常运行:

$ rosmsg show chapter2_turtleial/chapter2_msg

然后在src目录下编写cpp代码创建测试节点。
example_2a.cpp

#include "ros/ros.h"
#include "chapter2_turtleial/chapter2_msg.h"
#include "sstream"int main(int argc, char** argv){ros::init(argc,argv,"example2a");ros::NodeHandle n;ros::Publisher pub = n.advertise<chapter2_turtleial::chapter2_msg>("chapter2_turtleial/message",100);ros::Rate loop_rate(10);while(ros::ok()){chapter2_turtleial::chapter2_msg msg;msg.A = 1;msg.B = 2;msg.C = 3;pub.publish(msg);ros::spinOnce();loop_rate.sleep(); }return 0;
}

example_2b.cpp

#include "ros/ros.h"
#include "chapter2_turtleial/chapter2_msg.h"void messageCallback(const chapter2_turtleial::chapter2_msg::ConstPtr& msg){ROS_INFO("I have received: [%d] [%d] [%d]",msg->A,msg->B,msg->C);
}int main(int argc,char **argv){ros::init(argc,argv,"example2b");ros::NodeHandle n;ros::Subscriber sub = n.subscribe("chapter2_turtleial/message",100,messageCallback);ros::spin();return 0;
}

编辑CMakeList.txt文件

add_executable(example2a src/example_2a.cpp)
add_executable(example2b src/example_2b.cpp)
add_dependencies(example2a chapter2_turtleial_generate_messages_cpp)
add_dependencies(example2b chapter2_turtleial_generate_messages_cpp)
target_link_libraries(example2a ${catkin_LIBRARIES})
target_link_libraries(example2b ${catkin_LIBRARIES})

编译所有节点的包:

$ cd ~/catkin_ws/
$ catkin_make --pkg chapter2_turtleial

测试:
运行节点管理器:

$roscore

在其他终端中分别运行:

$ rosrun chapter2_turtleial example2a
$ rosrun chapter2_turtleial example2b

测试效果截图:

Ros学习笔记(四)创建Ros消息相关推荐

  1. ROS学习笔记四:理解ROS节点

    ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...

  2. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

  3. ROS学习笔记四:用C++编写ROS发布与订阅

    一.创建并编译功能包 1.1 创建功能包 在工作空间的 src 目录下创建功能包: $ cd ~/dev/catkin_ws/src $ catkin_create_pkg chapter2_tuto ...

  4. ROS学习笔记02、ROS使用C++、Python来实现HelloWorld

    文章目录 前言 一.创建工程文件目录 二.实现helloworld 2.1.创建ROS包 2.2.C++版的HelloWorld 2.3.Python版的HelloWorld 三. 借助launch文 ...

  5. ROS学习笔记26(ROS的命令行工具)

    需要说明的是:本篇博客内容来自于<ROS机器人编程 从基本概念到机器人应用程序编程实战>的第五章,本是打算参考和翻译官网相关资料,但官网资料的质量明显没有这本书描述的更为清楚,记录于此仅仅 ...

  6. ROS学习笔记一(ROS的catkin工作空间)

    在安装完成ROS indigo之后,需要查看环境变量是否设置正确,并通过创建一个简单的实例来验证ROS能否正常运行. 1 查看环境变量 在ROS的安装过程中,我们执行了如下命令:(此命令就是向当前用户 ...

  7. ROS学习笔记_创建工作空间(一)

    创建工作空间 mkdir -p ~/catkin_ws_2/src -p参数是将路径上的父子目录同时创建. $ cd ~/catkin_ws_2/ $ catkin_make 在工作空间的根目录下运行 ...

  8. ROS学习(四):消息格式

    消息(message)是用于节点之间的数据交换的一种数据形式.前述的话题.服务 和动作都使用消息.消息可以是简单的数据结构,如整数(integer).浮点(floating point)和布尔值(bo ...

  9. ROS学习笔记九:ROS工具

    ROS有各种工具可以帮助用户使用ROS.应该指出,这些GUI工具是对输入型命令工具的补充.如果包括ROS用户个人发布的工具,那么ROS工具的数量很庞大.其中,本文讨论的工具是对于ROS编程非常有用的辅 ...

  10. ROS学习笔记02:ROS架构与基础

    文章目录 一.ROS架构 二.第一个ROS例程 (一)turtlesim功能包 1.话题与服务 2.背景色参数 (二)控制乌龟运动 1.启动节点管理器 2.启动乌龟仿真器节点 3.启动键盘控制节点 三 ...

最新文章

  1. java rectangle 类_Java编写的Rectangle类
  2. leetcode算法题--数字序列中某一位的数字
  3. Android Studio——怎么设置代码补全以及提示(详细)?
  4. Vue系列Vue-cli 4配置别名(六)
  5. linux 一些常规操作合集 (cat grep awk chmod vim ..)
  6. vue中怎么点击修改文字_杭州展馆设计中说明牌和说明文字怎么样才能使用最大化?...
  7. [转载] windows下python包的导入方法
  8. ds哈希查找—二次探测再散列_哈希算法高大上?也不过如此
  9. Git学代码之学会运行别人的代码
  10. linux控制风扇转速的命令,Cputroller:一款Linux下查看调节CPU的策略、风扇转速的工具...
  11. 小米笔记本 Air 13.3 黑苹果教程
  12. 大作家超级写作软件_大作家都是极度自律的人,你也可以
  13. Qt 运行时不显示图标
  14. 微信小程序 引用 weui 问题合集
  15. hihoder 1048
  16. EasyX的安装与使用
  17. 哈工大 计算机系统 一纸开卷CSAPP
  18. CH340驱动安装失败 win10
  19. ZZULIOJ:1071: 分解质因子
  20. 随机过程、马尔可夫链 详解

热门文章

  1. 推荐:免费万能视音频转换软件--格式工厂
  2. 一天一个小技巧(5)——CSDN编译器的图片位置、大小调节
  3. SQA定义、质量模型、SQA与测试的关系
  4. luogu P1015 回文数
  5. Elasticsearch: 配置文件详解
  6. shell脚本实现FTP自动上传文件
  7. 使用IIS实现反向代理
  8. 利用webBrowser实现万能打印
  9. 怎样才是真正的架构师
  10. VS2010中使用Fixdays字体的方法