当前位置: 首页 > news >正文

【ROS2】创建自定义接口

在这里插入图片描述

ROS 系列学习教程(总目录)
ROS2 系列学习教程(总目录)

目录

  • 一、创建功能包
  • 二、创建接口定义文件
    • 2.1 创建 Message 接口 (msg/)
    • 2.2 创建 Service 接口 (srv/)
    • 2.3 创建 Action 接口 (action/)
  • 三、修改包配置文件
    • 3.1 修改 package.xml
    • 3.2 修改 CMakeLists.txt
  • 四、构建接口包
  • 五、验证接口

ROS2通讯接口包括三种类型的接口:Message Service Action

一、创建功能包

cd ros2_learning/code/src
# 语法:ros2 pkg create <package_name> --build-type ament_cmake
ros2 pkg create hello_world_interface --build-type ament_cmake

二、创建接口定义文件

进入包目录创建相应的文件夹和文件:

cd hello_world_interface
# msg srv action不是每个都必须,至少有其中一个
mkdir msg srv action

注意:默认情况下,接口文件命名必须遵循大驼峰命名法(帕斯卡命名法),接口协议字段必须遵循(小)蛇形命名,否则会编译失败。(后面会详述原因)

2.1 创建 Message 接口 (msg/)

示例:msg/RobotStatus.msg

在目录msg下创建文件 RobotStatus.msg,内容如下:

# 机器人状态信息
std_msgs/Header header
string robot_name
uint8 battery_level  # 电池电量百分比
bool is_connected    # 连接状态
float32 temperature  # 温度摄氏度
geometry_msgs/Pose2D current_pose  # 使用现有的geometry_msgs,单位:m,deg

示例:msg/MotorCommand.msg (更简单)

在目录msg下创建文件 MotorCommand.msg,内容如下:

# 电机控制命令
float32 left_speed   # 左轮速度 m/s
float32 right_speed  # 右轮速度 m/s
uint8 priority       # 命令优先级

2.2 创建 Service 接口 (srv/)

示例:srv/CalculatePath.srv

在目录srv下创建文件 CalculatePath.srv,内容如下:

# 请求:起点和终点位置
geometry_msgs/Point start
geometry_msgs/Point goal
---
# 响应:路径点和执行状态
geometry_msgs/Point[] path_points
bool success
string message  # 状态信息

示例:srv/SetLED.srv (简单示例)

在目录srv下创建文件 SetLED.srv,内容如下:

# 请求:设置LED状态
uint8 led_id    # LED编号
bool led_on     # 开关状态
---
# 响应:执行结果
bool success

2.3 创建 Action 接口 (action/)

示例:action/NavigateToGoal.action

在目录action下创建文件 NavigateToGoal.action,内容如下:

# 目标:导航到指定位置
geometry_msgs/PoseStamped target_pose
float32 max_velocity  # 最大速度
---
# 结果:导航完成后的状态
geometry_msgs/PoseStamped final_pose
uint32 execution_time  # 执行时间(秒)
bool success
string status_message
---
# 反馈:导航过程中的实时信息
geometry_msgs/PoseStamped current_pose
float32 distance_to_goal  # 距离目标距离
uint8 percent_complete    # 完成百分比

三、修改包配置文件

3.1 修改 package.xml

添加必要的依赖项:

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3"><name>hello_world_interface</name><version>0.0.0</version><description>TODO: Package description</description><maintainer email="1055311345@qq.com">Your Name</maintainer><license>TODO: License declaration</license><!-- 构建依赖 --><buildtool_depend>ament_cmake</buildtool_depend><!-- 必须添加 --><!-- 接口生成依赖 --><build_depend>rosidl_default_generators</build_depend><!-- 运行时依赖 --><exec_depend>rosidl_default_runtime</exec_depend><!-- 消息依赖(根据你使用的类型) --><depend>std_msgs</depend><depend>geometry_msgs</depend><depend>action_msgs</depend><!-- 必须的组 membership --><member_of_group>rosidl_interface_packages</member_of_group>
</package>

3.2 修改 CMakeLists.txt

配置接口生成:

cmake_minimum_required(VERSION 3.12)
project(hello_world_interface)if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic)
endif()# 查找依赖
find_package(ament_cmake REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(std_msgs REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(action_msgs REQUIRED)# 设置接口文件
set(msg_files"msg/RobotStatus.msg""msg/MotorCommand.msg"
)set(srv_files"srv/CalculatePath.srv""srv/SetLED.srv"
)set(action_files"action/NavigateToGoal.action"
)# 生成接口
rosidl_generate_interfaces(${PROJECT_NAME}${msg_files}${srv_files}${action_files}DEPENDENCIESstd_msgsgeometry_msgsaction_msgs
)# 安装接口文件
install(DIRECTORY msg srv actionDESTINATION share/${PROJECT_NAME}
)# 导出依赖
ament_export_dependencies(rosidl_default_runtime)
ament_export_dependencies(std_msgs)
ament_export_dependencies(geometry_msgs)
ament_export_dependencies(action_msgs)# 生成包配置
ament_package()

四、构建接口包

cd ~/ros2_learning/code
colcon build --packages-select hello_world_interface

五、验证接口

构建成功后,验证接口是否可用:

# Source 工作空间
source install/setup.bash# 查看所有自定义接口
ros2 interface list | grep hello_world_interface# 查看具体的接口定义
ros2 interface show hello_world_interface/msg/RobotStatus
ros2 interface show hello_world_interface/srv/CalculatePath  
ros2 interface show hello_world_interface/action/NavigateToGoal# 查看接口原型
ros2 interface proto hello_world_interface/msg/RobotStatus


欢迎大家加QQ群,一起讨论学习:894013891

http://www.dtcms.com/a/493075.html

相关文章:

  • php网站接口开发上海十大网站建
  • 个人网站开论坛本地创建wordpress
  • 深圳网站优化课程哪里学域名申请成功后怎么做网站
  • 临安营销型网站建设罗湖建设网站
  • 移动端的网站怎么做微信开放平台官方网站
  • 宁波网络公司网站建设项目o2o网站开发框架
  • 物流网站建设规划总结网站建设预付流程
  • 济南学习网站制作杭州家装口碑比较好的公司
  • 建设部网站查询通报网站制作时间代码
  • 怎样做网站建设公司网站制作找哪家
  • 建设网站需要分析什么织梦怎么在本地编辑多个网站
  • 杭州做网站找力果机械设计平台
  • 中山网站建设网站河北网站备案系统
  • 企业网站建设的方案书宁波网站优化公司
  • 制作俄语网站mip 网站
  • 网站中文域名到期个人注册的网站可以做公司宣传用吗
  • 沪浙网站网络营销策划方案ppt
  • 江苏做网站公司wordpress即时
  • 如何找做网站的公司wordpress爱找主题
  • 网站个人主页怎么做建站快车打电话
  • 网站按钮设计成什么颜色原因网站可以做弹窗广告么
  • No商业网站建设软件汇
  • 做poster网站上海最新新闻事件今天国内
  • 客户网站分析全屏响应式网站建设
  • 网站工程师招聘江西博网科技发展有限公司
  • 做推广用那个网站吗自己做网站用花钱吗
  • 金华做企业网站公司山东省住房和城乡建设厅网站注册中心
  • 廊坊网站制作潍坊公司电话网站建设公司哪家最好
  • 什么叫做门户网站电商网站的推广方式
  • 网站的特点有那些怎么制作网站编辑页面