msg是一个描述ROS中消息的域的简单的文本文件,它用来为消息产生不同语言的源代码。

一个srv文件描述一个服务,它由两部分组成,请求和服务。

msg文件被存储在一个包的msg目录下,srv文件被存储在srv目录下。msg是简单的文本文件,它的每一行由一个与的类型和域的名字组成。你可以使用的域的类型有:

int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and fixed-length array[C] 

ROS中还有一个特殊的类型 Header,header包括了一个时间戳和一个经产在ROS中使用的坐标框架信息。你经常会看到在msg文件的第一行代码是:

Header header

下面是一个使用了Header的msg的例子:

  Header headerstring child_frame_idgeometry_msgs/PoseWithCovariance posegeometry_msgs/TwistWithCovariance twist

srv文件和msg文件是一样的,除了它们包括两部分:请求和响应,这两部分通过'---'分隔。下面是一个srv文件的例子:

int64 A
int64 B
---
int64 Sum

在上面的例子中A和B是请求,sum是响应。

打开之前,我们所建立的包:

cd ~/catkin_ws/src/beginner_tutorials

在里面创建一个msg目录:

mkdir msg

新建一个msg文件,并写入数据:

echo "int64 num" > msg/Num.msg

这是一个最简单的例子,msg文件只包括一行,当然也可以在文件中写入更多的数据,打开package.xml:

vim package.xml

在里面添加下面两行:

  <build_depend>message_generation</build_depend><run_depend>message_runtime</run_depend>

之后保存退出。打开CMakeLists.txt:

vim CMakeLists.txt

添加message_generation 到如下代码片,添加后结果如下:

# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)

添加CATKIN_DEPENDS message_runtime ,如下:

catkin_package(...CATKIN_DEPENDS message_runtime ......)

找到下面的代码片:

# add_message_files(
#   FILES
#   Message1.msg
#   Message2.msg
# )

将它修改为:

add_message_files(FILESNum.msg
)

确保文件中有如下代码:

generate_messages()

我们可以使用rosmsg show命令来查看,消息的详细类型,rosmsg show的使用方法如下:

rosmsg show [message type]

查看Num消息类型如下:

rosmsg show Num

你将会看到:

[beginner_tutorials/Num]:
int64 num

下面介绍如何使用srv,打开一个终端,在里面输入:

roscd beginner_tutorials
mkdir srv

除了可以手工创建一个srv包以外,我们还可以从其他的包中复制,这时候roscp是一个非常有用的命令,它的使用方法如下:

roscp [package_name] [file_to_copy_path] [copy_path]

我们从rospy_tutorials这个包中复制,命令如下:

roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

接下来就是配置CMakeLists.txt文件,打开CMakeLists.txt:

vim CMakeLists.txt

在里面添加message_generation,我们之前已经添加过了,如下:

# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)

找到下面的代码片段:

# add_service_files(
#   FILES
#   Service1.srv
#   Service2.srv
# )

将其修改为:

add_service_files(FILESAddTwoInts.srv
)

保存退出。

使用rossrv show可以查看我们刚刚建立的服务类型,它的使用方法和rosmsg show相似,用法如下:

rossrv show <service type>

例如:

rossrv show beginner_tutorials/AddTwoInts

你将会看到返回的结果如下:

int64 a
int64 b
---
int64 sum

接下来我们看一下如何将上述的文件生成为ros支持的语言代码,打开CMakeLists.txt:

vim CMakeLists.txt

找到下面这部分代码:

# generate_messages(
#   DEPENDENCIES
# #  std_msgs  # Or other packages containing msgs
# )

将起修改为如下:

generate_messages(DEPENDENCIESstd_msgs
)

将我们之前的generate_messages( )去掉,保存退出。

现在重新构建一下这个包:

cd ../..
catkin_make
cd -

所有在msg目录下的.msg文件都会产生ros所支持的语言的源文件。C++消息的头文件产生在:

 ~/catkin_ws/devel/include/beginner_tutorials/

python的脚本产生在:

~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg

lisp文件产生在:

~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/

ROS的学习(十一)ROS的msg和srv相关推荐

  1. 12.ROS编程学习:ROS常用指令

    目录 rosnode 1.rosnode list--list active nodes 2.rosnode ping--test connectivity to node 3.rosnode inf ...

  2. 【ROS入门学习01| ROS命令行工具的使用】

    ROS命令行工具的使用 -----------------可以配合古月居的ROS入门教程来学习实践. 文章目录 ROS命令行工具的使用 一.roscore 二.rosrun 三.rqt_graph 四 ...

  3. 13.ROS编程学习:话题发布控制乌龟

    目录 准备工作 c++控制乌龟运动 python控制乌龟运动 参考学习资料:赵虚左的课程+古月的ROS机器人开发实践P56的例程. 准备工作 打开ROS乌龟仿真器 roscore rosrun tur ...

  4. ROS学习笔记八:创建ROS msg和srv

    ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...

  5. ros melodic学习之plugin

    ros melodic学习之plugin 开发环境说明及项目创建 plugin具体步骤 创建功能包 创建基类 创建plugin类 注册插件 编译插件的动态链接库 将插件加入ros 创建pluginli ...

  6. ros入门--中科院软件所ros学习笔记

    视频链接: 中科院软件所-机器人操作系统入门(ROS入门教程)_哔哩哔哩_bilibili 中科院软件所-机器人操作系统入门(ROS入门教程)_哔哩哔哩_bilibili 另外有一个不错的 学习网址: ...

  7. ROS学习----依据ROS入门教程,整理的ROS命令

    文章目录 ROS命令学习 文件系统介绍 ROS文件系统工具命令:rospack,rosstack roscd,rosls 创建ROS程序包命令:roscreate,catkin程序包结构,catkin ...

  8. ROS wiki系列|通过ROS wiki-tutorials学习节点

    前面几期我们讲的都是一些入门相关的内容-- ROS wiki系列|ROS wiki初探(自用) ROS wiki系列|Documentation-ROS部分讲解 ROS wiki系列|ROS入门基础概 ...

  9. Slam学习笔记——ROS踩坑记录

    Slam学习笔记--ROS踩坑记录 1. 安装 2. ROS文件系统 2.1 工作区 2.2 包package 2.2.1 包的操作 2.2.2 描述文件package.xml 2.3 节点node ...

  10. ROS学习笔记-ROS订阅和发布节点

    一个简单的ROS包,一个发布者,一个订阅者 刚开始学习ROS,参考网上的资料完成了测试节点的编写,记录一下. 个人习惯在home/Develop目录中做开发,于是在Develop目录下面创建了一个RO ...

最新文章

  1. 2018-4-2 幂律分布函数
  2. poj3617 贪心
  3. 如何解决python3.5.2安装scrapy的无法查找到vsvarall的问题
  4. 服务器虚拟化的培训,VMware服务器虚拟化及桌面虚拟化培训.pptx
  5. 比较jquery中的after(),append(),appendTo()方法
  6. Java并发基础问题总结
  7. 我的世界java启动失败_我的世界游戏启动失败怎么办 PC版游戏崩溃解决办法
  8. zedgraph怎么画曲线图_ZedGraph如何动态的加载曲线
  9. Proteus仿真STM32F103R6输出PWM波
  10. MSP430 DM430-A开发板学习笔记(二)MSP430f149与hc06蓝牙模块的使用
  11. Excel基础(14)条件格式与公式
  12. GraphQL(四):GraphQL工程化实践
  13. C++ VARIANT数据类型操作详解
  14. 精简JavaScript
  15. 计算机图形学:二维图形的几何变换(算法原理及代码实现)
  16. 群签名和环签名的区别_环签名,聚合签名
  17. Asp.Net读取excel文件的时候 出错提示:外部表不是预期的格式 解决方案
  18. [转载]windows mobile中区分cmwap或cmnet接入点
  19. 上海多宁生物获近亿元A+轮融资,汇桥资本、药明生物投资...
  20. Qtum量子链应邀出席第24届全美华人金融协会年会

热门文章

  1. [转载] python中将str转成数字_python如何将字符转换为数字
  2. [转载] python 遍历字符串 字符_python 遍历字符串(含汉字)实例详解
  3. python 在window 系统 连接并操作远程 oracle 数据库
  4. WOE(weight of evidence, 证据权重)
  5. 数据库操作--批量修改数据库表名及字段名大小写转换及首字母大写+删除没有数据无用的表...
  6. @Scheduled(cron=) spring定时任务时间设置
  7. SQL查询-巧用记录数统计人数
  8. Cracking The Coding Interview5.3 暂存
  9. Cordova WP8 插件开发
  10. Deep3DBox论文解读