ROS2 入门应用 创建自定义接口
1. 创建功能包
2. 创建自定义
- 2.1. 自定义消息
- 2.2. 自定义服务
- 2.3. 自定义动作
3. 添加依赖关系
4. 添加编译信息
- 4.1. 添加搜索库
- 4.2. 生成接口
5. 编译和查看
1. 创建功能包
在《ROS2 入门应用 发布和订阅(C++)》和《ROS2 入门应用 发布和订阅(Python)》中
已通过预定义的 消息 实现话题的发布和订阅
在《ROS2 入门应用 请求和应答(C++)》和《ROS2 入门应用 请求和应答(Python)》中
已创建预定义的 服务 实现服务的请求和应答
但有时可能还需要定义自己的消息、服务和动作
那么就创建一个独立的tutorial_interfaces教程接口功能包来实现自定义消息、服务和动作的功能
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake tutorial_interfaces
注意,它是一个CMake包
目前还没有办法在纯Python包中生成.msg或.srv或.action文件
.msg
、.srv
和.action
文件需要分别放在名为msg
、srv
和action
的目录中
在ros2_ws/src/tutorial_interfaces
中创建目录:
cd ~/ros2_ws/src/tutorial_interfaces
mkdir msg
mkdir srv
mkdir action
2. 创建自定义
2.1. 自定义消息
在刚刚创建的tutorial_interfaces/msg
目录,创建一个名为Sphere.msg
的新文件
cd ~/ros2_ws/src/tutorial_interfaces/msg
nano Sphere.msg
自定义球体消息,传输一个中心点center
和64位浮点数的半径radius
geometry_msgs/Point center
float64 radius
包含的数据可以是标准类型
float64
,int64
等
也可以是来自另一个消息包,如geometry_msgs/Point
2.2. 自定义服务
回到刚才创建的tutorial_interfaces/srv
目录,创建一个名为AddThreeInts.srv
的新文件
cd ~/ros2_ws/src/tutorial_interfaces/srv
nano AddThreeInts.srv
自定义三个整数求和服务,请求名为a、b和c的三个整数,并响应一个名为sum的整数
int64 a
int64 b
int64 c
---
int64 sum
2.3. 自定义动作
回到刚才创建的tutorial_interfaces/action
目录,创建一个名为Fibonacci.action
的新文件
cd ~/ros2_ws/src/tutorial_interfaces/action
nano Fibonacci.action
自定义斐波那契数列Fibonacci
(黄金分割数列)动作
请求目标:想要计算的斐波那契数列的顺序order
应答结果:最终数列sequence
反馈:目前计算的数列partial_sequence
int32 order
---
int32[] sequence
---
int32[] partial_sequence
3. 添加依赖关系
rosidl_default_generators
:用于生成特定于语言的代码rosidl_interface_packages
:功能包所属的依赖关系组
在package.xml
清单文件中,添加对它们的依赖项的声明
包括创建消息Sphere.msg
时引用了geometry_msgs
功能包
也需要依赖action_msgs
,因为动作定义包含额外的数据(例如目标id)
<depend>geometry_msgs</depend>
<depend>action_msgs</depend>
<buildtool_depend>rosidl_default_generators</buildtool_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
4. 添加编译信息
在CMakeLists.txt
编译文件中
4.1. 添加搜索库
首先,找到find_package(ament_cmake REQUIRED)
依赖项
在其下面添加搜索源文件所需(REQUIRED)的库
如自定义消息引用的geometry_msgs
和需要生成特定于语言代码的rosidl_default_generators
:
find_package(geometry_msgs REQUIRED)
find_package(rosidl_default_generators REQUIRED)
4.2. 生成接口
要将定义的接口转换为特定于语言的代码,并说明依赖性(DEPENDENCIES )
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/Sphere.msg"
"srv/AddThreeInts.srv"
"action/Fibonacci.action"
DEPENDENCIES geometry_msgs
)
5. 编译和查看
进入工作空间根目录
cd ~/ros2_ws
编译:
colcon build --packages-select tutorial_interfaces
现在可以打开一个新终端,使用ros2 interface show
命令确认接口创建工作是否正常:
ros2 interface show tutorial_interfaces/msg/Sphere
# geometry_msgs/Point center
# float64 x
# float64 y
# float64 z
# float64 radius
ros2 interface show tutorial_interfaces/srv/AddThreeInts
# int64 a
# int64 b
# int64 c
# ---
# int64 sum
ros2 interface show tutorial_interfaces/action/Fibonacci
# int32 order
---
# int32[] sequence
---
# int32[] partial_sequence
评论(0)
您还未登录,请登录后发表或查看评论