前言
我们在之前体验过各种通信方法(主题、服务、动作),并且也构建了自定义了一些msg和srv,那么同样的,对于action,同样支持自定义。我们来试试吧(动作的概念及流程还请翻到之前的博客进行查看)。
动动手
创建接口功能包
进入工作空间src路径下(ros2_ws/src),创建一个包custom_action_interfaces:
$ros2 pkg create --license Apache-2.0 custom_action_interfaces
别忘了source环境变量啊(如果觉得每次都source一次很麻烦,可以在~/.bashrc的最后面将source /opt/ros/iron/setup.bash加上,一步到位),否则系统可找不到ROS命令的。
创建action文件
进入刚创建的custom_action_interfaces包根路径下,新建action文件夹:
$cd custom_action_interfaces
$mkdir action
我们在action里面新建个名字叫Fibonacci.action的文件,用来计算斐波那契数列,里面的内容如下:
int32 order
---
int32[] sequence
---
int32[] partial_sequence
order为我们设置的目标值,sequence为系统最终的结果,partial_sequence为中间的反馈值。
构建动作
action文件定义好了之后,为了使系统能产生新的动作类型代码,我们需要在CMakeLists.txt中添加如下内容:
find_package(rosidl_default_generators REQUIRED)rosidl_generate_interfaces(${PROJECT_NAME}"action/Fibonacci.action"
)
同时package.xml文件也须修改,将下面内容添加到里面:
<buildtool_depend>rosidl_default_generators</buildtool_depend><member_of_group>rosidl_interface_packages</member_of_group>
至此,我们可以来构建custom_aciton_interfaces包了,
$cd ~/ros2_ws
$colcon build --packages-up-to custom_action_interfaces
为了让环境找寻到刚刚生成的动作包,我们需要source install/setup.bash,然后看看此包的数据结构是否能被系统正确读取到:
$ros2 interface show custom_action_interfaces
没毛病,下一篇我们再来实现服务端和客户端来使用我们自定义的Fibonacci动作类型。
本篇完。