IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 创建ROS消息(msg)和服务(srv) -> 正文阅读

[人工智能]创建ROS消息(msg)和服务(srv)

一、msg和srv介绍

  • msg(消息):msg文件就是文本文件,用于描述ROS消息的字段。它们用于为不同编程语言编写的消息生成源代码。

  • srv(服务):一个srv文件描述一个服务。它由两部分组成:请求(request)和响应(response)。

msg文件存放在软件包的msg目录下,srv文件则存放在srv目录下。

msg文件就是简单的文本文件,每行都有一个字段类型和字段名称。
可以使用的类型为:

  • int8, int16, int32, int64 (以及 uint*)
  • float32, float64
  • string
  • time, duration
  • 其他msg文件
  • variable-length array[] 和 fixed-length array[C]

???????ROS中还有一个特殊的数据类型:Header,它含有时间戳和ROS中广泛使用的坐标帧信息。在msg文件的第一行经常可以看到Header header。
???????下面是一个使用了Header、字符串原语和其他两个消息的示例: 下面是一个msg文件的样例,它使用了Header,string和其他另外两个消息的类型。

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

srv文件和msg文件一样,只是它们包含两个部分:请求和响应。这两部分用一条- - -线隔开。下面是一个srv文件的示例:

int64 A
int64 B
---
int64 Sum

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

二、创建功能包

catkin_create_pkg msg_srv roscpp rospy std_msgs

我们看一下所有的文件:
在这里插入图片描述

这样我们就创建了一个叫做msg_srv的功能包,以及我们在其子目录下创建了msg、srv两个文件夹用来存放需要的文件。

三、使用msg

1.创建.msg文件

在msg文件夹下创建Person.msg,内容如下:

string name
uint8 sex
uint8 age
uint32 score
uint8 male = 1
uint8 female = 2

2.在package.xml中添加功能包依赖

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

我们要确保msg文件能被转换为C++、Python和其他语言的源代码。
在构建时,其实只需要message_generation,而在运行时,我们只需要message_runtime。

3.在CMakeLists.txt添加编译选项

???????在CMakeLists.txt文件中,为已经存在里面的find_package调用添加message_generation依赖项,这样就能生成消息了。直接将message_generation添加到COMPONENTS列表中即可,如下所示:
在这里插入图片描述
???????有时即使没有使用全部依赖项调用find_package,项目也可以构建。这是因为catkin把你所有的项目整合在了一起,因此如果之前的项目调用了find_package,你的依赖关系也被配置成了一样的值。但是,忘记调用意味着你的项目在单独构建时很容易崩溃。

还要确保导出消息的运行时依赖关系:
在这里插入图片描述
找到如下代码块:
在这里插入图片描述
手动添加.msg文件后,我们要确保CMake知道何时需要重新配置项目。
现在必须确保generate_messages()函数被调用:
在这里插入图片描述
最终大概是这个样子:
在这里插入图片描述

3.编译以及source环境

4.测试

在这里插入图片描述

四、使用srv

???????在srv文件夹下创建Personn.srv(注意不能用和上面一样的Person.srv,因为编译之后它们在同一个文件夹生成的源文件一样

string name
uint8  age
uint8  sex

uint8 unknown = 0
uint8 male    = 1
uint8 female  = 2

---
string result

CMakeLists.txt文件修改:
在这里插入图片描述
测试:
在这里插入图片描述
???????msg目录中的任何.msg文件都将生成所有支持语言的代码。
???????C++消息的头文件将生成在…/devel/include/msg_srv/。Python脚本将创在…/devel/lib/python2.7/dist-packages/msg_srv/msg。而Lisp文件则出现在…/devel/share/common-lisp/ros/msg_srv/msg/。

???????类似地,srv目录中的任何.srv文件都将生成支持语言的代码。对于C++,头文件将生成在消息的头文件的同一目录中(这就是你不能在同一功能包下定义Person.msg和Person.srv的原因)。对于Python和Lisp,会在msg目录旁边的srv目录中。

本文内容参考:
ROS官方wiki:http://wiki.ros.org
古月——ROS入门21讲

如有错误或者不足之处,欢迎大家留言指正!

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:19:11  更:2022-05-05 11:20:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:52:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码