ROS2学习之旅(20)——创建一个动作消息
本文用来自定义一个动作消息类型。
以下命令用来创建一个工作空间并建立一个功能包:
mkdir -p action_ws/src
cd action_ws/src
ros2 pkg create action_tutorials_interfaces
1.定义一个动作
按照以下格式定义.action文件:
# Request
---
# Result
---
# Feedback
动作定义由三个消息定义组成,它们之间用--分隔。
请求(request)消息从动作客户端发送到动作服务器,初始化一个新目标。
当目标完成时,结果(result)消息从动作服务器发送到动作客户端。
反馈(feedback)消息定期从动作服务器发送到动作客户端,其中包含关于目标的更新。
一个动作的实例通常被称为目标(goal)。
假设想要定义一个新的动作“Fibonacci”来计算Fibonacci序列。
在ROS 2包action_tutorials_interfaces中创建一个action目录:
cd action_tutorials_interfaces
mkdir action
在action目录中,创建一个名为Fibonacci.action的文件,内容如下:
int32 order
---
int32[] sequence
---
int32[] partial_sequence
目标请求是想要计算的斐波那契数列的order,结果是最终的sequence,而反馈是到目前为止计算的partial_sequence。
2.编译动作文件
在代码中使用新的Fibonacci动作类型之前,必须将定义传递给rosidl。
这可以通过在action_tutorials_interfaces的CMakeLists.txt来实现,在ament_package()行之前,将以下几行添加到文件中:
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"action/Fibonacci.action"
)
在package.xml文件中添加以下依赖:
<buildtool_depend>rosidl_default_generators</buildtool_depend>
<depend>action_msgs</depend>
<member_of_group>rosidl_interface_packages</member_of_group>
注意:需要依赖于action_msgs,因为动作定义包括额外的元数据(例如目标id)。
现在可以编译包含Fibonacci动作定义的包:
# Change to the root of the workspace
cd ~/action_ws
# Build
colcon build
按照约定,动作类型将以它们的包名和单词action作为前缀。因此,当想引用新动作时,它的全名将是action_tutorials_interfaces/action/Fibonacci。
可以用命令行工具检查动作文件是否成功构建:
# Source our workspace
# On Windows: call install/setup.bat
. install/setup.bash
# Check that our action definition exists
ros2 interface show action_tutorials_interfaces/action/Fibonacci
此时,可以看到斐波那契动作的定义打印到屏幕上。
3.总结
在本文中,学习了动作定义的结构,还学习了如何使用CMakeLists.txt和package.xml正确地编译一个动作,以及如何验证动作是否编译成功。
如果给您带来帮助,希望能给点个关注,以后还会陆续更新有关机器人的内容,点个关注不迷路~欢迎大家一起交流学习。
都看到这了,点个推荐再走吧~
未经允许,禁止转载。
ROS2学习之旅(20)——创建一个动作消息的更多相关文章
- ROS2学习之旅(4)——理解ROS2 Graph中的节点
ROS(2)图(ROS(2) graph)是一个同时处理数据的基于ROS2元素的网络,它包含了所有的可执行文件以及它们之间的连接.图中的基本元素包括:节点(nodes).话题(topics).服务(s ...
- ROS2学习之旅(21)——创建一个动作服务和客户节点(C++)
动作是ROS中的一种异步通信形式,动作客户端向动作服务器发送目标请求,目标服务器向操作客户端发送目标反馈和结果.本文基于前一篇自定义动作博文. 1.创建一个action_turtorials_cpp包 ...
- ROS2学习之旅(13)——创建ROS2 功能包
一个功能包可以被认为是ROS2代码的容器.如果希望能够管理代码或与他人共享代码,那么需要将其组织在一个包中.通过包,可以发布ROS2工作,并允许其他人轻松地构建和使用它. 在ROS2中,创建功能包使用 ...
- ROS2学习之旅(12)——创建工作空间
workspace(工作空间)是包含ROS2 packages(包)的文件夹.在使用ROS 2之前,有必要在终端中source一下ROS 2的安装工作区,这样就可以在该终端中使用ROS 2的软件包. ...
- ROS2学习之旅(14)——编写简单的发布者和订阅者(C++)
节点是通过ROS Graph进行通信的可执行进程.在本文中,节点将通过话题以字符串消息的形式相互传递信息.这里使用的例子是一个简单的"talker"和"listener& ...
- ROS2学习之旅(15)——编写简单的服务和客户节点(C++)
当节点使用服务进行通信时,发送数据请求的节点称为客户节点,响应请求的节点称为服务节点.请求和响应的结构由.srv文件决定. 本文的例子是一个简单的整数加法系统:一个节点请求两个整数的和,另一个节点响应 ...
- Oracle 数据库基础学习 (二) 学习小例子:创建一个表,记录商品买卖的情况
运行环境:Oracle database 11g + PL/SQL Developer ex: --创建一个表 create table plspl_test_product( --加入not n ...
- 【Android Developers Training】 20. 创建一个Fragment
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- maven学习3,如何创建一个web项目
Maven学习 (三) 使用m2eclipse创建web项目 1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容 2.新建一个maven的项目 ...
随机推荐
- uni-app 富文本解析-小程序
原文:http://www.upwqy.com/manual/info/105.html 1 引入插件 gaoyia-parse 链接:https://pan.baidu.com/s/1UusfXxH ...
- Django学习之完成数据库主从复制、读写分离和一主多从情况下的使用办法
1.首先配置多个数据库,在settings配置文件中配置以下内容: DATABASES = { 'default': { #默认数据库,配置多个mysql数据也是ok的,混用数据库也是ok的 'ENG ...
- Python+Selenium学习笔记15 - 读取txt和csv文件
读取txt的内容并用百度查找搜索 1 # coding = utf-8 2 3 from selenium import webdriver 4 import time 5 6 # 打开浏览器 7 d ...
- synchronized使用及java中的原子性问题
1.Synchronized关键字使用 class X { // 修饰非静态方法 synchronized void foo() { // 临界区 } // 修饰静态方法 synchronized s ...
- TinyML-TVM如何驯服TinyML
TinyML-TVM如何驯服TinyML 低成本,以人工智能为动力的消费类设备的激增,导致机器学习研究人员和从业人员对"裸机"(低功耗,通常没有操作系统)设备产生了广泛的兴趣.尽管 ...
- TorchScript神经网络集成技术
TorchScript神经网络集成技术 create_torchscript_neuropod 将TorchScript模型打包为neuropod包. create_torchscript_neuro ...
- 使用JavaScript获取url(request)中的参数
这次是使用JavaScript来获取url(request)中的参数 在日常页面编写的过程中为了方便操作在<script>中通过使用window.location.href="要 ...
- linux文件内容列传行_行转列
================ 文件内容列传行_行转列 ================ 一.列转行 1.编辑测试文件 vi log.txt 16:23:00 8.2% 1773620k 16:2 ...
- 【SQLite】教程06-SQLite表操作
创建表: CREATE TABLE 语句用于在任何给定的数据库创建一个新表.命名表.定义列.定义每一列的数据类型 查看表: 详细查看表: 重命名表: 删除表: 创建表并添加7条记录(第七条记录用了第二 ...
- Golang Heap 源码剖析
堆原理解析 堆一般指二叉堆.是使用完全二叉树这种数据结构构建的一种实际应用.通过它的特性,分为最大堆和最小堆两种. 如上图可知,最小堆就是在这颗二叉树中,任何一个节点的值比其所在子树的任意一个节点都要 ...