本文用来自定义一个动作消息类型。

以下命令用来创建一个工作空间并建立一个功能包:

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)——创建一个动作消息的更多相关文章

  1. ROS2学习之旅(4)——理解ROS2 Graph中的节点

    ROS(2)图(ROS(2) graph)是一个同时处理数据的基于ROS2元素的网络,它包含了所有的可执行文件以及它们之间的连接.图中的基本元素包括:节点(nodes).话题(topics).服务(s ...

  2. ROS2学习之旅(21)——创建一个动作服务和客户节点(C++)

    动作是ROS中的一种异步通信形式,动作客户端向动作服务器发送目标请求,目标服务器向操作客户端发送目标反馈和结果.本文基于前一篇自定义动作博文. 1.创建一个action_turtorials_cpp包 ...

  3. ROS2学习之旅(13)——创建ROS2 功能包

    一个功能包可以被认为是ROS2代码的容器.如果希望能够管理代码或与他人共享代码,那么需要将其组织在一个包中.通过包,可以发布ROS2工作,并允许其他人轻松地构建和使用它. 在ROS2中,创建功能包使用 ...

  4. ROS2学习之旅(12)——创建工作空间

    workspace(工作空间)是包含ROS2 packages(包)的文件夹.在使用ROS 2之前,有必要在终端中source一下ROS 2的安装工作区,这样就可以在该终端中使用ROS 2的软件包. ...

  5. ROS2学习之旅(14)——编写简单的发布者和订阅者(C++)

    节点是通过ROS Graph进行通信的可执行进程.在本文中,节点将通过话题以字符串消息的形式相互传递信息.这里使用的例子是一个简单的"talker"和"listener& ...

  6. ROS2学习之旅(15)——编写简单的服务和客户节点(C++)

    当节点使用服务进行通信时,发送数据请求的节点称为客户节点,响应请求的节点称为服务节点.请求和响应的结构由.srv文件决定. 本文的例子是一个简单的整数加法系统:一个节点请求两个整数的和,另一个节点响应 ...

  7. Oracle 数据库基础学习 (二) 学习小例子:创建一个表,记录商品买卖的情况

      运行环境:Oracle database 11g + PL/SQL Developer ex: --创建一个表 create table plspl_test_product( --加入not n ...

  8. 【Android Developers Training】 20. 创建一个Fragment

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. maven学习3,如何创建一个web项目

      Maven学习 (三) 使用m2eclipse创建web项目   1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容 2.新建一个maven的项目 ...

随机推荐

  1. 为鸿蒙OS说两句公道话(我对鸿蒙OS的一些看法)

    为鸿蒙说两句公道话 今天看了鸿蒙系统的评测,看完后我感觉很欣慰,为什么这么说 ? 不是很多人吐槽鸿蒙是 Android 套壳吗 ?或者叫鸿蒙 UI 吗?说鸿蒙没有自己的核心技术.看了鸿蒙系统的设计,底 ...

  2. python发送丁丁消息

    import requests import time import hashlib import hmac import base64 import re def SendMessage(messa ...

  3. Tengine Framework基础

    Tengine Framework基础 最受开发者喜爱的边缘AI计算框架 Tengine是OPEN AI LAB推出的自主知识产权的边缘AI计算框架,致力于解决AIoT产业链碎片化问题,加速AI产业化 ...

  4. CPU性能PK

    CPU性能PK AMD vs Intel 2020: Who Makes the Best CPUs? 英文原文链接:https://www.tomshardware.com/features/amd ...

  5. 循环IRNNv2Layer实现

    循环IRNNv2Layer实现 IRNNv2Layer实现循环层,例如循环神经网络(RNN),门控循环单元(GRU)和长期短期记忆(LSTM).支持的类型为RNN,GRU和LSTM.它执行循环操作,该 ...

  6. 打造住院新体验,GVS智慧病房有何独到之处?

    3月26-28日,由广东省医院协会主办的"2021第二届广东省医院建设大会暨医院建筑与装备展览会"在广州琶洲国际采购中心盛大举办,来自全国各地的医院代表及企事业单位代表4000余人 ...

  7. Excel创建序列号1000个

    一.输入1,并且选择 二.开始-填充 三.选择序列 四.选择列-等差序列-步张值输入1 终止值输入1000 点击确定 五.查看结果,选中这一列 六.快捷键 Ctrl+下键 则跳转到最下方,上键则是最上 ...

  8. 基于Android平台的图书管理系统的制作(3)

    前两篇介绍了主页面和Student,这一篇来讲Book类和工作人员. Book是图书管理系统的核心,查书,借书,还书,增加书都与Book类息息相关.Book类的设计很简单:包含信息:名称.作者.页数. ...

  9. 【VBA】excel自动换名字打印

    源码: Sub m() For i = 1 To 100 ActiveSheet.PrintOut copies:=1 Cells(1, 1) = Sheets(2).Cells(i, 1) Next ...

  10. 浏览Github必备的5款神器级别的Chrome插件

    我们知道 Github 是程序员特有的宝藏,也可以称它为 GayHub, 大家浏览 Github 的时候,一定遇到过下面这些问题: 不克隆到本地的情况下阅读代码困难. 无法单独下载仓库中的某个文件/文 ...