本教程介绍了如何创建msg和srv文件,以及rosmsg,rossrv,roscp等命令行工具。至于为什么选择deepin而不是ROS通用的ubuntu,也仅仅是为了支持国产系统。鉴于本人水平有限,如哪位攻城狮网友发现本文存在的问题,烦请留言指正,谢谢!

msg和srv文件介绍

  • msg:msg是用于描述ROS消息的简单文本文件。它们是用于生成不同语言的源代码
  • srv:srv文件用于描述ROS service。它由两部分组成request和response.

msg文件存储在包的msg目录中,srv文件存储在srv目录中。
msg文件只是每行带有字段类型和字段名称的简单文本文件,你可以使用的字段类型有:

  • int8,int16,int32,int64(uint*)
  • float32,float64
  • string
  • time,duration
  • 其他msg文件
  • 变长数组array[],固定长数组array[c]

在ROS中还有一种特殊的类型:Header.Header通常包括ROS中常用的时间戳和坐标帧信息。您经常会看到在msg文件中的第一行有Header.下面是一个包含Header,string,以及另外两个msg的示例

Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist

srv文件除了包含request和response两部分外其他与msg基本一致,这两部分使用—进行拆分。下面是一个srv文件的例子

int64 A
int64 B
---
int64 Sum

在上面的例子中A,B是request,Sum是response.

使用msg文件

创建msg

让我在之前创建的beginner_tutorials包中创建msg文件

roscd beginner_tutorials
mkdir msg
echo "int64 num" >> msg/Num.msg

上面的示例中Num.msg文件只包含一行。你可以通过添加多个元素来实现一个更为复杂的msg文件。

string first_name
string last_name
uint8 age
uint32 score

不过还有一步,我们需要确保msg文件可以被转换为C++,python和其他语言的源代码。打开package.xml文件,添加如下两行,并确保这两行没被注释掉:

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

注意,在构建时,我们需要message_generation,在运行时需要message_runtime.使用你喜欢的编辑器,打开CMakeList.txt.将message_generation依赖添加到已经存在的CMakeList.txt的find_package调用中。

# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis
find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmessage_generation
)

你可能注意到,有时候即使你没有为所有的依赖项使用find_package,你的项目也能正常构建。这是因为catkin将您的项目合成为一个,所以如果之前的项目调用find_package,你的项目会配置相同的值。要养成在项目中添加构建依赖的习惯。
另外要确保导出了消息运行依赖

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

然后需要在CMakeList.txt中添加msg文件

add_message_files(FILESNum.msg
)

通过手动添加.msg文件,我们可以确保CMake在添加其他msg文件后知道何时需要重新配置项目。现在我们需要确保调用generate_message()函数

generate_messages(DEPENDENCIESstd_msgs)

rosmsg

# 用法
rosmsg show [message type]
# 示例
# 前提你已经catkin_make过,并source对应的setup.bash
rosmsg show beginner_tutorials/Num
int64 num

上面所述的message type包含:包名 和msg文件名。当然如果你记不清对应的msg属于哪个包。
也可以调用

rosmsg show Num
[beginner_tutorials/Num]:
int64 num

使用srv文件

创建srv

同样切换到beginner_tutorials包目录,然后创建srv目录

roscd beginner_tutorials
mkdir srv

在手动创建一个srv文件之前我们可以使用roscp从其他ROS包复制一个srv文件

# 语法
roscp [package_name] [file_to_copy_path(src)] [copy_Path(dst)]
# 示例
roscp rospy_tutrials AddTwoInts.srv srv/AddTwoInts.srv

另外还有一步,我们需要确认srv文件能转成C++或python源码或其他语言。除非你已经做过了,否则
打开package.xml,增加如下两行

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

和使用msg保持一致,我们需要在运行时需要message_runtime,构建时需要message_generation.
需要按照如下修改CMakeList.txt.需要注意message_generation可用于srv和msg文件。

find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmessage_generation
)
# 另外需要增加srv文件
add_service_files(FILESAddTwoInts.srv
)

使用rosrv

rosrv可用于查看srv的具体内容

# 语法
rossrv show <service type>
# 示例
rossrv  show beginner_tutorials/AddTwoInts
int64 a
int64 b
---
int64 sum
# 与rosmsg类似如果记不清包名,可以不加rossrv  show AddTwoInts
[rospy_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum[beginner_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum

msg和srv文件常见步骤

  • 修改CMakeList.txt.去掉generate_messages的注释,并添加任何你依赖的包含消息使用的.msg文件的包(在本例中是std_msgs):
  • 并在此追加你需要的任何msg文件
generate_messages(DEPENDENCIESstd_msgsbeginner_tutorials
)
# 修改CMakeList.txt后即可构建此包
roscd beginner_tutorials
cd ../../
catkin_make
# 或者
catkin build

包的msg目录下的任何.msg文件都将生成用于所有所支持语言的代码。C++语言的头文件生成在
devel/include/beginner_tutorials/*,h Python脚本存放在devel/lib/python3/dist-packages/beginner_tutorials/msg/。相应的srv文件也会在对应的位置生成对应的头文件,或者python脚本。
消息格式完整规范
如果你正在构建使用新消息的C++节点,你还需要声明节点和消息之间的依赖关系

帮助

rosmsg -h
rosmsg is a command-line tool for displaying information about ROS Message types.Commands:rosmsg show     Show message descriptionrosmsg info     Alias for rosmsg showrosmsg list     List all messagesrosmsg md5      Display message md5sumrosmsg package  List messages in a packagerosmsg packages List packages that contain messagesrossrv -h
rossrv is a command-line tool for displaying information about ROS Service types.Commands:rossrv show     Show service descriptionrossrv info     Alias for rossrv showrossrv list     List all servicesrossrv md5      Display service md5sumrossrv package  List services in a packagerossrv packages List packages that contain servicesType rossrv <command> -h for more detailed usage

11_创建ROS msg和srv文件相关推荐

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

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

  2. ROS节点中创建msg和srv文件(kinetic/melodic)

    1.msg文件创建 #创建msg文件夹roscd ros_pkgmkdir msgcd msg#创建msg文件touch a_msg.msggedit a_msg.msg 在a_msg.msg文件中写 ...

  3. 创建ROS消息(msg)和服务(srv)

    一.msg和srv介绍 msg(消息):msg文件就是文本文件,用于描述ROS消息的字段.它们用于为不同编程语言编写的消息生成源代码. srv(服务):一个srv文件描述一个服务.它由两部分组成:请求 ...

  4. ROS学习-创建一个ROS msg和一个srv

    目录 ROS msg和srv的介绍 使用msg 创建一个msg 使用rosmsg命令 使用srv 创建一个srv 使用rossrv命令 msg和srv的通用步骤 使用Help 简要总结回顾 ROS m ...

  5. ROS msg srv

    ros通过message_generation.message_runtime将.msg文件和.srv文件自动转换成python或者C++的源码.用户只需定义简单的.msg和.srv文件即可. msg ...

  6. ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)

    ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点-python版本 rosed msg和srv 创建msg 使用rosmsg 创建srv 使用rossrv 重新make一下软 ...

  7. ros自定义service消息.srv文件中增加自定义.msg消息

    先制作msg文件 1. 在disinfect_msg包下创建 :testInfo.msg 文件 int32 Id string TargetName string X string Y string ...

  8. ROS自定义消息类型,编译无法生成 msg/srv 文件产生的头文件

    ROS自定义消息类型,编译无法生成 msg/srv 文件产生的头文件 参考博客: ros项目第一次编译无法找到msg/srv文件产生的头文件 message headers won't build f ...

  9. 操作ROS 的 msg文件 和 srv文件

    一.msg文件 1.1 msg文件就是一个简单的text文件 msg文件就是一个简单的text文件,其中每行有一个类型和名称,可用的类型如下: int8, int16, int32, int64 (p ...

最新文章

  1. C语言一维数组实现杨辉三角,一维数组实现杨辉三角
  2. python免费课程400节-庆国庆!新更新!《Python400集》课程更新 共14节
  3. 分享:Python使用cookielib和urllib2模拟登陆新浪微博并抓取数据
  4. android 连续调用方法是,android – SwitchPreferences多次调用onPreferenceChange()方法
  5. 继承 actionSupport
  6. pythonplot绘图xrd_学术干货 | 手把手教你如何快速绘制XRD标准图
  7. 轻量级云服务器部署K3S(公网部署)
  8. 【正一专栏】阿根廷和葡萄牙都进不了世界杯可能吗?
  9. stellarium-0.19.3.1-win64.exe下载
  10. 【信奥赛一本通】1183:病人排队(详细代码)
  11. 高分一号、二号样例数据下载
  12. 2022最新MN梦奈宝塔主机系统V1.5版本+UI不错
  13. 惠普 暗影精灵5(i7-9750H+gtx1660ti),ubuntu16.04 无法安装显卡驱动
  14. csr8670--不能不知道的基本知识,长期记录
  15. 余业有道,如何副业赚钱
  16. docker安装Oracle数据库
  17. 蓝牙防丢器距离的计算
  18. 【15】processing-三角函数(中文)
  19. culture defining_Defining Culture课件.ppt
  20. 获取qq头像api接口

热门文章

  1. 行业洞察 | 你的车载语音助手足够Smart吗?
  2. 西门子HMI_WinCC Flexible Smart V3下载
  3. 抽样技术--系统抽样
  4. Arduino与Proteus仿真实例-双向可控硅驱动仿真
  5. C#类似仪表盘数据显示的制作
  6. synergy一个鼠标控制多个电脑,synergy怎么用?synergy配置教程
  7. Action.c(17): Error -26374: The above not found error(s) may be explained by header and body byte
  8. 关于校园一卡通的便携化及Mifare M1卡的内部结构
  9. 如何自建一个慕课(微课)演播室
  10. 2021年全国税收总收入占GDP比重15.10%[图]