ROS学习--6.msg和srv

1.msg和srv的说明

  • msg:msg文件是描述ROS消息字段的简单文本文件。它们用于生成不同语言的消息的源代码。

    msg文件存储在软件包的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,标头包含时间戳和ROS中常用的坐标帧信息。您会经常看到msg文件的第一行具有Header标头。

    • 这是一个使用Header,string和另外两个msg的示例:
     Header header
     string child_frame_id
     geometry_msgs/PoseWithCovariance pose
     geometry_msgs/TwistWithCovariance twist
    
  • srv:一个srv文件描述一项服务。它由两部分组成:请求和响应。

    srv文件存储在srv目录中

    • srv文件类似于msg文件,但它们包含两个部分:请求和响应。这两个部分之间用“ ---”线隔开。这是一个srv文件的示例:
    int64 A
    int64 B
    ---
    int64 Sum
    

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

2.msg

2.1创建一个msg

  1. 让我们在上一个教程中创建的包中定义一个新的msg
roscd beginner_tutorials
mkdir msg
echo "int64 num" > msg/Num.msg
  • 上面的示例.msg文件仅包含1行。当然,您可以通过添加多个元素(每行一个)来创建更复杂的文件,如下所示:
string first_name
string last_name
uint8 age
uint32 score
  1. 我们需要确保将msg文件转换为C ++,Python和其他语言的源代码:
  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>

请注意,在构建时,我们需要“ message_generation”,而在运行时,我们仅需要“ message_runtime”。

  1. 将message_generation依赖项添加到CMakeLists.txt中已经存在的find_package调用中,以便可以生成消息。您只需将message_generation添加到COMPONENTS列表中即可,如下所示:
find_package(catkin REQUIRED COMPONENTS
   roscpp
   rospy
   std_msgs
   message_generation
)
  1. 另外,请确保导出消息运行时依赖项。
catkin_package(
  ...
  CATKIN_DEPENDS message_runtime ...
  ...)
  1. 查找以下代码块:
# add_message_files(
#   FILES
#   Message1.msg
#   Message2.msg
# )
  • 通过删除#符号来取消注释,然后用.msg文件替换Message * .msg文件中的支架,使其看起来像这样:
add_message_files(
  FILES
  Num.msg
)
  1. 现在,我们必须确保调用了generate_messages()函数
# generate_messages(
#   DEPENDENCIES
#   std_msgs
# )
  • 只需取消注释即可
generate_messages(
  DEPENDENCIES
  std_msgs
)

到此msg文件创建完成

2.2使用rosmsg

  • 最后,我们确保ROS可以使用rosmsg show命令看到它。
rosmsg show beginner_tutorials/Num

输出:
int64 num
  • 如果您忘记了msg所在的软件包,则可以省略软件包名称。尝试:
rosmsg show Num

输出:
[beginner_tutorials/Num]:
int64 num

3.srv

3.1创建一个srv

  1. 让我们使用刚刚创建的包来创建srv:
roscd beginner_tutorials
mkdir srv
  1. 这里我们从另一个软件包中复制一个现有的srv定义。 为此,roscp是一个有用的命令行工具,用于将文件从一个软件包复制到另一个软件包
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
  • 查看一下我们复制的srv的内容:
cat srv/AddTwoInts.srv

输出:
int64 a
int64 b
---
int64 sum
  1. 我们需要确保将srv文件转换为C ++,Python和其他语言的源代码。
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

和以前一样,请注意,在构建时,我们需要“ message_generation”,而在运行时,我们只需要“ message_runtime”。

  1. 除非在上一步中已经对消息进行了此操作,否则请添加message_generation依赖项以在CMakeLists.txt中生成消息:
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)
  1. 删除#以取消注释以下行:
# add_service_files(
#   FILES
#   Service1.srv
#   Service2.srv
# )
  • 并将Service * .srv文件替换为您的服务文件
add_service_files(
  FILES
  AddTwoInts.srv
)
  1. 现在,我们必须确保调用了generate_messages()函数
# generate_messages(
#   DEPENDENCIES
#   std_msgs
# )
  • 只需取消注释即可
generate_messages(
  DEPENDENCIES
  std_msgs
)

到此srv文件创建完成

3.2使用rossrv

  • 最后,我们确保ROS可以使用rossrv show命令看到它。
rossrv show beginner_tutorials/AddTwoInts

输出:
int64 a
int64 b
---
int64 sum
  • 与rosmsg相似,您可以在不指定包名称的情况下找到这样的服务文件:
ossrv show AddTwoInts

输出:
[beginner_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum

[rospy_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum

​ > 在此显示了两个服务。因为我们是复制的srv文件,所以,第一个是您刚在beginner_tutorials包中创建的一个,第二个是rospy_tutorials包中预先存在的一个。

4.编译

  • 现在,我们已经发出了一些新消息,我们需要再次制作软件包:
roscd beginner_tutorials
cd ../..
catkin_make install
cd -

msg目录中的任何.msg文件都将生成用于所有受支持语言的代码。 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 /中。

同样,srv目录中的任何.srv文件都将以受支持的语言生成代码。对于C ++,这将在与消息头文件相同的目录中生成头文件。对于Python和Lisp,在“ msg”文件夹旁边将有一个“ srv”文件夹。

5.获取帮助

  • 我们已经看到了很多ROS工具。跟踪每个命令需要哪些参数可能很困难。幸运的是,大多数ROS工具都提供了自己的帮助。
rosmsg -h

输出:
  rosmsg show               显示讯息说明
  rosmsg list                    列出所有讯息
  rosmsg md5                 显示消息md5sum
  rosmsg package         列出包裹中的消息
  rosmsg packages       列出包含消息的软件包
  • 您还可以获取有关子命令的帮助
rosmsg show -h

输出:
Usage: rosmsg show [options] <message type>

Options:
  -h, --help  show this help message and exit
  -r, --raw   show raw message text, including comments

让我们只列出到目前为止使用的一些命令:

rospack = ros + pack(age):提供与ROS软件包有关的信息 
roscd = ros + cd:将目录更改为ROS软件包或堆栈 
rosls = ros + ls:列出ROS包中的文件 
roscp = ros + cp:从ROS包复制文件到ROS包 
rosmsg = ros + msg:提供与ROS消息定义有关的信息 
rossrv = ros + srv:提供与ROS服务定义有关的信息 
catkin_make:制作(编译)ROS程序包    
                    rosmake = ros + make:使(编译)一个ROS包(如果您不使用catkin工作区)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容