跳转至

ROS 2核心原理:构建机器人的基石

工作空间创建与编译

创建功能包

2.2 ROS 2机器人开发流程

# 创建功能包
$ mkdir -p ~/dev_ws/src 
# 拉取代码仓库
$ git clone https://gitee.com/guyuehome/originbot_desktop.git

编译工作空间

$ cd ~/dev_ws 
$ rosdep install --from-paths src --ignore-src -r -y 
安装完成后,还需要继续安装ROS 2的编译器colcon,并使用如下命令编译工作空间。

$ sudo apt install python3-colcon-ros 
$ cd ~/dev_ws/ 
$ colcon build

设置环境变量

第一种是配置在当前终端的环境变量中,只在当前终端中有效,需要在终端执行以下命令。

$ source ~/dev_ws/install/setup.bash  

第二种是配置在系统的环境变量中,也就是Linux的.bashrc文件中,需要在终端执行以下 命令。

$ echo "source ~/dev_ws/install/setup.bash" >> ~/.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的扩展功能。

$ sudo apt install python3-colcon-common-extensions
通过--packages-select 或者--packages-up-to 参数编译指定功能包,package_name用于替换某个具体功能包。

$ cd ~/dev_ws 
$ colcon build --packages-select <package_name>    
# 只编译指定功能包 
$ colcon build --packages-up-to <package_name>     
# 编译指定功能包及相关依赖

清除编译历史

$ cd ~/dev_ws 
$ rm -rf install/ build/ log/   # 清除工作空间中的编译历史

节点

2.4 节点:机器人的工作细胞

节点运行

$ ros2 run learning_node node_helloworld_class       # Python
$ ros2 run learning_node_cpp node_helloworld_class   # C++

节点的命令行操作

2.4.4 节点的命令行操作

$ ros2 node list                # 查看节点列表 
$ ros2 node info <node_name>    # 查看节点信息 

目标检测

2.4.5 节点应用示例:目标检测

$ ros2 run learning_node node_object_webcam    # 虚拟机环境注意设置相机

话题

话题运行示例

2.5.3 话题通信编程示例

$ ros2 run learning_topic topic_helloworld_pub
$ ros2 run learning_topic topic_helloworld_sub

话题的命令行操作

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 话题应用示例:目标检测(周期式)

$ ros2 run learning_topic topic_webcam_pub 
$ ros2 run learning_topic topic_webcam_sub 

更通用的相机驱动节点

$ 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 run turtlesim turtlesim_node 
$ ros2 run turtlesim turtle_teleop_key 
查看参数列表

$ ros2 param list 

参数查询与修改

$ ros2 param describe turtlesim background_b     # 查看某个参数的描述信息 
$ ros2 param get turtlesim background_b          # 查询某个参数的值 
$ ros2 param set turtlesim background_b 10       # 修改某个参数的值 

查看参数列表

$ ros2 param list 

参数文件保存与加载

$ 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编程示例

$ ros2 run learning_qos qos_helloworld_pub 
$ ros2 run learning_qos qos_helloworld_sub 

图片1