Dynamic Window Approach(DWA)是重要的局部轨迹规划算法,ROS中使用了DWA算法获得了很好的局部路径规划的效果。具体的教程可参考官方的导航调试资料Navigation Tuning Guide。ROS的DWA(dwa_local_planner)应用到新机器人调试时,有一些技巧需要注意的,这里做一些总结。

1.设置坐标系和话题

需要订阅的话题:

里程计话题:/odom

需要设置的坐标系:包含/map,/odom,/base_footprint

2.参数调试

a.加速度的限制

加速度限制(acc_lim_x,acc_lim_y,acc_lim_th)非常的重要,如果不知道机器人的加速度,可以尽量的往大的设置,因为如果设置太小了,往往会出现机器人往前跑断断续续的,转弯转过头(看似加速度太大了,实际是加速度太小,以至于机器人想把机器人掰回来而掰不及),从而导致反复的震荡(oscillating over and over),例如下面的错误提示:

Aborting because the robot appears to be oscillating over and over. Even after executing all recovery behaviors

~<name>/acc_lim_x (double, default: 2.5)

  • The x acceleration limit of the robot in meters/sec^2
  • 开始调试尽量往大的设置

~<name>/acc_lim_y (double, default: 2.5)

  • The y acceleration limit of the robot in meters/sec^2
  • 如果是差分轮,设置为0即可

~<name>/acc_lim_th (double, default: 3.2)

  • The rotational acceleration limit of the robot in radians/sec^2
  • 开始调试尽量往大的设置

b.仿真的时间

局部路径模拟的时间不用太长也不用太短,一般一秒左右就差不多了,如果太多会容易导致偏离全局的路径,特别启动的时候会转较大的半径,如果想启动的时候基本原地旋转摆正机器人的方向和全局路径的方向一致,那么就把模拟的时间设置短点。如果太小的仿真时间也不好,容易导致频繁的路径规划消耗资源,甚至也会出现震荡的可能。

~<name>/sim_time (double, default: 1.7)

  • The amount of time to forward-simulate trajectories in seconds

c.轨迹的规划

主要是一些设置生成轨迹的参数。其中以下的两个参数比较重要。

~<name>/path_distance_bias (double, default: 32.0)

  • The weighting for how much the controller should stay close to the path it was given
  • 刻画局部路径和全局路径的贴合程度,该权重参数越大说明越贴合,越小说明不用那么贴合。

~<name>/goal_distance_bias (double, default: 24.0)

  • The weighting for how much the controller should attempt to reach its local goal, also controls speed
  • 达到局部目标点的权重参数,也用来控制速度。权重如果设置为0表示要求完全到达目标点,这会导致机器人走动缓慢和震荡的现象,因为要求达到目标点的精度太高,所对机器人的控制比较苛刻

3.参考资料

[1]. 机器人局部避障的动态窗口法(dynamic window approach)(*****)

[2]. Autonomous Robot Navigation

[3]. Circular Motion in 2D for graphics and robotics

[4]. A Tutorial and Elementary Trajectory Modelfor the Differential Steering System of robot wheel actuators

[5]. Navigation Tuning Guide

ROS知识(14)----局部避障的动态窗口算法(DWA)及其调试的方法的更多相关文章

  1. 机器人局部避障的动态窗口法(dynamic window approach) (转)

    源:机器人局部避障的动态窗口法(dynamic window approach) 首先在V_m∩V_d的范围内采样速度: allowable_v = generateWindow(robotV, ro ...

  2. ros move_base costmap 理解和实现动态窗口法避障

    以下大部分内容参考自 ros_by_example_hydro_volume_1.pdf local costmap 是怎么生成的?跟三维点云有什么关系? global costmap在没有全局地图下 ...

  3. Bug避障算法简介

    移动机器人智能的一个重要标志就是自主导航,而实现机器人自主导航有个基本要求--避障.避障是指移动机器人根据采集的障碍物的状态信息,在行走过程中通过传感器感知到妨碍其通行的静态和动态物体时,按照一定的方 ...

  4. SLAM+语音机器人DIY系列:(六)SLAM建图与自主避障导航——2.google-cartographer机器人SLAM建图

    摘要 通过前面的基础学习,本章进入最为激动的机器人自主导航的学习.在前面的学习铺垫后,终于迎来了最大乐趣的时刻,就是赋予我们的miiboo机器人能自由行走的生命.本章将围绕机器人SLAM建图.导航避障 ...

  5. [TPYBoard - Micropython 之会python就能做硬件 9] 五分种学会用TPYBoard V102 制作避障小车(升级版)

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 感谢山东萝卜电子科技公司授权   一.实验器材 1.TPYboard V102板 ...

  6. 智能循迹避障小车&抢答器

    智能循迹避障小车 →视频链接← 抢答器

  7. [TPYBoard - Micropython之会python就能做硬件 8] 学习使用超声波模块制作避障小车

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604   一.实验器材 1.TPYboard V102板  一块 2.电机驱动模块L2 ...

  8. ROS知识(5)----消息与服务的示例

    ROS中已经定义了较多的标准类型的消息,你可以用在这些标准类型的消息上再自定义自己的消息类型.这个在复杂数据传输很有用,例如节点和服务器进行交互时,就可能用到传输多个参数到服务器,并返回相应的结果.为 ...

  9. 具有避障和寻线功能的Arduino小车

    标签:  Arduino  乐高  机器人 创客对于成年人来说,多半是科技娱乐,或者是一种是一种向往科技的人生态度,总是希望自己不仅可以看到或者听到科技的资讯,还希望能够亲身制作科技玩意,从而更好地体 ...

随机推荐

  1. OSGiBundle出现 Could not find bundle: org.eclipse.equinox.console的解决方案

    按照网上教程创建OSGI HelloWorld实例配置run configuration时出现Could not find bundle: org.eclipse.equinox.console 和C ...

  2. Spring框架的基本使用(IOC部分)

    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. Spring的好处 1.方便解耦,简化开发: Spring就是一个大工厂,专门负责生成Bean,可以将所有对象创建和依赖关 ...

  3. type Iterator does not take parameters

    在ubuntu编译java程序时报错:type Iterator does not take parameters 源码如下: package object; import java.util.*; ...

  4. test.c

    test.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include < ...

  5. c语言循环链表的问题

    今天,老师说了一道题,大意是,有一群小朋友10个人,但是老师只有一个苹果,只能给一个小朋友,于是老师就决定让小朋友们做成一圈,从第一个小朋友开始,每隔一个小朋友就没有机会得到苹果,最后剩下的一个人可以 ...

  6. SQL技巧两则:选择一个表的字段插入另一个表,根据其它表的字段更新本表内容

    最近,在作django数据表迁移时用到的. 因为在django中,我把本来一个字符型字段,更改成了外键, 于是,哦喝~~~字符型字段相当于被删除了, 为了能导入这些字段的外键信息,于是出此下策. 其实 ...

  7. Web前端开发最佳实践(11):使用更严格的JavaScript编码方式,提高代码质量

    前言 JavaScript语言由于其固有的灵活性,所以导致开发者可以写出很多诡异的代码,甚至一些较为正常的特性,如类型隐式转换.this的指代等等,也会让刚接触此语言的开发者头大不已.尤其是那些熟知其 ...

  8. 【POJ】2454.Jersey Politics

    题解 有种迷一样的讽刺效果 每个城市有1000头牛,然后你现在知道对于自己政党每个城市的选票,把城市划分成三个州,保证在至少两个州内获胜 找出前2K大的然后random_shuffle,直到前K个加起 ...

  9. USACO 6.2 Calf Flac

    Calf Flac It is said that if you give an infinite number of cows an infinite number of heavy-duty la ...

  10. 黑马程序员_java基础笔记(07)...IO流

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— IO(InputStream,outputStream)字节流 (Reader,Wr ...