ros多个小乌龟_ROS中常用组件

这篇博客介绍了ROS中的关键组件,包括launch启动文件的使用,如node标签、arg param rosparam、重映射和嵌套复用。接着讲解了TF功能包,特别是tf_monitor、tf_echo和静态转换发布器。还提到了Qt工具套件,如日志输出、计算图可视化、数据绘图和参数动态配置工具。此外,还讨论了Rviz三维可视化、Gazebo仿真环境的特点以及rosbag数据记录和回放的便利性。
摘要由CSDN通过智能技术生成

写在前面:前面两篇写作风格不太统一,有的是摘抄原书,有的加入自己理解。这里说明下,本学习笔记主要是读书笔记,因为我看过好几遍了,且用了挺久的ROS,所以如果没有读者一定基础,可能会无法明白笔记中的一些限定和共识内容。如果有疑问,欢迎评论留言交流。大家有觉得需要特别强调或者自己对某一部分有更好的理解方式,也欢迎评论补充。

接下来我打算:我比较熟悉的部分,可能只写一些关键知识点;不熟悉(平常用的少的)可能会更贴近书上内容,全面一些。

0 launch启动文件

这个太重要了,也不太难。说几个重要的地方吧

如果下面标签不够,参考 http://wiki.ros.org/roslaunch/ML 进一步学习

0.1 node标签

使用示例如下,这段命令相当于终端运行 rosrun pkg type

<node name="node-name" pkg="package-name" type="executable-name" />

有个参数说明下,应该还比较常用,args是node的输入参数,我在想如果多个参数怎么输入?其他的参见课本吧

0.2 arg param rosparam使用参见如下链接

https://zhuanlan.zhihu.com/p/127354732​zhuanlan.zhihu.com

0.3 重映射

我们使用别人的功能包时,其接口不一定跟我们的一样,这时候就要用<remap>标签,而不需要修改功能包的原接口,比如:

<remap from="/turtlebot/cmd_vel" to="/cmd_vel" />

这样j就可以把 /turtlebot/cmd_vel 重映射为 /cmd_vel了

0.4 嵌套复用

这里主要是为了将各个模块写到一个launch文件中,也就是说在launch文件了启动launch文件。有一点要注意,launch文件启动顺序不可控,虽然看着好像是按照代码顺序启动,但是启动时间和时间间隔都不可控。如果想按时间间隔控制启动,那么可以编写.sh文件来控制启动顺序和时间间隔。

launch嵌套示例

<include file="$(dirname)/other.launch" />

.sh文件示例

#!/bin/bash


# Start the simulation environment
roslaunch shape_comp simulation_env.launch &
sleep 3
rosrun shape_comp shape_pose_init.py &
sleep 5

# Object Point cloud extraction
rosrun my_pcl point_extract &
sleep 1

......



exit 0

说明:第一行格式说明必须要有;各行代码末尾&符号要有

1 TF功能包

简单说下它的优点,TF可以在分布式系统中进行操作,也就是说一个机器人系统中所有坐标变换关系,对于所有节点组件都是可用的。下面介绍两个部分:一是常用tf工具,二是介绍将一个TF变换发布出去和如何接听一个TF变换并作出相应操作

1.1 常用工具

tf_monitor 打印TF树中所有坐标系的发布状态,或者查看指定坐标系间的发布状态

tf_monitor
tf_monitor <source_frame> <target_frame>

tf_echo 查看指定坐标系之间的变换关系

tf_echo <source_frame> <target_frame>

static_transform_publisher 发布两个坐标系之间的静态坐标变换

static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms

上面设置的偏移参数和旋转参数啥意思?后面参数的发布频率以ms为单位

上面命令还可以在launch文件使用,示例如下:

<launch>
   <node pkg="tf" type="static_transform_publisher" name="link_broadcaster"
    args="1 0 0 0 0 0 1 link1_parent link1 100" />
</launch>

view_frames 可视化的调试工具,可以生成 PDF,显示整棵TF树的信息

rosrun tf view_frames
evince frames.pdf

1.2 监听和发布 TF

本例程使用的是一个小乌龟B跟踪另一个小乌龟A,这里大体说一下广播器和监听器,具体的看原书代码。

创建TF广播器:通过订阅器订阅小乌龟A的pose信息,在回调函数里创建TF广播器,广播当前的位姿。这里广播使用消息类型是tf::StampedTransform,不仅包含位姿、时间戳,还指定了源坐标系和目标坐标系。

创建TF监听器:这里创建了 tf::TransformListener 类型的监听器,它会自动接收TF树的消息,并且缓存10秒。接收TF后就可以用监听器的接口查询相应的坐标变换。这里面还按照乌龟速度话题格式定义发布器,发布乌龟B运动速度信息。

总结下:这个其实挺有用的,以后若用到,可以多读两遍源代码,然后编写自己的发布器和监听器。

2 Qt工具

ROS提供的Qt架构的后台图形工具套件 rqt_common_plugins,使用如下命令安装

sudo apt-get install ros-kinetic-rqt
sudo apt-get install ros-kinetic-rqt-common-plugins

2.1 日志输出工具

图形化显示ROS系统运行状态中的所有日志消息,包括 info 、warn 、error

rqt_console

2.2 计算图可视化工具

图形化显示当前系统中的计算图

rqt_graph

2.3 数据绘图工具

二维数值曲线绘制工具,可以选择话题等在图中进行描绘

rqt_plot

2.4 参数动态配置工具

可在不重启系统下,动态配置ROS系统中的参数,需要在代码中设置参数的相关属性

rosrun rqt_reconfigure rqt_reconfigure

3 Rviz三维可视化

rviz不仅可以显示默认数据类型,也可以通过编写插件添加显示其他形式数据类型。

rviz默认支持显示的数据类型如下:

6ac5c3b52b62da66e3cf4a43b9a15a11.png

4 Gazebo仿真环境

除了比较常见的特点,说两点个人感觉特别的

  • TCP/IP传输:gazebo的后台仿真处理和前台图形显示可以通过网络通信实现远程方针,这样就可以在Amazon等云端运行
  • 终端工具:使用gazebo提供的命令行工具在终端实现仿真控制

另外两种创建仿真环境的方法:

  1. 直接插入:这需要下载模型放到 ~/.gazebo/models,下载地址: https://bitbucket.org/osrf/gazebo_models/downloads/
  2. Building Editor:这个使用自带的编辑模型创建仿真环境,初步感觉这个可能类似Ansys的建模功能有点鸡肋。不过这个可能适合画地图做SLAM。如果是其他物理模型,还是Solidworks建的好。

5. rosbag数据记录和回放

先介绍一下,这个功能包rosbag就是为何调试测试方便而设立的。它的工作流程就是收集系统运行时的消息数据,然后离线状态回放。

这个比较有用,至于为何感觉有用,我也是结合以前做的一点工作想起来的。结合以前工作举个使用场景。比如我们启动搭建的仿真环境,然后采集一系列的数据,然后耗费很长时间处理数据,并把结果发布为一个话题,就叫 /topic 吧,然后后面又有一系列的操作要用这个话题,可我们一运行发现后面用这个话题的代码有问题,这就要停止。然后修改好代码后,我们是不是又要重复前面一系列复杂的工作,然后再去调试这段代码呢?

当然不是,rosbag可以省时省力。在第一次运行时,你把 /topic 记录,然后后面修改代码后,直接回放,再去调试使用这个话题的后面代码即可。

当然这只是限于调试,一个完整成熟的系统一般还是要处理实时信息。

记录数据代码

mkdir ~/bagfiles
cd ~/bagfiles       # 创建存放数据的文件夹
rosbag record -a   # 记录所有发布消息,其他选项可以查看help

回访数据代码:

rosbag info <your bagfile>   # 查看包的信息,包括存储的话题名称
rosbag play <your bagfile>   # 回放数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值