ROS导航小车无故倒退问题分析

本文探讨了使用ROS和激光雷达进行室内导航时,小车在RVIZ中指定目标后出现倒退行为的原因及解决方案。主要原因是由于计算出的小车x方向速度过大,导致base_local_planner误判为即将发生碰撞,进而触发逃逸速度机制。文章提供了一种通过调整时间间隔计算速度的方法来解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前用ROS+激光雷达做小车室内导航时,遇到个问题,就是在RVIZ中给定目的地后小车总是会倒退行走,这个行走速度就是base_local_planner_params.yaml里配置的escape_vel逃逸速度,调整了其他参数无用,看看源代码
在trajectory_planner.cpp中

 //and finally, if we can't do anything else, we want to generate trajectories that move backwards slowly
    vtheta_samp = 0.0;
    vx_samp = backup_vel_;
    vy_samp = 0.0;

这段代码之前是计算合适的局部速度策略,而如果没有合适的策略(速度),这段代码会启用。也就是说出现这种状况是因为现在计算不出一个合法的速度供小车安全的行驶。
为什么会出现这种情况呢,原因很多,我这里只讲一种比较常见但容易被忽视的。就是你提供的odom信息中的x速度过大(这里只针对差分运动的小车),也就是每次计算的小车x方向速度过大,这样base_local_planner会认为车体会碰撞所以就只发布后退命令。
为什么x方向速度会很大,因为很多人计算x方向速度时是用两个ros::Time current_time = ros::Time::now(); 这样的时间差作为被除数,这段时间增加的里程作为除数来计算的。在程序运行时有可能这个时间间隔很小,导致速度一下非常大,所以比较好的作法是被除数用一个固定的时间差,下位机发布里程增量的频率要和这个时间差一致。这样就会消除速度突然很大的问题了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值