Turtlebot 2e 导航之 `move_base` 参数详解: 局部规划器的设置

Turtlebot 2e 导航之 move_base 参数详解: 局部规划器的设置

局部规划器的设置

局部路径规划参数相当重要,因为它是直接控制机器人的移动底盘运动的插件,它负责来向移动底盘的/cmd_vel话题中发布控制命令。机器人移动的效果好不好,这个局部路径规划可是影响最大的。

局部路径的规划插件包括:

  • base_local_planner:实现了Trajectory Rollout和DWA两种局部规划算法。
  • dwa_local_planner:实现了DWA局部规划算法,可以看作是base_local_planner的改进版本

DWA规划器算法主要思想

dwa_local_planner是一个能够驱动底盘移动的控制器,该控制器连接了路径规划器和机器人.使用地图,规划器产生从起点到目标点的运动轨迹,在移动时,规划器在机器人周围产生一个函数,用网格地图表示。控制器的工作就是利用这个函数来确定发送给机器人的速度(dx, dy, dtheta)。

DWA算法的基本思想:
1.在机器人控制空间离散采样(dx, dy, dtheta)
2.对每一个采样的速度进行前向模拟,看看在当前状态下,使用该采样速度移动一小段时间后会发生什么.
3.评价前向模拟得到的每个轨迹,是否接近障碍物,是否接近目标,是否接近全局路径以及速度等等.舍弃非法路径
4.选择得分最高的路径,发送对应的速度给底座

DWA与Trajectory Rollout的区别主要是在机器人的控制空间采样差异.Trajectory Rollout采样点来源于整个前向模拟阶段所有可用速度集合,而DWA采样点仅仅来源于一个模拟步骤中的可用速度集合.这意味着相比之下DWA是一种更加有效算法,因为其使用了更小采样空间;然而对于低加速度的机器人来说可能Trajectory Rollout更好, 因为DWA不能对常加速度做前向模拟。

dwa_local_planner_params.yaml解读

dwa_local_planner_params.yaml调用源:

<rosparam file="$(find turtlebot_navigation)/param/dwa_local_planner_params.yaml" command="load" />

由于参数较多,注释直接写在源文件里

DWAPlannerROS: 

# Robot Configuration Parameters - Kobuki 机器人配置参数,这里为Kobuki底座
  max_vel_x: 0.5  # 0.55 
  #x方向最大线速度绝对值,单位:米/秒
  min_vel_x: 0.0  
  #x方向最小线速度绝对值,单位:米/秒。如果为负值表示可以后退.

  max_vel_y: 0.0  # diff drive robot  
  #y方向最大线速度绝对值,单位:米/秒。turtlebot为差分驱动机器人,所以为0
  min_vel_y: 0.0  # diff drive robot  
  #y方向最小线速度绝对值,单位:米/秒。turtlebot为差分驱动机器人,所以为0

  max_trans_vel: 0.5 # choose slightly less than the base's capability 
  #机器人最大平移速度的绝对值,单位为 m/s
  min_trans_vel: 0.1  # this is the min trans velocity when there is negligible rotational velocity 
  #机器人最小平移速度的绝对值,单位为 m/s
  trans_stopped_vel: 0.1 
  #机器人被认属于“停止”状态时的平移速度。如果机器人的速度低于该值,则认为机器人已停止。单位为 m/s

  # Warning!
  #   do not set min_trans_vel to 0.0 otherwise dwa will always think translational velocities
  #   are non-negligible and small in place rotational velocities will be created.
  #注意不要将min_trans_vel设置为0,否则DWA认为平移速度不可忽略,将创建较小的旋转速度。

  max_rot_vel: 5.0  # choose slightly less than the base's capability #机器人的最大旋转角速度的绝对值,单位为 rad/s 
  min_rot_vel: 0.4  # this is the min angular velocity when there is negligible translational velocity #机器人的最小旋转角速度的绝对值,单位为 rad/s
  rot_stopped_vel: 0.4 #机器人被认属于“停止”状态时的旋转速度。单位为 rad/s
   
  acc_lim_x: 1.0 # maximum is theoretically 2.0, but we  机器人在x方向的极限加速度,单位为 meters/sec^2
  acc_lim_theta: 2.0 #机器人的极限旋转加速度,单位为 rad/sec^2
  acc_lim_y: 0.0      # diff drive robot 机器人在y方向的极限加速度,对于差分机器人来说当然是0

# Goal Tolerance Parameters 目标距离公差参数
  yaw_goal_tolerance: 0.3  # 0.05 
  #到达目标点时,控制器在偏航/旋转时的弧度容差(tolerance)。即:到达目标点时偏行角允许的误差,单位弧度
  xy_goal_tolerance: 0.15  # 0.10 
  #到到目标点时,控制器在x和y方向上的容差(tolerence)(米)。即:到达目标点时,在xy平面内与目标点的距离误差
  # latch_xy_goal_tolerance: false 
  # 设置为true时表示:如果到达容错距离内,机器人就会原地旋转;即使转动是会跑出容错距离外。
#注:这三个参数的设置及影响讨论请参考《ROS导航功能调优指南》

# Forward Simulation Parameters 前向模拟参数
  sim_time: 1.0       # 1.7 
  #前向模拟轨迹的时间,单位为s(seconds) 
  vx_samples: 6       # 3  
  #x方向速度空间的采样点数.
  vy_samples: 1       # diff drive robot, there is only one sample
  #y方向速度空间采样点数.。Tutulebot为差分驱动机器人,所以y方向永远只有1个值(0.0)
  vtheta_samples: 20  # 20 
  #旋转方向的速度空间采样点数.
#注:参数的设置及影响讨论请参考《ROS导航功能调优指南》

# Trajectory Scoring Parameters 轨迹评分参数
  path_distance_bias: 64.0      # 32.0   - weighting for how much it should stick to the global path plan
  #控制器与给定路径接近程度的权重
  
  goal_distance_bias: 24.0      # 24.0   - weighting for how much it should attempt to reach its goal
  #控制器与局部目标点的接近程度的权重,也用于速度控制
  
  occdist_scale: 0.5            # 0.01   - weighting for how much the controller should avoid obstacles
  # 控制器躲避障碍物的程度
  
  forward_point_distance: 0.325 # 0.325  - how far along to place an additional scoring point
  #以机器人为中心,额外放置一个计分点的距离
  
  stop_time_buffer: 0.2         # 0.2    - amount of time a robot must stop in before colliding for a valid traj.
  #机器人在碰撞发生前必须拥有的最少时间量。该时间内所采用的轨迹仍视为有效。即:为防止碰撞,机器人必须提前停止的时间长度

  scaling_speed: 0.25           # 0.25   - absolute velocity at which to start scaling the robot's footprint
  #开始缩放机器人足迹时的速度的绝对值,单位为m/s。
  #在进行对轨迹各个点计算footprintCost之前,会先计算缩放因子。如果当前平移速度小于scaling_speed,则缩放因子为1.0,否则,缩放因子为(vmag - scaling_speed) / (max_trans_vel - scaling_speed) * max_scaling_factor + 1.0。然后,该缩放因子会被用于计算轨迹中各个点的footprintCost。
  # 参考:https://www.cnblogs.com/sakabatou/p/8297479.html
  #亦可简单理解为:启动机器人底盘的速度.(Ref.: https://www.corvin.cn/858.html)
  
  max_scaling_factor: 0.2       # 0.2    - how much to scale the robot's footprint when at speed.
  #最大缩放因子。max_scaling_factor为上式的值的大小。

# Oscillation Prevention Parameters 振荡预防参数
  oscillation_reset_dist: 0.05  # 0.05   - how far to travel before resetting oscillation flags
  #机器人必须运动多少米远后才能复位震荡标记(机器人运动多远距离才会重置振荡标记)

# Global Plan Parameters
  #prune_plan: false
  #机器人前进是否清除身后1m外的轨迹.
  
# Debugging 调试参数
  publish_traj_pc : true #将规划的轨迹在RVIZ上进行可视化
  publish_cost_grid_pc: true 
  #将代价值进行可视化显示
  #是否发布规划器在规划路径时的代价网格.如果设置为true,那么就会在~/cost_cloud话题上发布sensor_msgs/PointCloud2类型消息.
  global_frame_id: odom #全局参考坐标系为odom


# Differential-drive robot configuration - necessary? 差分机器人配置参数
#  holonomic_robot: false 
   #是否为全向机器人。 值为false时为差分机器人; 为true时表示全向机器人
# Move base node parameters. For full documentation of the parameters in this file, please see # # http://www.ros.org/wiki/move_base # shutdown_costmaps: false controller_frequency: 5.0 controller_patience: 3.0 planner_frequency: 1.0 planner_patience: 5.0 oscillation_timeout: 10.0 oscillation_distance: 0.2 # local planner - default is trajectory rollout #base_local_planner: "dwa_local_planner/DWAPlannerROS" base_local_planner: "teb_local_planner/TebLocalPlannerROS" #alternatives: global_planner/GlobalPlanner, carrot_planner/CarrotPlanner base_global_planner: "navfn/NavfnROS" #We plan to integrate recovery behaviors for turtlebot but currently those belong to gopher and still have to be adapted. ## recovery behaviors; we avoid spinning, but we need a fall-back replanning recovery_behavior_enabled: true recovery_behaviors: #- name: 'super_conservative_reset1' #type: 'clear_costmap_recovery/ClearCostmapRecovery' #- name: 'conservative_reset1' #type: 'clear_costmap_recovery/ClearCostmapRecovery' #- name: 'aggressive_reset1' #type: 'clear_costmap_recovery/ClearCostmapRecovery' - name: 'clearing_rotation1' type: 'rotate_recovery/RotateRecovery' - name: 'super_conservative_reset2' type: 'clear_costmap_recovery/ClearCostmapRecovery' #- name: 'conservative_reset2' #type: 'clear_costmap_recovery/ClearCostmapRecovery' #- name: 'aggressive_reset2' #type: 'clear_costmap_recovery/ClearCostmapRecovery' - name: 'clearing_rotation2' type: 'rotate_recovery/RotateRecovery' #super_conservative_reset1: #reset_distance: 3.0 #conservative_reset1: #reset_distance: 1.5 #aggressive_reset1: #reset_distance: 0.0 super_conservative_reset2: reset_distance: 2.0 #conservative_reset2: #reset_distance: 1.5 #aggressive_reset2: #reset_distance: 0.0
最新发布
06-25
<think>我们正在讨论如何将MPC局部路径规划集成到ROSmove_base导航框架中。根据引用[2]和引用[3],我们知道MPC局部路径规划ROS导航包中可用的一种局部规划。以下步骤将指导您完成在move_base中使用mpc_local_planner的过程。###步骤1:安装mpc_local_planner首先,确保您已经安装了mpc_local_planner包。如果尚未安装,您可以通过以下命令安装(假设您使用的是ROSNoetic):```bashsudoapt-getinstallros-noetic-mpc-local-planner```或者,您也可以从源代码构建。克隆仓库到您的catkin工作空间并编译:```bashcd~/catkin_ws/srcgitclonehttps://github.com/rst-tu-dortmund/mpc_local_planner.gitcd~/catkin_wscatkin_make```###步骤2:配置move_base参数在您的move_base配置文件中(通常是YAML文件),您需要将局部规划设置为mpc_local_planner。修改您的局部规划参数文件(例如`local_planner_params.yaml`)如下:```yamlcontroller_frequency:5.0#控制频率(Hz)#使用MPC局部规划TrajectoryPlannerROS:#这里可以保留其他TrajectoryPlannerROS参数,但注意mpc_local_planner有自己的参数空间#替换为使用mpc_local_plannerbase_local_planner:mpc_local_planner/MpcLocalPlannerROS#MPC局部规划参数配置MpcLocalPlannerROS:#以下是部分参数示例,具体参数请参考mpc_local_planner的文档max_vel_x:0.5min_vel_x:-0.1max_vel_theta:0.5min_vel_theta:-0.5acc_lim_x:0.5acc_lim_theta:0.5#其他参数...```###步骤3:在launch文件中配置move_base在您的move_base启动文件中,确保将局部规划参数文件加载到move_base节点中。例如,在您的launch文件中可能有如下片段:```xml<nodepkg="move_base"type="move_base"respawn="false"name="move_base"output="screen"><rosparamfile="$(findyour_package)/config/costmap_common_params.yaml"command="load"ns="global_costmap"/><rosparamfile="$(findyour_package)/config/costmap_common_params.yaml"command="load"ns="local_costmap"/><rosparamfile="$(findyour_package)/config/local_costmap_params.yaml"command="load"/><rosparamfile="$(findyour_package)/config/global_costmap_params.yaml"command="load"/><!--加载局部规划参数--><rosparamfile="$(findyour_package)/config/local_planner_params.yaml"command="load"/><!--指定全局规划局部规划插件--><paramname="base_global_planner"type="string"value="global_planner/GlobalPlanner"/><paramname="base_local_planner"value="mpc_local_planner/MpcLocalPlannerROS"/></node>```###步骤4:调整MPC参数mpc_local_planner有许多参数可以调整以适应您的机人模型和环境。这些参数通常包括机人的动力学约束、MPC的预测步长、权重矩阵等。请参考mpc_local_planner的文档或源码中的参数说明进行配置。您可以在`local_planner_params.yaml`文件中的`MpcLocalPlannerROS`命名空间下设置这些参数。###步骤5:测试与调试启动您的导航系统,使用RViz或其他工具测试MPC局部规划的性能。您可能需要根据实际运行情况调整参数。###注意事项-确保您的机人模型(如运动学和动力学模型)与MPC规划所使用的模型相匹配。如果模型不匹配,可能需要修改MPC规划的模型参数或使用自定义模型。-MPC规划计算量较大,确保您的硬件能够满足实时性要求。-参考mpc_local_planner的官方文档和ROSwiki页面获取最新信息。通过以上步骤,您应该能够在ROSmove_base导航框架中使用MPC局部路径规划。§§相关问题§§1.MPC局部路径规划ROS中的性能优化有哪些方法?2.如何为MPC局部路径规划自定义机人的动力学模型?3.在ROS中,如何调试MPC局部路径规划参数?4.MPC局部路径规划与其他局部规划(如DWA、TEB)相比有什么优缺点?</think>### 如何在ROSmove_base框架中集成MPC局部路径规划ROSmove_base导航框架中集成MPC局部路径规划需要以下步骤,结合引用[2][3][4]的实践指导: #### 1. **安装MPC规划包** 首先确保已安装`mpc_local_planner`包: ```bash sudo apt-get install ros-<distro>-mpc-local-planner # 替换<distro>为ROS版本 ``` 或从源码编译: ```bash git clone https://github.com/rst-tu-dortmund/mpc_local_planner.git catkin_make ``` #### 2. **配置move_base参数** 修改move_base配置文件(如`local_planner_params.yaml`): ```yaml # 指定MPC作为局部规划 base_local_planner: "mpc_local_planner/MpcLocalPlannerROS" # MPC参数配置(部分示例) MpcLocalPlannerROS: max_vel_x: 0.8 # 最大线速度(m/s) max_vel_theta: 1.0 # 最大角速度(rad/s) prediction_horizon: 10 # 预测步长 control_horizon: 5 # 控制步长 # 其他动力学约束参数... ``` > 参数需根据机人动力学模型调整[^2] #### 3. **修改launch文件** 在move_base启动文件中指定规划: ```xml <node pkg="move_base" type="move_base" name="move_base"> <rosparam file="$(find your_pkg)/config/local_planner_params.yaml" command="load"/> <!-- 全局规划可选navfn/global_planner等[^4] --> <param name="base_global_planner" value="global_planner/GlobalPlanner"/> </node> ``` #### 4. **关键配置注意事项** - **模型匹配**:在`robot_model.yaml`中精确配置机人轮廓、轮距等参数,MPC对模型精度敏感[^2] - **代价地图**:确保`local_costmap`分辨率足够高(建议0.05-0.1m),MPC依赖精确环境感知[^3] - **实时性保障**:调整`controller_frequency`(5-10Hz),MPC计算负载较高[^2] #### 5. **验证与调试** ```bash roslaunch your_navigation_pkg navigation.launch ``` 在RViz中检查: - `/mpc_trajectory`话题输出的预测轨迹 - 通过`dynamic_reconfigure`实时调整参数 ### 常见问题解决 - **规划失败**:检查`/mpc_local_planner/optimization_failure`警告,通常需松弛动力学约束 - **轨迹震荡**:增加轨迹平滑权重`weight_continuity`[^2] - **计算超时**:减少`prediction_horizon`或降低`controller_frequency` > MPC相比DWA/TEB更适合高动态环境,但对计算资源要求更高[^3]。实际部署建议先在Gazebo仿真验证。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值