ros2学习笔记20--创建一个action(代码片段)

鸿_H 鸿_H     2022-12-15     486

关键词:

概要:这篇内容主要介绍如何创建一个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学习笔记12--创建ros2包(代码片段)

概要:这篇主要介绍如何创建ros2包环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.2创建自己第一个ros2包(原文:https://docs.ros.org/en/foxy/Tutor... 查看详情

ros2学习笔记21--编写action服务器和客户端(c++)(代码片段)

概要:这篇内容主要介绍如何使用C++来编写动作服务器和客户端环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.3.2编写动作服务器和客户端(... 查看详情

ros2学习笔记11--工作空间的创建(代码片段)

概要:这篇主要介绍工作空间的创建环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.1创建工作空间(原文:https://docs.ros.org/en/foxy/Tutorials/Wor... 查看详情

ros2学习笔记15--创建自定义ros2接口文件msg和srv(代码片段)

概要:这篇主要介绍如何创建定制型ros2接口文件msg和srv环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.7创建自定义ros2消息msg和srv文件(原文&#x... 查看详情

ros2学习笔记16--详述ros2接口(代码片段)

概要:这篇主要进一步介绍ros2接口.环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.8拓展ros2接口(原文:https://docs.ros.org/en/foxy/Tutorials... 查看详情

ros2学习笔记13--编写一个简单的发布器和侦听器(c++)(代码片段)

概要:这篇主要介绍编写发布器和侦听器的简单套路(C++)环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.3编写一个简单的发布器和... 查看详情

ros2学习笔记14--编写一个简单的服务器和客户端(c++)(代码片段)

概要:这篇主要介绍c++版本服务端和客户端的编写环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.5编写一个简单的服务器和客户端(C+... 查看详情

ros2学习笔记25--ros2话题统计编写教程(c++)(代码片段)

概要:这篇内容主要介绍用c++编写能够统计话题的侦听器环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现4.1ros2话题统计教程(C++)(... 查看详情

ros2学习笔记19--探索ros2doctor工具(代码片段)

概要:这篇主要介绍ros2doctor工具环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.11探索ros2doctor工具(原文:https://docs.ros.org/en/foxy/Tutorials/Get... 查看详情

ros2学习笔记10--使用ros2bag进行录制和回放数据(代码片段)

概要:这篇主要介绍使用ros2bag进行录制和回放数据环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.1.10录制和回放数据(原文:https://docs.ros.or... 查看详情

ros2学习笔记24--用colcon对包进行编译(代码片段)

概要:这篇内容主要介绍用colcon对包进行编译环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现3.6用colcon对包进行编译(原文:https://docs.ros.org/en/foxy/Tu... 查看详情

ros2学习笔记27--实现自定义内存分配器(代码片段)

概要:这篇内容主要介绍如何实现自定义内存分配器环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现4.3实现自定义内存分配器(原文:https://docs.ros.or... 查看详情

ros2学习笔记17--在类中使用参数(c++)(代码片段)

概要:这篇主要介绍在类中使用参数(C++)环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.9在类中使用参数(C++)(... 查看详情

ros2学习笔记29--项目从ros1迁移到ros2的经验参考(代码片段)

环境:ubuntu20.04,ros-foxy(ros2),vscode背景:项目需要,一直折腾把ros1下面的包升级到ros2版本.以下纯属个人查找资料摸索,自我理解所得,有错误的地方,望大佬们不吝赐教.1.消失的句柄ro... 查看详情

ros2学习笔记18-velodyne16雷达点云在ros2中可视化案例参考(代码片段)

环境:ubuntu20.04,ros-foxy,vscode,velodyne-16背景:练习如何将velodyne-16雷达点云数据在ros2中读取并可视化.折腾了很久,并没有找到类似案例,所以自己总结一下.1.修改电脑ip这里修改自己电脑ip,跟大多数... 查看详情

ros2学习笔记22--使用launch启动/监听多个node节点(代码片段)

概要:这篇内容主要介绍如何使用launch启动/监听多个node节点环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现3.4使用launch启动/监听多个node节点ÿ... 查看详情

ros2学习笔记23--将多个node节点组合到单一进程中(代码片段)

概要:这篇内容主要介绍将多个node节点组合到单一进程中环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现3.5多个node节点组合到单一进程中(原文:ht... 查看详情

ros2学习笔记26--使用快速dds查找服务作为查找协议(社区贡献)(代码片段)

概要:这篇内容主要介绍使用快速DDS查找服务作为查找协议(社区贡献)环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现4.2使用快速DDS查找服务作为... 查看详情