当前位置: 首页 > news >正文

南宁网络营销网站设计专业干货推荐网站

南宁网络营销网站,设计专业干货推荐网站,wordpress响应式编辑器,怎么自己做网址在ROS系统中#xff0c;无论话题还是服务#xff0c;或者我们后续将要学习的动作#xff0c;都会用到一个重要的概念——通信接口。 通信并不是一个人自言自语#xff0c;而是两个甚至更多个人#xff0c;你来我往的交流#xff0c;交流的内容是什么呢#xff1f;为了让… 在ROS系统中无论话题还是服务或者我们后续将要学习的动作都会用到一个重要的概念——通信接口。 通信并不是一个人自言自语而是两个甚至更多个人你来我往的交流交流的内容是什么呢为了让大家都好理解我们可以给传递的数据定义一个标准的结构这就是通信接口。 接口的定义 接口的概念在各个领域随处可见无论是硬件结构还是软件开发都有广泛的应用。 比如生活中最为常见的插头和插座两者必须匹配才能使用电脑和手机上的USB接口也是什么Micro-USB、TypeC等等都是关于接口的具体定义。 软件开发中接口的使用就更多了比如我们在编写程序时使用的函数和函数的输入输出也称之为接口每一次调用函数的时候就像是把主程序和调用函数通过这个接口连接到一起系统才能正常工作。 更为形象的是图形化编程中使用的程序模块每一个模块都有固定的结构和形状只有两个模块相互匹配才能在一起工作这就很好的讲代码形象化了。 所以什么是接口它是一种相互关系只有彼此匹配才能建立连接。 回到ROS的通信系统它的主要目的就是传输数据那就得让大家高效的建立连接并且准确包装和解析传输的数据内容话题、服务等机制也就诞生了他们传输的数据都要符合通信接口的标准定义。 比如摄像头驱动发布的图像话题由每个像素点的R、G、B三原色值组成控制机器人运动的速度指令由线速度和角速度组成进行机器人配置的服务有配置的参数和反馈的结果组成等等类似这些常用的定义在ROS系统中都有提供我们也可以自己开发。 这些接口看上去像是给我们加了一些约束但却是ROS系统的精髓所在。举个例子我们使用相机驱动节点的时候完全不用关注它是如何驱动相机的只要一句话运行我们就可以知道发布出来的图像数据是什么样的了直接开始我们的应用开发类似的键盘控制我们也可以安装一个ROS包如何实现的呢不用关心反正它发布出来的肯定是线速度和角速度。 ROS通信接口 接口可以让程序之间的依赖降低便于我们使用别人的代码也方便别人使用我们的代码这就是ROS的核心目标减少重复造轮子。 ROS有三种常用的通信机制分别是话题、服务、动作通过每一种通信种定义的接口各种节点才能有机的联系到一起。 语言无关 为了保证每一个节点可以使用不同语言编程ROS将这些接口的设计做成了和语言无关的比如这里看到的int32表示32位的整型数int64表示64位的整型数bool表示布尔值还可以定义数组、结构体这些定义在编译过程中会自动生成对应到C、Python等语言里的数据结构。 话题通信接口的定义使用的是.msg文件由于是单向传输只需要描述传输的每一帧数据是什么就行比如在这个定义里会传输两个32位的整型数x、y我们可以用来传输二维坐标的数值。 服务通信接口的定义使用的是.srv文件包含请求和应答两部分定义通过中间的“—”区分比如之前我们学习的加法求和功能请求数据是两个64位整型数a和b应答是求和的结果sum。 动作是另外一种通信机制用来描述机器人的一个运动过程使用.action文件定义比如我们让小海龟转90度一边转一边周期反馈当前的状态此时接口的定义分成了三个部分分别是动作的目标比如是开始运动运动的结果最终旋转的90度是否完成还有一个周期反馈比如每隔1s反馈一下当前转到第10度、20度还是30度了让我们知道运动的进度。 标准接口 大家可能好奇ROS系统到底给我们定义了哪些接口呢我们可以在ROS安装路径中的share文件夹中找到涵盖众多标准定义大家可以打开几个看看。 一、ROS2创建自定义msg、srv和action文件的思路 ROS2通过自带rosidl_default_generators包来为自定义的msg、srv和action文件生成各个语言的头文件 ROS2通过在CMakeLists.txt中调用新增的宏rosidl_generate_interfaces来为msg、srv和action文件生成各个语言的头文件而这个宏的实现定义在rosidl_default_generators包。 二、基本数据类型 利用ROS2的原始基本数据类型和已有的数据类型可以自定义需要的数据类型。 2.1 ROS2的基本原始数据类型 ROS2目前支持的内置类型 每种内置类型都可以用来定义数组 所有比其ROS定义更宽松的类型均由软件强制执行ROS的范围和长度约束。 使用数组和有界类型的消息定义示例 int32[] unbounded_integer_array int32[5] five_integers_array int32[5] up_to_five_integers_arraystring string_of_unbounded_size string10 up_to_ten_characters_stringstring[5] up_to_five_unbounded_strings string10[] unbounded_array_of_string_up_to_ten_characters each string10[5] up_to_five_strings_up_to_ten_characters_each三、创建自定义的msg、srv和action 3.1 创建功能包 在本文中将在自己的包中创建自定义的.msg、.srv和.action文件然后在另外的包中使用它们这两个包应该在同一个工作空间dev_ws/src目录中,然后运行以下命令创建一个新包。 ros2 pkg create --build-type ament_cmake learning_intefacetutorial_interfaces是新包的名称。注意它是一个CMake包目前还没有办法在纯Python包中生成.msg、.srv和.action文件。但是可以在CMake包中创建自定义接口然后在Python节点中使用它。 将.msg、.srv和.action文件保存在自己的包中是一种很好的做法。在dev_ws/src/learning_inteface 目录下创建 mkdir msg srv action3.2 创建自定义接口文件 3.2.1 自定义msg文件 在learning_inteface/msg文件夹下创建一个名为Num.msg的新文件用一行代码声明它的数据结构 int64 num这是自定义的消息它传输一个名称为num的64位整数。 3.2.2 自定义srv文件 srv文件和msg文件相似除了它包含两个部分请求和响应。这两部分用“—”线分隔。 在learning_inteface/srv文件夹下创建一个名为AddThreeInts.srv的新文件并声明他的请求和响应结构 int64 a int64 b--- int64 sum这是自定义的服务它请求三个名为a、b 的整数并以一个名为sum的整数进行响应。 3.2.3 自定义action文件 按照以下格式定义.action文件 Request --- Result --- Feedback动作定义由三个消息定义组成它们之间用–分隔。 请求request消息从动作客户端发送到动作服务器初始化一个新目标。 当目标完成时结果result消息从动作服务器发送到动作客户端。 反馈feedback消息定期从动作服务器发送到动作客户端其中包含关于目标的更新。 一个动作的实例通常被称为目标goal。 假设想要定义一个新的动作“Fibonacci”来计算Fibonacci序列。 在learning_inteface/action目录中创建一个名为Fibonacci.action的文件内容如下: int32 order --- int32[] sequence --- int32[] partial_sequence目标请求是想要计算的斐波那契数列的order结果是最终的sequence而反馈是到目前为止计算的partial_sequence。 3.3 编译生成 3.3.1 CMakeLists.txt 要将自定义的接口interface转换成基于语言的代码如C和Python以便它们可以在这些语言中使用请将以下代码添加到CMakeLists.txt中: find_package(rosidl_default_generators REQUIRED)rosidl_generate_interfaces(${PROJECT_NAME}msg/Num.msgsrv/AddThreeInts.srvaction/Fibonacci.action)注意需要依赖于action_msgs因为动作定义包括额外的元数据(例如目标id)。 3.3.2 package.xml 因为接口依赖于rosidl_default_generators来生成基于语言的代码所以需要声明对它的依赖关系。提供其他包使用将以下行添加到package.xml中 dependaction_msgs/dependbuild_dependrosidl_default_generators/build_depend exec_dependrosidl_default_runtime/exec_depend member_of_grouprosidl_interface_packages/member_of_group3.3.3 编译 在工作空间的根目录(~/dev_ws)中运行以下命令: colcon build --packages-select learning_intefacesource install/setup.bash现在接口将被其他ROS 2包发现。
http://www.huolong8.cn/news/143335/

相关文章:

  • 制作网站的视频教程企业官网型网站建设
  • host绑定网站wordpress4.7 自豪
  • 沈阳做网站公司百姓网
  • 网站建设大作业有代码做房产网站长
  • 石家庄便宜做网站做电销有什么资料网站
  • 北京网站开发需要多少钱自建电商网站销售商品
  • 小型网站项目策划书广告设计专业英语
  • 手机网站被拦截怎么解除安国网站建设
  • 网站建设跟推广评价指标有什么关系wordpress的主题安装在什么目录
  • 南昌网站建设报价单品牌公司设计
  • 图书馆建设网站打不开wordpress数据库thinkphp
  • wxparse wordpress做十来个网站优化
  • 台式机做网站服务器网站内容建设的布局和结构
  • 学校网站建设招标公告建筑网招工网
  • 北京专业企业营销网站建设免费注册邮箱帐号
  • 网站服务器类型四川大学官方网站规划建设处
  • 域名网站账号seo网站建设视频教程
  • 婚恋网站女生要求男生要一起做淘宝专业网站建设制作
  • 网站程序上传教程收费下载网站源码
  • 做网站一定要有服务器吗昆明小程序公司
  • 重庆招聘网站有哪些重庆网站托管外包公司哪家好
  • 成都网站开发环球中心vps 同时翻墙和做网站
  • 仿站建站教程wordpress好看的插件
  • 阿里云的网站程序如何做襄阳php网站开发
  • 木渎网站建设丰都集团网站建设
  • 网站建设公司大概多少钱海南网站建设制作
  • 建设职业技术学院网站图文制作
  • 广州市专业做网站电商运营包括哪些方面
  • 公司网站建设代码都写完了市场营销案例分析及解答
  • 济南网站关键词优化公司网站的创建历程怎么写