系列文章目录
留空
文章目录
前言
自用
常用工具介绍
Launch、rosbag2、RQT、RVIZ2和Gazebo。
(1)Launch启动文件
- 作用:在ROS2中,当需要同时启动多个节点(即程序或进程)时,使用launch文件可以简化操作。
- 特点:通过在一个文件中定义多个节点的启动命令和相关参数,可以实现多个节点的快速启动和配置。这极大提高了工作效率,并允许开发者在项目中更灵活地管理节点。
(2)rosbag2记录仪
- 作用:rosbag2是ROS 2的一个工具,用于录制和回放ROS 2系统中的消息(数据)。
- 特点:
录制与回放:可以录制话题数据,并在需要时回放。
灵活性:支持多种存储后端,如mcap或sqlite3,可根据需求选择不同的存储方式。
(3)RQT工具
- 作用:RQT是ROS 2的一个图形用户界面(GUI)工具,用于可视化ROS系统的各个方面。
- 特点:
直观性:提供了一个直观的界面,让开发者能够方便地查看和管理ROS 2节点、话题、服务、参数等。
插件化:RQT支持插件机制,开发者可以根据自己的需求编写和集成新的插件,从而扩展其功能。
(4)RVIZ2数据可视化工具
- 作用:RVIZ2是ROS 2中的一个数据可视化工具,用于将机器人感知到的数据(如图像、点云、地图等)以直观的方式显示出来。
- 特点:
灵活性:RVIZ2支持多种数据类型和可视化方式,可以根据需求进行配置和调整。
可扩展性:通过插件机制,开发者可以添加新的数据类型和可视化插件,以满足不同的应用需求。
(5)Gazebo仿真工具
- 作用:Gazebo是一个开源的3D机器人模拟器,用于在虚拟环境中模拟机器人的行为和性能。对于机器人开发人员来说,Gazebo是一个非常重要的工具,因为它可以在不实际构建机器人硬件的情况下进行测试和验证。
- 特点:
真实物理仿真:Gazebo可以模拟真实世界的物理行为,如重力、碰撞等。
多传感器模拟:Gazebo支持多种传感器的模拟,如相机、激光雷达等。
ROS集成:Gazebo与ROS 2无缝集成,使得在仿真环境中进行测试和验证变得非常方便。
一、Launch启动文件
手动启动和关闭多个ROS 2节点效率低下且容易出错。
使用launch
文件来管理和启动ROS 2节点,通过一次命令 启动多个节点 并 配置它们的参数。
通俗易懂版解释
假设你有一个ROS 2的工作空间,其中有两个节点:li4_node 和wang2_node。这两个节点都位于learning_topic这个包中。
现在,你想要同时启动这两个节点,但不想每次都手动输入命令。所以,你使用了ROS 2的启动文件功能。
你创建了一个launch.py文件。当你运行这个启动文件时,ROS2会自动读取这个文件,并执行generate_launch_description()函数。
这个函数告诉ROS2:“嘿,我需要启动learning_topic包中的li4_node和wang2_node节点。”然后,ROS 2就会按照你的指示,同时启动这两个节点。这样,你就不需要每次都手动输入命令来启动它们了。
首先,我们需要创建一个launch.py
文件
这次提前把CmakeLists.txt
写好,因为代码都是固定不变的。
#launch文件
install(DIRECTORY launch
DESTINATION share/${PROJECT_NAME})
这段代码的意思是“在构建和安装过程中,让launch
目录中的所有文件都被复制到ROS包的share
目录中,并以包名为子目录”。
这样,当你或其他人使用ros launch
命令来启动你的ROS节点时,它们就能找到正确的启动文件了。
放个完整代码
#(1)导入库
from launch import LaunchDescription
from launch_ros.actions import Node
#(2)定义启动描述生成函数
def generate_launch_description():
#(3)创建节点描述
li4_node = Node(
package="learning_topic",
executable="li4_node"
)
wang2_node =Node(
package="learning_topic",
executable="wang2_node",
parameters=[{'param_money': 20}]
)
#(4)生成启动描述
launch_topic = LaunchDescription([li4_node,wang2_node])
#(5)返回启动描述
return launch_topic
开始编写!!
1. 启动多个节点
编写launch文件的步骤:
(1)导入库
(2)定义启动描述生成函数
(3)创建节点描述
(4)生成启动描述
(5)返回启动描述
(1)导入库
from launch import LaunchDescription
from launch_ros.actions import Node
LaunchDescription
:这是launch
库中的一个类,用于创建和管理一个启动描述。启动描述是一组配置参数,用于启动ROS
2中的节点和其它资源。它是用于描述一个或多个ROS节点的启动配置的。Node
:这是launch_ros.actions
模块中的一个类,用于定义一个ROS 2节点的启动参数。
(2)定义启动描述生成函数
def generate_launch_description():
定义了一个名为generate_launch_description
的启动描述生成函数,这个函数将生成并返回一个启动描述。
(3)创建节点描述
li4_node = Node(
package="learning_topic",
executable="li4_node"
)
wang2_node =Node(
package="learning_topic",
executable="wang2_node"
)
创建了一个名为li4_node
的节点对象(wang2_node
同理)
package
参数指定了节点所在的ROS 2包名,这里是learning_topic
。executable
参数指定了要执行的可执行文件名,这里是li4_node
。
(4)生成启动描述
launch_topic = LaunchDescription([li4_node,wang2_node])
创建了一个LaunchDescription
对象,命名为launch_topic
。
这个对象包含了一个节点列表,列表中包含了之前创建的li4_node
和wang2_node
两个节点。
(5)返回启动描述
return launch_topic
最后,这个函数返回了生成的启动描述。这样,当ROS 2的启动文件被调用时,它就会知道需要启动哪些节点。
编译运行一下,打开一个终端
colcon build
source install/setup.sh
ros2 launch learning_topic topic_launch.py
2. 配置节点参数
想要在launch
文件中配置节点的参数,有一个很重要的前提,节点要有“参数”。具体看:ROS2 + C++ 参数(自用笔记)
这里我们简单带过一下
在wang2_node
节点里声明和创建参数
//补充 声明参数
this->declare_parameter("param_money", 5);
//补充 设置参数
money.data = this->get_parameter("param_money").as_int();
然后,我们就可以在lacunch
文件里配置参数啦
wang2_node =Node(
package="learning_topic",
executable="wang2_node",
parameters=[{'param_money': 20}]
)
这里把稿费升到20元
最后,编译测试一下有没有成功
二、rosbag2记录仪
这里我们以小说话题为例
1.录制
(1)打开一个终端,打开工作空间
cd towm_ws
(2)输入录制命令
模版:
- 记录一个话题
ros2 bag record /话题名称
- 记录多个话题
ros2 bag record 话题名称1 话题名称2
- 记录所有话题
ros2 bag record -a
- 自定义命名输出文件名称
ros2 bag record -o 文件名 话题名称
我们就记录一个话题
ros2 bag record /no_time
(3)打开另一个终端,开启李四作者节点
source install/setup.sh
ros2 run learning_topic li4_node
然后,就会自动被记录下来啦(出现红色框,就是正在记录)
crtl+c
停止记录
(3)查看记录文件
打开工作空间文件夹,可以看见多出一个rosbag文件
点进去,xxx.db3
这个就是刚刚记录话题内容的文件
我们用命令行查看一下此文件的信息
cd rosbag2_2024_06_03-16_36_39
ros2 bag info rosbag2_2024_06_03-16_36_39
以下文件各个信息的解释:
Files:rosbag2_2024_06_03-16_36_39_0.db3
这是被查询的rosbag文件的名称。它使用了一个日期和时间戳作为名称的一部分,以便更容易地识别录制的时刻。Bag size:24.0 KiB
这是rosbag文件的大小,表示为千字节(Kibibyte,简称KiB)。Storage id: sqlite3
这表示rosbag使用的存储后端是SQLite3数据库。
SQLite3是一个轻量级的、自包含的、无服务器的、零配置的、事务性的SQL数据库引擎。Duration:38.996s
这是rosbag中数据录制的总时长,即从第一个消息到最后一个消息的时间间隔。在这,录制了大约39秒的数据。Start: Jun 3 2024 16:37:16.242 (1717403836.242)
这是rosbag中第一个消息的时间戳。它给出了日期(2024年6月3日)、时间(16:37:16)和具体的秒和微秒(.242秒)。
括号中的数字是时间戳的Unix时间格式(自1970年1月1日以来的秒数)。End: Jun 3 2024 16:37:55.238(1717403875.238)
这是rosbag中最后一个消息的时间戳。Messages: 14
这个输出中没有直接显示“Messages”的数量,但从“Topic information”部分可以推断出至少有一个话题上有14条消息。Topic information: Topic: /no_time | Type: std_msgs/msg/String | Count: 14
这是rosbag中包含的一个话题的名称/no_time,消息类型是std_msgs/msg/String,发布到/no_time话题的消息数量有14条消息。
总的来说,这个rosbag文件记录了大约39秒的数据,包含一个话题/no_time,该话题上有14条std_msgs/msg/String类型的消息。
2.播放
(1)打开一个终端
ros2 topic echo /no_time
执行这个命令后,可以看到终端中打印出所有通过/no_time主题发布的最新消息。如果/no_time这个主题上有消息发布,在终端中就能看到这些消息的内容。如果没有消息发布,那么终端可能会保持静默,直到有消息到达。
在这的主要作用:播放bag文件时,能够看到消息被重新发布并打印出来。
(2)打开另一个终端
ros2 bag play rosbag2_2024_06_03-16_36_39_0.db3
这个命令用于回放一个之前录制的rosbag文件。
三、RQT工具
RQT(ROS Qt)是一个基于Qt框架的图形用户界面(GUI)工具集,用于ROS(Robot Operating System)系统的监控和调试。它通过插件的方式提供了丰富的界面工具,使得用户能够以图形化的方式管理和分析ROS系统中的节点、主题、服务等。
RQT插件介绍
rqt_graph
:用于显示ROS通信架构的图形化工具,可以清晰地看到各个节点之间的连接关系。rqt_plot
:用于绘制曲线图,可以实时显示话题数据的变化。rqt_console
:用于查看ROS系统的日志信息,帮助开发者进行调试。rqt_topic
:允许用户订阅和查看ROS主题的消息,提供了一个直观的消息查看界面。rqt_service_caller
:提供了一个图形化界面来调用ROS服务。rqt_param
:用于管理和查看ROS参数服务器中的参数。rqt_reconfigure
:允许用户动态地重新配置节点的参数。rqt_dep
:展示了ROS节点之间的依赖关系。
我们现在使用 rqt_graph
来查看话题节点之间的关系。
(1)运行话题节点
cd towm_ws
source install/setup.sh
ros2 launch learning_topic topic_launch.py
(2)打开rqt工具
rqt_graph
我们可以直观的看见,李四通过小说话题发布小说,王二订阅此小说。王二又通过收费话题发布费用,李四订阅此话题来查看收费。
目前只使用了此功能,以后用到其他的再添加。
四、RVIZ2数据可视化工具
暂时没用到,用到后再添加
五、Gazebo仿真工具
Gazebo就像一个超级逼真的虚拟现实游戏,但它不是为了娱乐,而是为了帮助我们设计、测试和模拟机器人。你不需要真实购买机器人和昂贵的传感器,只需要在电脑里“画”出你的机器人模型,并告诉Gazebo这个机器人有哪些传感器和电机。
当你把这一切都设置好后,Gazebo就会为你创建一个虚拟的“世界”,你的机器人会在这个世界里“生活”。在这个世界里,你的机器人就像真的一样,它的电机可以转动,传感器可以感知环境。而所有这些电机转动的数据、传感器感知的数据,都会通过ROS2发送出来,就像真实机器人做的那样。
所以,我们可以通过Gazebo和ROS2,不仅可以节省大量的金钱,还能加快你的研究和开发速度。
这里用两轮差速小车demo来体验一下
第一步: 下载安装Gazebo
sudo apt install gazebo
第二步: 安装ROS2的两轮差速功能包
sudo apt install ros-humble-gazebo-*
第三步: 运行两轮差速功能包
gazebo /opt/ros/humble/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world
第四步: 查看/demo/cmd_demo
话题
ros2 topic list -t
第五步: 让小车动起来
ros2 topic pub /demo/cmd_demo geometry_msgs/msg/Twist "{linear: {x: 0.2,y: 0,z: 0},angular: {x: 0,y: 0,z: 0}}"
还可以改一下参数,让小车返回
ros2 topic pub /demo/cmd_demo geometry_msgs/msg/Twist "{linear: {x: -1,y: 0,z: 0},angular: {x: 0,y: 0,z: 0}}"
总结
自用