ROS2学习笔记20--创建一个action

Posted 鸿_H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS2学习笔记20--创建一个action相关的知识,希望对你有一定的参考价值。

概要:这篇内容主要介绍如何创建一个action

环境:ubuntu20.04,ros2-foxy,vscode

最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.

3.1创建一个动作(原文:https://docs.ros.org/en/foxy/Tutorials/Actions/Creating-an-Action.html

>>教程>>创建一个动作

你正阅读的是ros2较老版本(Foxy),但仍然支持的说明文档.想查看最新版本的信息,请看galactic版本链接( https://docs.ros.org/en/galactic/Tutorials.html

创建一个动作

目标:在ro2包里面定义一个动作

课程等级:中级

时长:5min

目录

1.背景
2.预备知识
3.步骤
3.1定义一个动作
3.2编译一个动作
4.总结
5.下一步
6.相关内容

1.背景

你在之前ros2动作课程学习到动作(知识).例如其他的通信类型和它们各自的接口(话题/msg,服务/srv),你也可以在自己包里面自定义动作.这节课向你展示如何定义和编译动作来使用,下节课要学习编写的动作服务器和动作客户端.

2.预备知识

你应该安装了ros2colcon

设置好工作空间,创建一个名为action_tutorials_interfaces的包:

(记得首先source一下ros2环境变量)

linux:

mkdir -p action_ws/src
cd action_ws/src
ros2 pkg create action_tutorials_interfaces

3.步骤

3.1定义一个动作

动作定义在.action文件中,样式如同:

# Request
---
# Result
---
# Feedback

动作由三个定义信息组成,并且信息之间使用---隔开.

request请求信息,动作客户端发出,传到动作服务器端来启动一个新目标.

result结果信息,当目标达成时,该信息由动作服务器发出,传到动作用户端

Feedback反馈信息,定期从动作服务器发送关于目标情况的信息到动作用户端.

一个动作实例可以等同于一个目标.

我们想用一个Fibonacci动作计算斐波纳契数列.

在我们的ros2action_tutorials_interfaces,创建一个action目录

linux:

cd action_tutorials_interfaces
mkdir action

action目录,创建包含一下内容,名为Fibonacci.action文件:

int32 order
---
int32[] sequence
---
int32[] partial_sequence

order是我们想要计算的斐波纳契数列的请求目标,sequence是结果,partial_sequence是当前为止的反馈.

3.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依赖关系的,由于动作定义包括另外的元数据(例如:goal IDs

现在,我们可以编译包含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

你会看到Fibonacci动作打印到屏幕上.

4.总结

在本课程,你学习了动作结构定义.你也学习了如何配置CMakeLists.txtpackage.xml去构建一个新动作接口,以及如何检查是否成功构建.

5.下一步

下一步,让我们运用新定义的动作接口,创建一个动作服务器和客户端(c++python).

6.相关内容

想了解更多ros动作内容,可以参考设计文档(http://design.ros2.org/articles/actions.html).

其他

个人认为重点:

自定义动作的结构编写;包里面的CMakeLists.txtpackage.xml的配置;如何验证动作的成功构建.

这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.

#####################
不积硅步,无以至千里
好记性不如烂笔头
感觉有点收获的话,麻烦大大们点赞收藏哈

以上是关于ROS2学习笔记20--创建一个action的主要内容,如果未能解决你的问题,请参考以下文章

ROS2学习笔记21--编写action服务器和客户端(C++)

ROS2学习笔记12--创建ros2包

ROS2学习笔记9--创建一个launch文件

ROS2学习笔记11--工作空间的创建

ROS2学习笔记15--创建自定义ros2接口文件msg和srv

ROS2学习笔记1--配置ros2环境