ROS 2核心原理:构建机器人的基石
工作空间创建与编译
创建功能包
2.2 ROS 2机器人开发流程
# 创建功能包
$ mkdir -p ~/dev_ws/src
# 拉取代码仓库
$ git clone https://gitee.com/guyuehome/originbot_desktop.git
编译工作空间
安装完成后,还需要继续安装ROS 2的编译器colcon,并使用如下命令编译工作空间。设置环境变量
第一种是配置在当前终端的环境变量中,只在当前终端中有效,需要在终端执行以下命令。
第二种是配置在系统的环境变量中,也就是Linux的.bashrc文件中,需要在终端执行以下 命令。
创建功能包
2.3.2 创建功能包
$ cd ~/dev_ws/src
$ ros2 pkg create --build-type ament_cmake learning_pkg_cpp # 创建一个C++功能包
$ ros2 pkg create --build-type ament_python learning_pkg_python # 创建一个Python功能包
编译指定功能包
2.3.4 编译功能包
使用前需要安装colcon的扩展功能。
通过--packages-select 或者--packages-up-to 参数编译指定功能包,package_name用于替换某个具体功能包。$ cd ~/dev_ws
$ colcon build --packages-select <package_name>
# 只编译指定功能包
$ colcon build --packages-up-to <package_name>
# 编译指定功能包及相关依赖
清除编译历史
节点
2.4 节点:机器人的工作细胞
节点运行
$ ros2 run learning_node node_helloworld_class # Python
$ ros2 run learning_node_cpp node_helloworld_class # C++
节点的命令行操作
2.4.4 节点的命令行操作
目标检测
2.4.5 节点应用示例:目标检测
话题
话题运行示例
2.5.3 话题通信编程示例
话题的命令行操作
2.5.8 话题的命令行操作
$ ros2 topic list # 查看话题列表
$ ros2 topic info <topic_name> # 查看话题信息
$ ros2 topic hz <topic_name> # 查看话题发布频率
$ ros2 topic bw <topic_name> # 查看话题传输带宽
$ ros2 topic echo <topic_name> # 查看话题数据
$ ros2 topic pub <topic_name> <msg_type> <msg_data> # 发布话题消息
目标检测(周期式)
2.5.9 话题应用示例:目标检测(周期式)
更通用的相机驱动节点
$ sudo apt install ros-jazzy-usb-cam
$ ros2 run usb_cam usb_cam_node_exe
$ ros2 run learning_topic topic_webcam_sub
服务
服务运行示例
2.6.3 服务通信编程示例
$ ros2 run learning_service service_adder_server
$ ros2 run learning_service service_adder_client 2 3
服务的命令行操作
2.6.8 服务的命令行操作
$ ros2 service list # 查看服务列表
$ ros2 service type <service_name> # 查看服务数据类型
$ ros2 service call <service_name> <service_type> <service_data> # 发送服务请求
目标检测(请求式)
2.6.9 服务应用示例:目标检测(请求式)
$ ros2 service list # 查看服务列表
$ ros2 service type <service_name> # 查看服务数据类型
$ ros2 service call <service_name> <service_type> <service_data> # 发送服务请求
通信接口
2.7 通信接口:数据传递的标准结构
通信接口命令行操作
通信接口的命令行操作
$ ros2 interface list # 查看系统通信接口列表
$ ros2 interface show <interface_name> # 查看某个通信接口的详细定义
$ ros2 interface package <package_name> # 查看某个功能包中的通信接口定义
周期性发布目标检测的坐标
2.7.5 话题接口应用示例:周期性发布目标检测的坐标
$ ros2 run usb_cam usb_cam_node_exe
$ ros2 run learning_topic interface_object_pub
$ ros2 run learning_topic interface_object_sub
动作
2.8 动作:完整行为的流程管理
动作运行示例
2.8.3 动作通信编程示例
# 启动动作服务端
$ ros2 run learning_action action_move_server
# 启动动作客户端
$ ros2 run learning_action action_move_client
动作的命令行操作
2.8.9 动作的命令行操作
$ ros2 action list # 查看服务列表
$ ros2 action info <action_name> # 查看服务数据类型
$ ros2 action send_goal <action_name> <action_type> <action_data> # 发送服务请求
参数
2.9 参数:机器人系统的全局字典
参数命令行
2.9.3 参数的命令行操作
运行小海龟案例
查看参数列表参数查询与修改
$ ros2 param describe turtlesim background_b # 查看某个参数的描述信息
$ ros2 param get turtlesim background_b # 查询某个参数的值
$ ros2 param set turtlesim background_b 10 # 修改某个参数的值
查看参数列表
参数文件保存与加载
$ ros2 param dump turtlesim >> turtlesim.yaml # 将某个节点的参数保存到参数文件中
$ ros2 param load turtlesim turtlesim.yaml # 一次性加载某个文件中的所有参数
设置目标检测的阈值
2.9.6 参数应用示例:设置目标检测的阈值
$ ros2 run usb_cam usb_cam_node_exe
$ ros2 run learning_parameter param_object_detect
$ ros2 param set param_object_detect red_h_upper 180
数据分发服务(DDS)
2.10 数据分发服务(DDS):机器人的神经网络
命令行中配置DDS的QoS
2.10.4 命令行中配置DDS的QoS
$ ros2 topic pub /chatter std_msgs/msg/Int32 "data: 42" --qos-reliability best_effort
$ ros2 topic echo /chatter --qos-reliability reliable
$ ros2 topic echo /chatter --qos-reliability best_effort
DDS编程示例
2.10.5 DDS编程示例