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

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

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_interfacesCMakeLists.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.txtpackage.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. python的数组

  2. 查看mysql的数据库物理存放位置

    1.查看mysql的数据库物理存放位置:    show global variables like "%datadir%";

  3. Docker学习(14) Docker容器的数据管理

    Docker容器的数据管理 Docker容器的数据卷 重要: Docker的数据卷容器 Docker数据卷的备份和还原

  4. vue 打包优化

    vue 打包优化 路由按需加载 通过vue写的单页应用时,可能会有很多的路由引入.当打包构建的时候,javascript包会变得非常大,影响加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后 ...

  5. NVIDIA深度学习Tensor Core性能解析(上)

    NVIDIA深度学习Tensor Core性能解析(上) 本篇将通过多项测试来考验Volta架构,利用各种深度学习框架来了解Tensor Core的性能. 很多时候,深度学习这样的新领域会让人难以理解 ...

  6. ADO.NET的五大对象

    ADO.NET是一种数据访问技术,使得应用程序可以连接到数据库存储,并以各种方式操作存储在其中的数据.该技术基于.NETFramework,与.NET Framework类库的其余部分高度集成. 其中 ...

  7. Spring Security 快速上手

    Spring Security 框架简介 Spring Security 说明 Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案 关于安全方面的两 ...

  8. Typescript学习总结

    typescript(以下简称TS)出来也有好长时间了,下面记录一下学习心得. 首先学这门语言前,请确保有以下基础知识: 扎实的javascript基础知识 es6的基础知识 面向对象编程的概念(没有 ...

  9. 高性能的Redis之对象底层实现原理详解

    对象 在前面的数个章节里, 我们陆续介绍了 Redis 用到的所有主要数据结构, 比如简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合, 等等. Redis 并没有直接使用这些数据结构来实 ...

  10. Android Studio使用Gradle引入第三方库文件

    原文链接:https://blog.csdn.net/qiutiandepaomo/article/details/81538937 使用AndroidStudio开发Android应用的时候,会经常 ...