• ROS的调试经验


    系列文章目录

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
    TODO:写完再整理


    前言

    认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!

    本文先对ROS的调试经验做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章


    提示:以下是本篇文章正文内容

    1.【挂依赖及功能包】

    (1)查看问题方法

    终端报错
    
    • 1

    (2)解决问题方法

    (1)没有安装对应的开源功能包

    (1)二进制安装:$sudo apt-get install ros-melodic-XXX【防盗标记–盒子君hzj】
    (2)github下载源码安装
    
    • 1
    • 2

    (2)查看依赖的版本有没有问题

    如eigen、pcl的版本问题
    
    • 1

    (3)修改源码,看看有没有用到这个库和依赖

    .
    .

    2.【挂系统模块及组件,如rviz、gazebo】

    (1)查看问题方法

    终端报错
    
    • 1

    (2)解决问题方法

    (1)替换其他模块的实现,排除其他模块导致系统崩溃的原因,有可能是其他模块导致该模块崩溃的

    (2)替换本模块的实现,排除本模块导致系统崩溃的原因【防盗标记–盒子君hzj】

    (3)排除工作空间目录的问题

    最好使用单个工作空间,多个(不同名)工作空间有可能会出现功能包找不到的问题
    
    • 1

    (4)排除launch文件启动顺序问题

    launch文件内容的启动程序顺序是不一定的,节点是多线程启动的,没有先后顺序,如果有启动顺序要求的
    
    • 1

    【挂rviz可视化问题】

    ROS的rviz可视化marker的数据类型可能发生显示错误
    RVIZ无端端报错挂掉,仅仅启动rviz也不行,重启电脑解决一下
    
    • 1
    • 2

    【挂gazebo仿真问题】

    频繁开启关闭gazrbo仿真环境会报错误,因为gazebo在没有完全退出的时候就再次开启(垃圾电脑更是这样)
    
    解决办法
    $killall gzserver
    $killall gaclient
    
    • 1
    • 2
    • 3
    • 4
    • 5

    谷歌寻找方法
    .
    .

    3.【挂机器人模型】

    (1)查看问题方法

    终端报错
    
    • 1

    (2)解决问题方法

    替换一个机器人模型
    
    • 1

    .
    .

    4.【挂坐标转换】

    (1)查看问题方法

    (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
    • 3
    • 4
    • 5
    • 6

    (2)解决问题方法

    (1)源码修改

    (2)若是坐标动态链接出错,改源码,改launch静态坐标链接,手动静态链接坐标关系

    5.【挂节点–文件相关】

    (1)查看问题方法

    (1)rgt_graph

    查看节点之间的联系,看整个程序运行的逻辑,排查话题的错误、排查节点有没有启动【总的排查】
    【rosrun rgt_graph rgt_graph】
    
    用rqt_graph查看节点运行是否正常的时候,active是正常运行的节点,选择all,【防盗标记–盒子君hzj】
    若是存在某个节点,但是节点挂了,节点名前会有“n_”开头的
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (2)rosnode info /节点名

    查看相应话题详细参数
    
    • 1

    (3)rosnode list
    在这里插入图片描述

    .
    .

    (2)解决问题方法

    (1)看看launch有没有启动

    (2)看看cmakelist、package.xml有没有写错

    (3)看看是不是vscode修改了忘了保存,或者是没有catkin_make

    (4)看看是不是tf挂了,tf如果挂了,很多节点是有问题的【防盗标记–盒子君hzj】

    (5)看看程序调用或者运行逻辑有问题

    提醒
    在编程的时候初始化一个节点的时候写一个ROS_INFO(XXX_start)

    .
    .

    6.【挂话题】

    (1)查看问题方法

    使用rostopic help来获得更多帮助

    (1)rostopic list +rostopic echo /话题名

    查看话题发布的具体数据【话题排查】
    
    • 1

    (2) rostopic pub

    【用于调试】向某个话题中发布数据
    
    • 1

    .

    (2)解决问题方法

    (1)查看源代码发布订阅话题名是否一致【可能会报错,可能不会,但是是影响结果】【防盗标记–盒子君hzj】
    
    (2)节点挂掉的逻辑原因(csv格式不对导致参数不合法、变量没加载找不到、gazebo仿真问题、偶然报错)
    
    • 1
    • 2
    • 3

    .
    .
    .

    7.【挂话题消息类型】

    (1)查看问题方法

    (1)rosmsg show xxx($rosmsg show …/…/…)

    查看话题的消息类型,及详细情况
    查看ros的数据类型(自己定义的msgs和官方定义的msgs)最好使用指令去查【防盗标记–盒子君hzj】
    
    • 1
    • 2

    (2)解决问题方法

    源代码看看发布订阅
    ROS注意消息类型的重构,消息类型的对比注意类型时候一致,多重嵌套的数据类型对比注意时间戳是否一致
    
    $rosmsg show .../.../...
    
    • 1
    • 2
    • 3
    • 4

    8.【挂源码实现逻辑】

    (1)查看问题方法

    自己看源码语法及原理
    编译没有问题,不代表逻辑效果没问题【编译通过后要测试】
    
    • 1
    • 2

    【防盗标记–盒子君hzj】

    (2)解决问题方法

    (1)回溯法:回顾一下自己改了什么东西导致报错的,从最近的地方开始找错误【 版本管理】(学一学版本管理的方法,本地,gitlab?)

    (2)边写代码边调试:写了一个小的功能模块就编译/运行一次,一一步一步来,只编程不调试后面都要推翻自己的工作debug了【防盗标记–盒子君hzj】

    (3)打印log值根据逻辑寻找问题:在终端把调试的变量值打印出来,在考虑程序有没有进入自己想要他进去的地方时,在该地方放入一个info信息输出打印

    .
    .

    9.【debug–动态调参】

    (1)查看问题方法

    (1)Rosrun rqt_configure rqt_configure【防盗标记–盒子君hzj】

    动态设置参数进行调参
    
    • 1

    (2)rosrun rqt_steering rqt_steering

    动态设置车底盘的vel_cmd指令参数进行调参
    
    • 1

    .
    .

    10.【检查节点运行情况】

    通过rqt_graph查看节点之间的联系
    通过topic echo /topic查看相应话题发布的内容
    通过topic info /topic查看相应话题详细参数
    使用 rostopic pub 向某个话题中发布数据【防盗标记–盒子君hzj】
    使用rostopic help来获得更多帮助
    使用rostopic type /topic查看相应话题的消息类型
    使用rosmsg查看消息的详细数据
    使用rosmsg show 查看指定消息详细情况

    总结

    一个错误的本身可能并不是它自己,上下求索,多查谷歌,报错不要自己空想

  • 相关阅读:
    19.数据结构和算法的交叉口,下一章进入算法介绍
    【Rust日报】2022-05-28 Neon:AWS Aurora Postgres 的无服务器开源替代方案。
    高通DSP架构和HVX指令介绍
    A. The Enchanted Forest(思维)
    【Jmeter】性能测试脚本开发——性能测试环境准备、Jmeter脚本编写和执行
    6、Java——三种方式循环出水仙花数
    钱就是道,因为钱具备道的灵魂!
    Qt中Json的操作
    MATLAB 模糊设计器 构建 模糊系统
    读书笔记:《Kubernetes:快速入门》
  • 原文地址:https://blog.csdn.net/qq_35635374/article/details/125958622