本文系统配置ubuntu20.04+ros1,是初学者按照ros官网初级教程学习记录,仅作个人学习记录,如有问题可联系本文作者。
附上ros1官网学习教程链接Documentation - ROS Wikihttps://wiki.ros.org/ros2官网学习教程链接Project Governance — ROS 2 Documentation: Rolling documentationhttps://docs.ros.org/en/rolling/The-ROS2-Project/Governance.html注意:如果使用的是ROS fuerte或早期版本,它们的rqt并不完善。请同时参考这个页面来使用旧的基于rx的工具。
一、预备工作
本文会用到rqt和turtlesim这两个软件包。如果没有安装,请先:
$ sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim
将<distro>替换成你安装的ROS发行版简称(比如kinetic或noetic等)。输入后等待结果,没有问题直接关闭终端就可以。
注意:你可能已经在之前的某篇中构建过rqt和turtlesim。不过如果不确定的话,再安装一次也不会有什么问题。如下:
二、使用rqt_console和rqt_logger_level
rqt_console连接到了ROS的日志框架,以显示节点的输出信息。rqt_logger_level允许我们在节点运行时改变输出信息的详细级别,包括Debug、Info、Warn和Error`。
现在让我们来看一下turtlesim在rqt_console中输出的信息,同时在使用turtlesim时切换rqt_logger_level中的日志级别。在启动turtlesim之前先在两个新终端中运行rqt_console和rqt_logger_level:
$ rosrun rqt_console rqt_console
$ rosrun rqt_logger_level rqt_logger_level
【注意:如果前期已经关闭所有窗口,会弹出错误,可以打开一个新的终端,根据要求输入roscore,并保持这个窗口。】
你会看到弹出两个窗口
现在让我们在另一个新终端中启动turtlesim:
$ rosrun turtlesim turtlesim_node
因为默认的日志级别是Info,所以你会看到turtlesim启动后发布的所有信息,如下图所示
现在让我们在rqt_logger_level窗口中刷新一下节点并选择Warn以修改日志级别,如下图所示
然后让我们把乌龟撞到墙上,看看rqt_console上会显示什么:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
2.1日志记录器级别
日志级别的优先级按以下顺序排列:
Fatal (致命) Error (错误) Warn (警告) Info (信息) Debug (调试)
Fatal是最高优先级,Debug是最低优先级。通过设置日志级别,你可以获得所有优先级级别,或只是更高级别的消息。比如,将日志级别设为Warn时,你会得到Warn、Error和Fatal这三个等级的日志消息。
现在按Ctrl+C退出turtlesim节点。接下来我们将使用roslaunch来启动多个turtlesim节点和一个模仿者节点,来让一个乌龟模仿另一个乌龟。
2.2使用roslaunch
roslaunch可以用来启动定义在launch(启动)文件中的节点。
用法:
$ roslaunch [package] [filename.launch]
先切换到我们之前创建和构建的beginner_tutorials软件包目录下:
$ roscd beginner_tutorials
如果roscd提示类似于roscd: No such package/stack 'beginner_tutorials'的话,你需要按照创建catkin工作空间后面的步骤使环境变量生效:
$ cd ~/catkin_ws $ source devel/setup.bash $ roscd beginner_tutorials
然后创建一个launch目录:
$ mkdir launch $ cd launch
注意:存放launch文件的目录不一定非要命名为launch,事实上都不用非得放在目录中,roslaunch命令会自动查找经过的包并检测可用的启动文件。然而,这种推荐的标准做法被认为是“最佳实践”。
2.3launch文件
现在一起创建一个名为turtlemimic.launch的launch文件
$ gedit turtlemimic.launch
并复制粘贴以下内容进去:
1 <launch> 2 3 <group ns="turtlesim1"> 4 <node pkg="turtlesim" name="sim" type="turtlesim_node"/> 5 </group> 6 7 <group ns="turtlesim2"> 8 <node pkg="turtlesim" name="sim" type="turtlesim_node"/> 9 </group> 10 11 <node pkg="turtlesim" name="mimic" type="mimic"> 12 <remap from="input" to="turtlesim1/turtle1"/> 13 <remap from="output" to="turtlesim2/turtle1"/> 14 </node> 15 16 </launch>
2.4launch解析
下面我们开始拆解launch XML文件。
1 <launch>
首先用launch标签开头,以表明这是一个launch文件。
3 <group ns="turtlesim1"> 4 <node pkg="turtlesim" name="sim" type="turtlesim_node"/> 5 </group> 6 7 <group ns="turtlesim2"> 8 <node pkg="turtlesim" name="sim" type="turtlesim_node"/> 9 </group>
此处我们创建了两个分组,并以命名空间(namespace)标签来区分,其中一个名为turtulesim1,另一个名为turtlesim2,两个分组中都有相同的名为sim的turtlesim节点。这样可以让我们同时启动两个turtlesim模拟器,而不会产生命名冲突。
11 <node pkg="turtlesim" name="mimic" type="mimic"> 12 <remap from="input" to="turtlesim1/turtle1"/> 13 <remap from="output" to="turtlesim2/turtle1"/> 14 </node>
在这里我们启动模仿节点,话题的输入和输出分别重命名为turtlesim1和turtlesim2,这样就可以让turtlesim2模仿turtlesim1了。
16 </launch>
这一行使得launch文件的XML标签闭合。
2.5使用roslaunch
现在让我们通过roslaunch命令来运行launch文件:
$ roslaunch beginner_tutorials turtlemimic.launch
除了以上内容外,还会出现两只可爱的小乌龟。
现在将会有两个turtlesim被启动,然后我们在一个新终端中使用rostopic命令发送:
在ROS Hydro及更新版本中,
-
$ rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
你会看到两个turtlesims同时开始移动,虽然发布命令只发送给了turtlesim1
我们还可以用rqt_graph来更好地理解launch文件所做的事情。打开一个新的终端,运行rqt并在主窗口中选择Plugins > Introspection > Node Graph:
$ rqt
或者直接运行:
$ rqt_graph
到此,我们算是已经学会了rqt_console和roslaunch命令的使用,接下来我们开始学习使用rosed了解ROS的编辑器选择。现在可以按Ctrl+C退出所有turtlesims节点了,因为在接下来的教程中你不会再用到它们。