Plotjuggler简介
PlotJuggler是一个类似于rqt_plot的基于Qt的数据可视化工具。但PlotJuggler拥有更强大和好用的功能。你可以导入文本文件让它显示文本文件中的数据。你也可以导入ros的bag包,它能自动解析bag包中的数据。并可以回放bag包的数据,然后用Rviz来显示数据。PlotJuggler的功能有很多,这里只介绍几种我常用的功能。应该足以应付日常的机器人开发调试工作。
Plotjuggler官方网址:
github地址:
下面的操作是基于ROS2 galactic
安装git,编译工具和下载源代码
1 | sudo apt-get install git python3-vcstool build-essential python3-colcon-common-extensions |
注意:链接中的https://ghproxy.com/ 为使用代理下载github代码。
文本中用于说明的完整示例代码请在下面的仓库中查阅。
https://gitee.com/shoufei/ros2_galactic_turorials.git
https://github.com/shoufei403/ros2_galactic_tutorials.git
节点的参数通常维护到yaml文件中。节点启动时通常可以加载参数文件,然后读取参数的内容。而且在ROS中参数是可以动态配置的。
更多细节参考官方文档:
https://docs.ros.org/en/galactic/Tutorials/Parameters/Understanding-ROS2-Parameters.html
以命令行方式加载参数文件
1 | ros2 run <package_name> <executable_name> --ros-args --params-file <file_name> |
示例:
1 | ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtlesim.yaml |
本文介绍ROS2中话题和服务的内容。并配合示例代码来实践以便加深理解。
安装相应的工具:
colcon 编译工具安装
1 | sudo apt install python3-colcon-common-extensions git |
设置colcon_cd,方便用colcon_cd 包名 快速打开到包的目录。需要在工作空间目录下使用,其他路径下使用会出现卡住的情况。
1 | echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc |
设置colcon参数自动补全功能
1 | echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc |
ROS2参数自动补全工具(zsh不支持ROS2参数自动补全,bash可以)
1 | sudo apt-get install python3-argcomplete |

costmap翻译过来是代价地图的意思。由SLAM算法生成栅格地图。我们为栅格地图中的每一个栅格分配一个代价值,这样就形成了costmap。路径规划算法则可以在具有代价的栅格地图上生成路径。规划路径的生成则是强依赖于代价值。为了生成合适的路径,我们需要为每个栅格分配合适的代价值。最开始想到的是在单层的costmap中更新每个栅格的代价,然后直接给路径规划算法。但这样会引起诸多问题。比如因为所有的数据都在同一个costmap中更新,任何一个数据的变动都需要拿到之前其他的数据重新一起计算代价值。比如数据更新的地图范围也不好确定。比如当数据类型多了之后,数据整合的顺序不好控制。
后来想到将单层的costmap分成多层是个好办法。如上图所示,一层costmap只用同一种数据来更新。比如最底层的static map就是SLAM算法生成的静态地图。使用静态地图数据生成一层costmap。Obstacles 层则是由传感器数据更新的costmap层。甚至可以根据某些特殊目的自定义一个costmap层,使生成的路径规避某些区域。这在单层的costmap算法中是很难实现的。最后将所有的costmap层按特定的顺序组合起来形成了layered_costmap。可以看到这是一种更为灵活,扩展性也更强的方法。
对于Docker,我只想说早用早享受~
1 | # step 1: 安装必要的一些系统工具 |
匹配机器人和笔记本电脑的网络
让笔记本电脑和机器人内部的机载电脑连上相同的局域网络。
下面分别配置电脑和机载电脑的/etc/hosts 文件
使用hostname 分别查看笔记本电脑和机载电脑板的系统主机名。
使用ifconfig 分别查看笔记本电脑和机载电脑的IP地址。
使用sudo vim /etc/hosts打开电脑的/etc/hosts文件,添加机载电脑的主机名和IP地址。
完成的效果如下:
1 | 127.0.0.1 localhost |
my_robot 为机载电脑的主机名(由hostname命令获取)
同样的,在机载电脑上也修改/etc/hosts 文件,添加笔记本电脑的主机名和IP地址。效果如下:
1 | 127.0.0.1 localhost |
my_laptop 为笔记本电脑的主机名(由hostname命令获取)
安装vcs
1 | sudo apt-get install python3-vcstool |
下载代码
1 | #在ros2_ws目录下运行,代码会存在src目录下(以ros2仓库作为示例) |
更新已经下载的代码
1 | #在ros2_ws目录下运行 |
导出当前src目录下的git仓库信息
1 | vcs export src >> tmp.repos |
OpenCV的release页面
选择相应的版本,下载源码

找到与opencv版本一致的tag
https://github.com/opencv/opencv_contrib/tags

1 | mkdir ~/opencv_build && cd ~/opencv_build |
把下载好的opencv和opencv_contrib放到opencv_build目录下。
添加代理到编译过程中的下载链接