提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理
本文先对ROS的调试经验做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章
提示:以下是本篇文章正文内容
终端报错
(1)没有安装对应的开源功能包
(1)二进制安装:$sudo apt-get install ros-melodic-XXX【防盗标记–盒子君hzj】
(2)github下载源码安装
(2)查看依赖的版本有没有问题
如eigen、pcl的版本问题
(3)修改源码,看看有没有用到这个库和依赖
.
.
终端报错
(1)替换其他模块的实现,排除其他模块导致系统崩溃的原因,有可能是其他模块导致该模块崩溃的
(2)替换本模块的实现,排除本模块导致系统崩溃的原因【防盗标记–盒子君hzj】
(3)排除工作空间目录的问题
最好使用单个工作空间,多个(不同名)工作空间有可能会出现功能包找不到的问题
(4)排除launch文件启动顺序问题
launch文件内容的启动程序顺序是不一定的,节点是多线程启动的,没有先后顺序,如果有启动顺序要求的
【挂rviz可视化问题】
ROS的rviz可视化marker的数据类型可能发生显示错误
RVIZ无端端报错挂掉,仅仅启动rviz也不行,重启电脑解决一下
【挂gazebo仿真问题】
频繁开启关闭gazrbo仿真环境会报错误,因为gazebo在没有完全退出的时候就再次开启(垃圾电脑更是这样)
解决办法
$killall gzserver
$killall gaclient
谷歌寻找方法
.
.
终端报错
替换一个机器人模型
.
.
(1)tf_tree
查看模块之间的坐标关系是否正确,坐标之间有没有断开【总的排查】【防盗标记–盒子君hzj】
【rosrun rqt_tf_tree rqt_tf_tree】
tf坐标连接关系可以通过rosrun rqt_tf_tree rqt_tf_tree查看,若是节点断开了就代表tf连接有问题,
去源码看看有没有问题,实在不行就在launch文件中用静态链接指令手动连接在一起(只是一个隐藏的bug)
.静态链接指令[x,y,z,r,p,y/x,y,z,四元数 : 父节点坐标、子节点坐标]
(1)源码修改
(2)若是坐标动态链接出错,改源码,改launch静态坐标链接,手动静态链接坐标关系
(1)rgt_graph
查看节点之间的联系,看整个程序运行的逻辑,排查话题的错误、排查节点有没有启动【总的排查】
【rosrun rgt_graph rgt_graph】
用rqt_graph查看节点运行是否正常的时候,active是正常运行的节点,选择all,【防盗标记–盒子君hzj】
若是存在某个节点,但是节点挂了,节点名前会有“n_”开头的
(2)rosnode info /节点名
查看相应话题详细参数
(3)rosnode list
.
.
(1)看看launch有没有启动
(2)看看cmakelist、package.xml有没有写错
(3)看看是不是vscode修改了忘了保存,或者是没有catkin_make
(4)看看是不是tf挂了,tf如果挂了,很多节点是有问题的【防盗标记–盒子君hzj】
(5)看看程序调用或者运行逻辑有问题
提醒
在编程的时候初始化一个节点的时候写一个ROS_INFO(XXX_start)
.
.
使用rostopic help来获得更多帮助
(1)rostopic list +rostopic echo /话题名
查看话题发布的具体数据【话题排查】
(2) rostopic pub
【用于调试】向某个话题中发布数据
.
(1)查看源代码发布订阅话题名是否一致【可能会报错,可能不会,但是是影响结果】【防盗标记–盒子君hzj】
(2)节点挂掉的逻辑原因(csv格式不对导致参数不合法、变量没加载找不到、gazebo仿真问题、偶然报错)
.
.
.
(1)rosmsg show xxx($rosmsg show …/…/…)
查看话题的消息类型,及详细情况
查看ros的数据类型(自己定义的msgs和官方定义的msgs)最好使用指令去查【防盗标记–盒子君hzj】
源代码看看发布订阅
ROS注意消息类型的重构,消息类型的对比注意类型时候一致,多重嵌套的数据类型对比注意时间戳是否一致
$rosmsg show .../.../...
自己看源码语法及原理
编译没有问题,不代表逻辑效果没问题【编译通过后要测试】
【防盗标记–盒子君hzj】
(1)回溯法:回顾一下自己改了什么东西导致报错的,从最近的地方开始找错误【 版本管理】(学一学版本管理的方法,本地,gitlab?)
(2)边写代码边调试:写了一个小的功能模块就编译/运行一次,一一步一步来,只编程不调试后面都要推翻自己的工作debug了【防盗标记–盒子君hzj】
(3)打印log值根据逻辑寻找问题:在终端把调试的变量值打印出来,在考虑程序有没有进入自己想要他进去的地方时,在该地方放入一个info信息输出打印
.
.
(1)Rosrun rqt_configure rqt_configure【防盗标记–盒子君hzj】
动态设置参数进行调参
(2)rosrun rqt_steering rqt_steering
动态设置车底盘的vel_cmd指令参数进行调参
.
.
通过rqt_graph查看节点之间的联系
通过topic echo /topic查看相应话题发布的内容
通过topic info /topic查看相应话题详细参数
使用 rostopic pub 向某个话题中发布数据【防盗标记–盒子君hzj】
使用rostopic help来获得更多帮助
使用rostopic type /topic查看相应话题的消息类型
使用rosmsg查看消息的详细数据
使用rosmsg show 查看指定消息详细情况
一个错误的本身可能并不是它自己,上下求索,多查谷歌,报错不要自己空想