- 当机器人执行旋转恢复行为时,旋转速度过快,默认为1弧度/秒,这样会极有可能导致机器人定位出错。查rotate_recovery ros wiki得知,当局部规划器不是base_local_planner时,需要单独设置相关参数。可以在move_base_params.yaml文件中设置
#旋转恢复行为参数
TrajectoryPlannerROS:
yaw_goal_tolerance: 0.05 #0.05 #控制器在实现其目标时偏航/旋转的弧度公差
acc_lim_theta: 3.2 #3.2 #机器人的旋转加速度限制,单位为弧度/秒^2
max_vel_theta: 0.3 #1.0 #机器人允许的最大旋转速度,单位为弧度/秒
min_in_place_vel_theta: 0.1 #0.4 #以弧度/秒执行就地旋转时基座允许的最小旋转速度
- 当机器人目标点的位姿在当前的正后方(如图所示),若机器人的max_rot_vel最大旋转速度的绝对值太小,比如0.5(官方默认为1.0rad/s),acc_lim_th 最大角加速度太小比如3.2(官方默认3.2弧度/秒^2),会出现机器人不停左摇右摆,/cmd_vel中角速度一会为正一会为负,此时的线速度为min_vel_trans最小线速度,假如最小线速度过大,比如0.1m/s(官方默认为0.1m/s),可以观察到机器人会一边前进,一边小角度的来回摆动,最后机器人需要执行恢复行为。
由此可见,相关速度值对机器人的控制很重要,下面给DWA速度参数参考
DWAPlannerROS:
#加速度
acc_lim_x: 2.0 # 机器人在x方向的极限加速度,单位弧度/秒^2
acc_lim_y: 0 # 机器人在y方向的极限加速度,单位弧度/秒^2
acc_lim_trans: 2.0 # 机器人在平移(x or y)方向的极限加速度,单位弧度/秒^2
acc_lim_theta: 8.0 # 机器人在极限角加速度,单位弧度/秒^2
#线速度
max_vel_x: 0.3
min_vel_x: 0.01
max_vel_y: 0.0
min_vel_y: 0.0
max_vel_trans: 0.3
min_vel_trans: 0.01
trans_stopped_vel: 0.01 # 机器人被认属于“停止”状态时的平移速度
#角速度
max_vel_theta: 1.0 # 机器人最大旋转速度
min_vel_theta: 0.1
theta_stopped_vel: 0.1 # 机器人被认属于“停止”状态时的旋转角速度
- 由于机器人除了在充电站需要较低的位姿容差,其他巡航点位可以适当提高位姿容差,由此可以使用dynamic reconfigure在程序中根据目标点是否为低容差点来修改参数。这样可以让机器人在高容差点可以更快的停下,不会出现在附近左摇右摆。DWA中的位姿容差参数 yaw_goal_tolerance、xy_goal_tolerance。
ROS c++ 编写动态调参(dynamic reconfigure)客户端,导航参数程序动态调节,以dwa_local_planner为例
对于melodic的move_base 线速度最大值和acc_lim_x也有关系,调节线加速度但又不影响最大线速度的参数是acc_lim_trans ,建议和max_vel_trans的比是1.5:1