本系列文章是与大家分享一下,我在学习ROS过程中所做的笔记,本系列文章主要的学习资料是古月老师(胡春旭老师)的 ROS入门21讲(文章中部分图片来源于ROS入门21讲课件),以及其编著的《ROS机器人开发实践》,当然其中也加入了我自己的理解和其他的相关资料,本系列文章共五篇,本篇文章是本系列第五篇文章。launch启动文件的使用方法、常用可视化工具的使用方法
十四、launch启动文件的使用方法
1、Launch文件通过XML文件实现多节点的配置和启动,Launch文件可自动启动ROS Master,文件中每一个note都是一个节点,相当于rosrun命令
7、launch示例1
(1)首先我们在工作空间的src文件夹下,新建一个名为learning_launch的功能包,不需要添加依赖,因为launch文件是一个启动文件,基本都是链接其他库里面的功能
catkin_create_pkg learning_launch
(2)我们在该功能包下创建一个名为launch的文件夹,然后将写好的名为simple.launch的文件添叫到该文件夹下,该文件的内容如下:
<launch>
<node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />
<node pkg="learning_topic" type="person_publisher" name="listener" output="screen" />
</launch>
该程序中两个node标签分别启动两个节点,第一个节点是learning_topic功能包里面的person_subscriber节点,运行后名为talker,使用output在终端中显示日志信息,第二个节点是learning_topic功能包里面的learning_topic节点,运行后名为listener,使用output在终端中显示日志信息
(3)在打开该文件后在下方选择MXML后会进行高亮显示,方便我们查看和阅读
(4)我们回到工作空间根目录下,对其进行编译(catkin_make),让工作空间知道有个learning_launch党的功能包加进来了,
(5)接下来就可以运用roslaunch命令来启动launch文件了,后面的跟的第一个参数是功能包名,第二个参数是launch文件名,如下所示,启动learning_launch功能包下的simple.launch文件
roslaunch learning_launch simple.launch
8、launch示例2
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为turtlesim_parameter_config.launch,代码如下所示:
<launch>
<param name="/turtle_number" value="2"/>
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<param name="turtle_name1" value="Tom"/>
<param name="turtle_name2" value="Jerry"/>
<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
</node>
<node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
</launch>
(4)接下来的两行语句分别设置了值为Tom的变量turtle_name1和值为Jerry的变量turtle_name2
这里需要在learning_launch功能包下新建一个名为config的文件夹,并把我们需要的名为param.yaml的文件放在该文件夹下,该文件的内容如下图所示:
(7)接下来我们再终端输入以下命令,运行一下示例2所介绍的launch文件,运行后,使用键盘的↑↓←→就可以控制海龟运动了,
roslaunch learning_launch turtlesim_parameter_config.launch
(8)我们打开一个新的终端输入rosparam list命令就可以查看当前的参数,下图红色框内的参数就是我们通过启动文件turtlesim_parameter_config.launch加载的
(9)这里我们发现参数/turtle_number前没有前缀,而上图的红框内的其他参数都有一个前缀/turtlesim_node,这是因为在该launch文件中参数/turtle_number是在节点之外设定的(如下图的红框所示),而其他的是在节点turtlesim_node之内设定的(如下图的蓝框和所示),所以他会在变量前加一个节点名的前缀,在变量C和D前还有个/group的前缀,这是因为在param.yaml文件中C和D参数前加了个命名空间group,这样做可以有效的避免资源冲突
9、launch示例3
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为start_tf_demo_c++.launch,代码如下所示:
<launch>
<!-- Turtlesim Node-->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_listener" name="listener" />
</launch>
(2)上面运行节点的方法跟之前的示例一样,就不详细展开了,首先先启动了海龟仿真器,再启动了键盘控制节点,接下来启动了两个广播器turtle_tf_broadcaster在这里我们对同一个节点调用了两次,第一次运行后重命名为turtle1_tf_broadcaster,输入参数为/turtle1,第二次运行后重命名为turtle2_tf_broadcaster,输入参数为turtle2,接下来运行了监听器turtle_tf_listener,运行后的名字为listener
(3)在终端中输入以下命令,来启动本例中的launch文件,启动成功后,使用键盘控制海龟1移动,海龟2就会自动跟随海龟1的运动
roslaunch learning_launch start_tf_demo_c++.launch
10、launch示例4
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为turtlesim_remap.launch,代码如下所示:
<launch>
<include file="$(find learning_launch)/launch/simple.launch" />
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
</node>
</launch>
c++中的include的作用)
(4)通过以下命令来运行本例中的launch文件
roslaunch learning_launch turtlesim_remap.launch
(5)此时使用rostopic list命令,来查看当前的话题,已经由/turtle1 /cmd_vel变为了/cmd_vel
(6)此时,我们使用rostopic pub去发布一个速度指令,海龟就会进行运动(输入rostopic pub /cmd_vel后,双击tab键会自动补齐剩余部分)
十五、常用可视化工具的使用方法
1、计算图可视化工具rqt_graph: 可以显示ros里面的计算图资源,椭圆代表节点,箭头代表话题
首先我们先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,最后通过rqt_graph命令,来显示计算图,通过这个计算图我们可以很快的了解系统的全貌,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_graph
如上图所示,其中的/turtlesim是我们启动的仿真器节点,/teleop_turtle 是键盘控制节点,他们之间的话题是/turtle1/cmd_vel
2、日志输出工具 rqt_console
首先我们依旧先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,再运行rqt_console命令,rqt_console可以帮助我们查看日志信息、警告信息、错误信息等,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_console
我们用键盘控制海龟碰撞边界,就可以在rqt_console中查看到警告信息了
3、数据绘图工具 rqt_plot
首先我们依旧先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,再运行rqt_plot命令,rqt_plot可以用来绘制数据曲线,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_plot
我们在rqt_plot中输入/它会自动列出可选择的话题,使用键盘上的↑↓键可以来进行选择,按enter键确认,这里我们以海龟的位置信息为例,选择turtle1/pose,确认后,我们用键盘控制海龟移动,就可以在rqt_plot中查看到相关的波形变化了
有时候在拖拽rqt_plot窗口调整大小时会报错rqt_plot停止运行之类的,重新启动rqt_plot就行了,我试了好多遍只出现了一次错误
4、图像渲染工具 rqt_image_view
做图像时经常使用的一个工具,使用rqt_image_view命令,进行启动,启动后默认是空白的,配置后摄像头的图像、深度图、红外图都可以显示出来,目前我手头没有相关实物,就不做介绍了
5、综合工具rqt 在菜单栏有很多可以选择的工具,大家可以根据自己的需要配置出适合的界面组合,可以用来充当我们调试用的上位机
6、Rviz工具
输入rviz指令可以运行rviz ,打开后界面如下所示,上面橙色框内的是工具栏,左边蓝色框内的是显示列表,中间红色框内的是显示区,模型、图像等都在该区域进行显示,右边黄框内的是视角设置区,可以用来设置中间显示区的视角,下面粉紫色的框内是时间显示区,显示系统时间、ros启动时间等
rviz是一个数据显示平台,要显示的数据一定是已经存在的
7、Gazebo是强大的三维物理仿真平台
7、launch示例1
(1)首先我们在工作空间的src文件夹下,新建一个名为learning_launch的功能包,不需要添加依赖,因为launch文件是一个启动文件,基本都是链接其他库里面的功能
catkin_create_pkg learning_launch
(2)我们在该功能包下创建一个名为launch的文件夹,然后将写好的名为simple.launch的文件添叫到该文件夹下,该文件的内容如下:
<launch>
<node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />
<node pkg="learning_topic" type="person_publisher" name="listener" output="screen" />
</launch>
该程序中两个node标签分别启动两个节点,第一个节点是learning_topic功能包里面的person_subscriber节点,运行后名为talker,使用output在终端中显示日志信息,第二个节点是learning_topic功能包里面的learning_topic节点,运行后名为listener,使用output在终端中显示日志信息
(3)在打开该文件后在下方选择MXML后会进行高亮显示,方便我们查看和阅读
(4)我们回到工作空间根目录下,对其进行编译(catkin_make),让工作空间知道有个learning_launch党的功能包加进来了,
(5)接下来就可以运用roslaunch命令来启动launch文件了,后面的跟的第一个参数是功能包名,第二个参数是launch文件名,如下所示,启动learning_launch功能包下的simple.launch文件
roslaunch learning_launch simple.launch
8、launch示例2
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为turtlesim_parameter_config.launch,代码如下所示:
<launch>
<param name="/turtle_number" value="2"/>
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<param name="turtle_name1" value="Tom"/>
<param name="turtle_name2" value="Jerry"/>
<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
</node>
<node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
</launch>
(4)接下来的两行语句分别设置了值为Tom的变量turtle_name1和值为Jerry的变量turtle_name2
这里需要在learning_launch功能包下新建一个名为config的文件夹,并把我们需要的名为param.yaml的文件放在该文件夹下,该文件的内容如下图所示:
(7)接下来我们再终端输入以下命令,运行一下示例2所介绍的launch文件,运行后,使用键盘的↑↓←→就可以控制海龟运动了,
roslaunch learning_launch turtlesim_parameter_config.launch
(8)我们打开一个新的终端输入rosparam list命令就可以查看当前的参数,下图红色框内的参数就是我们通过启动文件turtlesim_parameter_config.launch加载的
(9)这里我们发现参数/turtle_number前没有前缀,而上图的红框内的其他参数都有一个前缀/turtlesim_node,这是因为在该launch文件中参数/turtle_number是在节点之外设定的(如下图的红框所示),而其他的是在节点turtlesim_node之内设定的(如下图的蓝框和所示),所以他会在变量前加一个节点名的前缀,在变量C和D前还有个/group的前缀,这是因为在param.yaml文件中C和D参数前加了个命名空间group,这样做可以有效的避免资源冲突
9、launch示例3
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为start_tf_demo_c++.launch,代码如下所示:
<launch>
<!-- Turtlesim Node-->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_listener" name="listener" />
</launch>
(2)上面运行节点的方法跟之前的示例一样,就不详细展开了,首先先启动了海龟仿真器,再启动了键盘控制节点,接下来启动了两个广播器turtle_tf_broadcaster在这里我们对同一个节点调用了两次,第一次运行后重命名为turtle1_tf_broadcaster,输入参数为/turtle1,第二次运行后重命名为turtle2_tf_broadcaster,输入参数为turtle2,接下来运行了监听器turtle_tf_listener,运行后的名字为listener
(3)在终端中输入以下命令,来启动本例中的launch文件,启动成功后,使用键盘控制海龟1移动,海龟2就会自动跟随海龟1的运动
roslaunch learning_launch start_tf_demo_c++.launch
10、launch示例4
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为turtlesim_remap.launch,代码如下所示:
<launch>
<include file="$(find learning_launch)/launch/simple.launch" />
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
</node>
</launch>
c++中的include的作用)
(4)通过以下命令来运行本例中的launch文件
roslaunch learning_launch turtlesim_remap.launch
(5)此时使用rostopic list命令,来查看当前的话题,已经由/turtle1 /cmd_vel变为了/cmd_vel
(6)此时,我们使用rostopic pub去发布一个速度指令,海龟就会进行运动(输入rostopic pub /cmd_vel后,双击tab键会自动补齐剩余部分)
十五、常用可视化工具的使用方法
1、计算图可视化工具rqt_graph: 可以显示ros里面的计算图资源,椭圆代表节点,箭头代表话题
首先我们先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,最后通过rqt_graph命令,来显示计算图,通过这个计算图我们可以很快的了解系统的全貌,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_graph
如上图所示,其中的/turtlesim是我们启动的仿真器节点,/teleop_turtle 是键盘控制节点,他们之间的话题是/turtle1/cmd_vel
2、日志输出工具 rqt_console
首先我们依旧先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,再运行rqt_console命令,rqt_console可以帮助我们查看日志信息、警告信息、错误信息等,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_console
我们用键盘控制海龟碰撞边界,就可以在rqt_console中查看到警告信息了
3、数据绘图工具 rqt_plot
首先我们依旧先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,再运行rqt_plot命令,rqt_plot可以用来绘制数据曲线,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_plot
我们在rqt_plot中输入/它会自动列出可选择的话题,使用键盘上的↑↓键可以来进行选择,按enter键确认,这里我们以海龟的位置信息为例,选择turtle1/pose,确认后,我们用键盘控制海龟移动,就可以在rqt_plot中查看到相关的波形变化了
有时候在拖拽rqt_plot窗口调整大小时会报错rqt_plot停止运行之类的,重新启动rqt_plot就行了,我试了好多遍只出现了一次错误
4、图像渲染工具 rqt_image_view
做图像时经常使用的一个工具,使用rqt_image_view命令,进行启动,启动后默认是空白的,配置后摄像头的图像、深度图、红外图都可以显示出来,目前我手头没有相关实物,就不做介绍了
5、综合工具rqt 在菜单栏有很多可以选择的工具,大家可以根据自己的需要配置出适合的界面组合,可以用来充当我们调试用的上位机
6、Rviz工具
输入rviz指令可以运行rviz ,打开后界面如下所示,上面橙色框内的是工具栏,左边蓝色框内的是显示列表,中间红色框内的是显示区,模型、图像等都在该区域进行显示,右边黄框内的是视角设置区,可以用来设置中间显示区的视角,下面粉紫色的框内是时间显示区,显示系统时间、ros启动时间等
rviz是一个数据显示平台,要显示的数据一定是已经存在的
7、Gazebo是强大的三维物理仿真平台
7、launch示例1
(1)首先我们在工作空间的src文件夹下,新建一个名为learning_launch的功能包,不需要添加依赖,因为launch文件是一个启动文件,基本都是链接其他库里面的功能
catkin_create_pkg learning_launch
(2)我们在该功能包下创建一个名为launch的文件夹,然后将写好的名为simple.launch的文件添叫到该文件夹下,该文件的内容如下:
<launch>
<node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />
<node pkg="learning_topic" type="person_publisher" name="listener" output="screen" />
</launch>
该程序中两个node标签分别启动两个节点,第一个节点是learning_topic功能包里面的person_subscriber节点,运行后名为talker,使用output在终端中显示日志信息,第二个节点是learning_topic功能包里面的learning_topic节点,运行后名为listener,使用output在终端中显示日志信息
(3)在打开该文件后在下方选择MXML后会进行高亮显示,方便我们查看和阅读
(4)我们回到工作空间根目录下,对其进行编译(catkin_make),让工作空间知道有个learning_launch党的功能包加进来了,
(5)接下来就可以运用roslaunch命令来启动launch文件了,后面的跟的第一个参数是功能包名,第二个参数是launch文件名,如下所示,启动learning_launch功能包下的simple.launch文件
roslaunch learning_launch simple.launch
8、launch示例2
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为turtlesim_parameter_config.launch,代码如下所示:
<launch>
<param name="/turtle_number" value="2"/>
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<param name="turtle_name1" value="Tom"/>
<param name="turtle_name2" value="Jerry"/>
<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
</node>
<node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
</launch>
(4)接下来的两行语句分别设置了值为Tom的变量turtle_name1和值为Jerry的变量turtle_name2
这里需要在learning_launch功能包下新建一个名为config的文件夹,并把我们需要的名为param.yaml的文件放在该文件夹下,该文件的内容如下图所示:
(7)接下来我们再终端输入以下命令,运行一下示例2所介绍的launch文件,运行后,使用键盘的↑↓←→就可以控制海龟运动了,
roslaunch learning_launch turtlesim_parameter_config.launch
(8)我们打开一个新的终端输入rosparam list命令就可以查看当前的参数,下图红色框内的参数就是我们通过启动文件turtlesim_parameter_config.launch加载的
(9)这里我们发现参数/turtle_number前没有前缀,而上图的红框内的其他参数都有一个前缀/turtlesim_node,这是因为在该launch文件中参数/turtle_number是在节点之外设定的(如下图的红框所示),而其他的是在节点turtlesim_node之内设定的(如下图的蓝框和所示),所以他会在变量前加一个节点名的前缀,在变量C和D前还有个/group的前缀,这是因为在param.yaml文件中C和D参数前加了个命名空间group,这样做可以有效的避免资源冲突
9、launch示例3
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为start_tf_demo_c++.launch,代码如下所示:
<launch>
<!-- Turtlesim Node-->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_listener" name="listener" />
</launch>
(2)上面运行节点的方法跟之前的示例一样,就不详细展开了,首先先启动了海龟仿真器,再启动了键盘控制节点,接下来启动了两个广播器turtle_tf_broadcaster在这里我们对同一个节点调用了两次,第一次运行后重命名为turtle1_tf_broadcaster,输入参数为/turtle1,第二次运行后重命名为turtle2_tf_broadcaster,输入参数为turtle2,接下来运行了监听器turtle_tf_listener,运行后的名字为listener
(3)在终端中输入以下命令,来启动本例中的launch文件,启动成功后,使用键盘控制海龟1移动,海龟2就会自动跟随海龟1的运动
roslaunch learning_launch start_tf_demo_c++.launch
10、launch示例4
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为turtlesim_remap.launch,代码如下所示:
<launch>
<include file="$(find learning_launch)/launch/simple.launch" />
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
</node>
</launch>
c++中的include的作用)
(4)通过以下命令来运行本例中的launch文件
roslaunch learning_launch turtlesim_remap.launch
(5)此时使用rostopic list命令,来查看当前的话题,已经由/turtle1 /cmd_vel变为了/cmd_vel
(6)此时,我们使用rostopic pub去发布一个速度指令,海龟就会进行运动(输入rostopic pub /cmd_vel后,双击tab键会自动补齐剩余部分)
十五、常用可视化工具的使用方法
1、计算图可视化工具rqt_graph: 可以显示ros里面的计算图资源,椭圆代表节点,箭头代表话题
首先我们先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,最后通过rqt_graph命令,来显示计算图,通过这个计算图我们可以很快的了解系统的全貌,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_graph
如上图所示,其中的/turtlesim是我们启动的仿真器节点,/teleop_turtle 是键盘控制节点,他们之间的话题是/turtle1/cmd_vel
2、日志输出工具 rqt_console
首先我们依旧先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,再运行rqt_console命令,rqt_console可以帮助我们查看日志信息、警告信息、错误信息等,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_console
我们用键盘控制海龟碰撞边界,就可以在rqt_console中查看到警告信息了
3、数据绘图工具 rqt_plot
首先我们依旧先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,再运行rqt_plot命令,rqt_plot可以用来绘制数据曲线,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_plot
我们在rqt_plot中输入/它会自动列出可选择的话题,使用键盘上的↑↓键可以来进行选择,按enter键确认,这里我们以海龟的位置信息为例,选择turtle1/pose,确认后,我们用键盘控制海龟移动,就可以在rqt_plot中查看到相关的波形变化了
有时候在拖拽rqt_plot窗口调整大小时会报错rqt_plot停止运行之类的,重新启动rqt_plot就行了,我试了好多遍只出现了一次错误
4、图像渲染工具 rqt_image_view
做图像时经常使用的一个工具,使用rqt_image_view命令,进行启动,启动后默认是空白的,配置后摄像头的图像、深度图、红外图都可以显示出来,目前我手头没有相关实物,就不做介绍了
5、综合工具rqt 在菜单栏有很多可以选择的工具,大家可以根据自己的需要配置出适合的界面组合,可以用来充当我们调试用的上位机
6、Rviz工具
输入rviz指令可以运行rviz ,打开后界面如下所示,上面橙色框内的是工具栏,左边蓝色框内的是显示列表,中间红色框内的是显示区,模型、图像等都在该区域进行显示,右边黄框内的是视角设置区,可以用来设置中间显示区的视角,下面粉紫色的框内是时间显示区,显示系统时间、ros启动时间等
rviz是一个数据显示平台,要显示的数据一定是已经存在的
7、Gazebo是强大的三维物理仿真平台
7、launch示例1
(1)首先我们在工作空间的src文件夹下,新建一个名为learning_launch的功能包,不需要添加依赖,因为launch文件是一个启动文件,基本都是链接其他库里面的功能
catkin_create_pkg learning_launch
(2)我们在该功能包下创建一个名为launch的文件夹,然后将写好的名为simple.launch的文件添叫到该文件夹下,该文件的内容如下:
<launch>
<node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />
<node pkg="learning_topic" type="person_publisher" name="listener" output="screen" />
</launch>
该程序中两个node标签分别启动两个节点,第一个节点是learning_topic功能包里面的person_subscriber节点,运行后名为talker,使用output在终端中显示日志信息,第二个节点是learning_topic功能包里面的learning_topic节点,运行后名为listener,使用output在终端中显示日志信息
(3)在打开该文件后在下方选择MXML后会进行高亮显示,方便我们查看和阅读
(4)我们回到工作空间根目录下,对其进行编译(catkin_make),让工作空间知道有个learning_launch党的功能包加进来了,
(5)接下来就可以运用roslaunch命令来启动launch文件了,后面的跟的第一个参数是功能包名,第二个参数是launch文件名,如下所示,启动learning_launch功能包下的simple.launch文件
roslaunch learning_launch simple.launch
8、launch示例2
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为turtlesim_parameter_config.launch,代码如下所示:
<launch>
<param name="/turtle_number" value="2"/>
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<param name="turtle_name1" value="Tom"/>
<param name="turtle_name2" value="Jerry"/>
<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
</node>
<node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
</launch>
(4)接下来的两行语句分别设置了值为Tom的变量turtle_name1和值为Jerry的变量turtle_name2
这里需要在learning_launch功能包下新建一个名为config的文件夹,并把我们需要的名为param.yaml的文件放在该文件夹下,该文件的内容如下图所示:
(7)接下来我们再终端输入以下命令,运行一下示例2所介绍的launch文件,运行后,使用键盘的↑↓←→就可以控制海龟运动了,
roslaunch learning_launch turtlesim_parameter_config.launch
(8)我们打开一个新的终端输入rosparam list命令就可以查看当前的参数,下图红色框内的参数就是我们通过启动文件turtlesim_parameter_config.launch加载的
(9)这里我们发现参数/turtle_number前没有前缀,而上图的红框内的其他参数都有一个前缀/turtlesim_node,这是因为在该launch文件中参数/turtle_number是在节点之外设定的(如下图的红框所示),而其他的是在节点turtlesim_node之内设定的(如下图的蓝框和所示),所以他会在变量前加一个节点名的前缀,在变量C和D前还有个/group的前缀,这是因为在param.yaml文件中C和D参数前加了个命名空间group,这样做可以有效的避免资源冲突
9、launch示例3
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为start_tf_demo_c++.launch,代码如下所示:
<launch>
<!-- Turtlesim Node-->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_listener" name="listener" />
</launch>
(2)上面运行节点的方法跟之前的示例一样,就不详细展开了,首先先启动了海龟仿真器,再启动了键盘控制节点,接下来启动了两个广播器turtle_tf_broadcaster在这里我们对同一个节点调用了两次,第一次运行后重命名为turtle1_tf_broadcaster,输入参数为/turtle1,第二次运行后重命名为turtle2_tf_broadcaster,输入参数为turtle2,接下来运行了监听器turtle_tf_listener,运行后的名字为listener
(3)在终端中输入以下命令,来启动本例中的launch文件,启动成功后,使用键盘控制海龟1移动,海龟2就会自动跟随海龟1的运动
roslaunch learning_launch start_tf_demo_c++.launch
10、launch示例4
(1)依旧是将我们写好的代码文件放到learning_launch功能包的launch文件夹下,取名为turtlesim_remap.launch,代码如下所示:
<launch>
<include file="$(find learning_launch)/launch/simple.launch" />
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
</node>
</launch>
c++中的include的作用)
(4)通过以下命令来运行本例中的launch文件
roslaunch learning_launch turtlesim_remap.launch
(5)此时使用rostopic list命令,来查看当前的话题,已经由/turtle1 /cmd_vel变为了/cmd_vel
(6)此时,我们使用rostopic pub去发布一个速度指令,海龟就会进行运动(输入rostopic pub /cmd_vel后,双击tab键会自动补齐剩余部分)
十五、常用可视化工具的使用方法
1、计算图可视化工具rqt_graph: 可以显示ros里面的计算图资源,椭圆代表节点,箭头代表话题
首先我们先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,最后通过rqt_graph命令,来显示计算图,通过这个计算图我们可以很快的了解系统的全貌,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_graph
如上图所示,其中的/turtlesim是我们启动的仿真器节点,/teleop_turtle 是键盘控制节点,他们之间的话题是/turtle1/cmd_vel
2、日志输出工具 rqt_console
首先我们依旧先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,再运行rqt_console命令,rqt_console可以帮助我们查看日志信息、警告信息、错误信息等,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_console
我们用键盘控制海龟碰撞边界,就可以在rqt_console中查看到警告信息了
3、数据绘图工具 rqt_plot
首先我们依旧先运行节点管理器,再运行海龟仿真器,再运行键盘控制节点,再运行rqt_plot命令,rqt_plot可以用来绘制数据曲线,依次输入的命令如下所示:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_teleop_key
rqt_plot
我们在rqt_plot中输入/它会自动列出可选择的话题,使用键盘上的↑↓键可以来进行选择,按enter键确认,这里我们以海龟的位置信息为例,选择turtle1/pose,确认后,我们用键盘控制海龟移动,就可以在rqt_plot中查看到相关的波形变化了
有时候在拖拽rqt_plot窗口调整大小时会报错rqt_plot停止运行之类的,重新启动rqt_plot就行了,我试了好多遍只出现了一次错误
4、图像渲染工具 rqt_image_view
做图像时经常使用的一个工具,使用rqt_image_view命令,进行启动,启动后默认是空白的,配置后摄像头的图像、深度图、红外图都可以显示出来,目前我手头没有相关实物,就不做介绍了
5、综合工具rqt 在菜单栏有很多可以选择的工具,大家可以根据自己的需要配置出适合的界面组合,可以用来充当我们调试用的上位机
6、Rviz工具
输入rviz指令可以运行rviz ,打开后界面如下所示,上面橙色框内的是工具栏,左边蓝色框内的是显示列表,中间红色框内的是显示区,模型、图像等都在该区域进行显示,右边黄框内的是视角设置区,可以用来设置中间显示区的视角,下面粉紫色的框内是时间显示区,显示系统时间、ros启动时间等
rviz是一个数据显示平台,要显示的数据一定是已经存在的
7、Gazebo是强大的三维物理仿真平台