• ros1仿真导航机器人 navigation


    仅为学习记录和一些自己的思考,不具有参考意义。

    1navigation导航框架

    2导航设置过程

    (1)启动仿真环境

    roslaunch why_simulation why_robocup.launch

    (2)启动move_base导航、amcl定位

    roslaunch why_simulation nav.launch 

    1. <launch>
    2. <node pkg="move_base" type="move_base" name="move_base">
    3. <rosparam file="$(find why_simulation)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
    4. <rosparam file="$(find why_simulation)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
    5. <rosparam file="$(find why_simulation)/config/global_costmap_params.yaml" command="load" />
    6. <rosparam file="$(find why_simulation)/config/local_costmap_params.yaml" command="load" />
    7. <param name="base_global_planner" value="global_planner/GlobalPlanner" />
    8. <param name="base_local_planner" value="wpbh_local_planner/WpbhLocalPlanner" />
    9. node>
    10. <node pkg="map_server" type="map_server" name="map_server" args="$(find why_simulation)/maps/map.yaml"/>
    11. <node pkg="amcl" type="amcl" name="amcl"/>
    12. launch>

    (3)启动rviz

    rviz

    (4)设置目标点

    (5)将左右指令完善到launch文件中

    1. <launch>
    2. <include file="$(find why_simulation)/launch/why_robocup.launch"/>
    3. <node pkg="move_base" type="move_base" name="move_base">
    4. <rosparam file="$(find why_simulation)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
    5. <rosparam file="$(find why_simulation)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
    6. <rosparam file="$(find why_simulation)/config/global_costmap_params.yaml" command="load" />
    7. <rosparam file="$(find why_simulation)/config/local_costmap_params.yaml" command="load" />
    8. <param name="base_global_planner" value="global_planner/GlobalPlanner" />
    9. <param name="base_local_planner" value="wpbh_local_planner/WpbhLocalPlanner" />
    10. node>
    11. <node pkg="map_server" type="map_server" name="map_server" args="$(find why_simulation)/maps/map.yaml"/>
    12. <node pkg="amcl" type="amcl" name="amcl"/>
    13. <node name="rviz" pkg="rviz" type="rviz" args="-d $(find why_simulation)/rviz/nav.rviz"/>
    14. launch>

    3全局路径规划算法

    功能包简介

    navfn与global_planner功能相同,同时包含了Dijkstra与A*算法。

    navfn默认使用Dijkstra算法,算法无问题,但是此包的A*存在问题。

    global_planner功能包无bug。

    carrot_planner功能包碰到障碍物就停止了,常作为自己书写的规划器的模板。

    启动全局规划

    1. <node pkg="move_base" type="move_base" name="move_base">
    2. <param name="base_global_planner" value="global_planner/GlobalPlanner" />
    3. node>

    golbal_planner默认使用Dijkstra算法,若要切换为A*,则需要以下修改。

    1. <node pkg="move_base" type="move_base" name="move_base">
    2. <param name="base_global_planner" value="global_planner/GlobalPlanner" /> .
    3. <param name="GlobalPlanner/use_dijkstra" value="false" />
    4. <param name="GlobalPlanner/use_grid_path" value="true" />
    5. node>

    4 amcl

        <node pkg="amcl" type="amcl" name="amcl"/>
    

    开始导航后真实位置的粒子越来越少

    5 costmap

    代价地图

    代价地图的参数设置

    costmap_common_params.yaml

    1. robot_radius: 0.25
    2. inflation_radius: 0.5
    3. obstacle_range: 6.0
    4. raytrace_range: 6.0
    5. observation_sources: base_lidar
    6. base_lidar: {
    7. data_type: LaserScan,
    8. topic: /scan,
    9. marking: true,
    10. clearing: true
    11. }

    global_costmap_params.yaml

    1. global_costmap:
    2. global_frame: map
    3. robot_base_frame: base_footprint
    4. static_map: true
    5. update_frequency: 1.0
    6. publish_frequency: 1.0
    7. transform_tolerance: 1.0
    8. recovery_behaviors:
    9. - name: 'conservative_reset'
    10. type: 'clear_costmap_recovery/ClearCostmapRecovery'
    11. - name: 'rotate_recovery'
    12. type: 'rotate_recovery/RotateRecovery'
    13. - name: 'aggressive_reset'
    14. type: 'clear_costmap_recovery/ClearCostmapRecovery'
    15. conservative_reset:
    16. reset_distance: 2.0
    17. layer_names: ["obstacle_layer"]
    18. aggressive_reset:
    19. reset_distance: 0.0
    20. layer_names: ["obstacle_layer"]

    local_costmap_params.yaml

    1. local_costmap:
    2. global_frame: odom
    3. robot_base_frame: base_footprint
    4. static_map: false
    5. rolling_window: true
    6. width: 3.0
    7. height: 3.0
    8. update_frequency: 10.0
    9. publish_frequency: 10.0
    10. transform_tolerance: 1.0

    6 recovery_behaviors

    应急机制,在导航进行停滞时,尝试刷新周围障碍物的信息,重新进行全局路径规划。

    1. recovery_behaviors:
    2. - name: 'conservative_reset'
    3. type: 'clear_costmap_recovery/ClearCostmapRecovery'
    4. - name: 'rotate_recovery'
    5. type: 'rotate_recovery/RotateRecovery'
    6. - name: 'aggressive_reset'
    7. type: 'clear_costmap_recovery/ClearCostmapRecovery'

    7局部路径规划算法

    更改launch文件中的以下代码即可更换算法

            <param name="base_local_planner" value="wpbh_local_planner/WpbhLocalPlanner" />
    

    DWA测试

    1. <launch>
    2. <include file="$(find why_simulation)/launch/why_robocup.launch"/>
    3. <node pkg="move_base" type="move_base" name="move_base">
    4. <rosparam file="$(find why_simulation)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
    5. <rosparam file="$(find why_simulation)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
    6. <rosparam file="$(find why_simulation)/config/global_costmap_params.yaml" command="load" />
    7. <rosparam file="$(find why_simulation)/config/local_costmap_params.yaml" command="load" />
    8. <param name="base_global_planner" value="global_planner/GlobalPlanner" />
    9. <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
    10. <rosparam file="$(find why_simulation)/config/dwa_local_planner_params.yaml" command="load" />
    11. node>
    12. <node pkg="map_server" type="map_server" name="map_server" args="$(find why_simulation)/maps/map.yaml"/>
    13. <node pkg="amcl" type="amcl" name="amcl"/>
    14. <node name="rviz" pkg="rviz" type="rviz" args="-d $(find why_simulation)/rviz/nav.rviz"/>
    15. launch>

    导航结果可以看过许多白色的候选路径,绿色为最优路线。

    dwa_local_planner_params.yaml

    1. DWAPlannerROS:
    2. # 速度参数
    3. max_vel_x: 0.3 # 最大x方向速度
    4. min_vel_x: -0.05 # 最小x方向速度(设置负数将会允许倒车)
    5. max_vel_y: 0.0 # 差分驱动机器人的最大y方向速度为 0.0
    6. min_vel_y: 0.0 # 差分驱动机器人的最小y方向速度为 0.0
    7. max_vel_trans: 0.3 # 最大平移速度
    8. min_vel_trans: 0.01 # 最小平移速度(建议不要设置为 0.0 )
    9. trans_stopped_vel: 0.1 # 当平移速度小于这个值,就让机器人停止
    10. acc_lim_trans: 2.5 # 最大平移加速度
    11. acc_lim_x: 2.5 # x方向的最大加速度上限
    12. acc_lim_y: 0.0 # y方向的加速度上限(差分驱动机器人应该设置为 0.0 )
    13. max_vel_theta: 1.0 # 最大旋转速度,略小于基座的功能
    14. min_vel_theta: -0.01 # 当平移速度可以忽略时的最小角速度
    15. theta_stopped_vel: 0.1 # 当旋转速度小于这个值,就让机器人停止
    16. acc_lim_theta: 6.0 # 旋转的加速度上限
    17. # 目标容差参数
    18. yaw_goal_tolerance: 0.1 # 目标航向容差
    19. xy_goal_tolerance: 0.05 # 目标xy容差
    20. latch_xy_goal_tolerance: false # 到达目标容差范围后,停止移动,只旋转调整航向
    21. # 向前模拟参数
    22. sim_time: 1.7 # 模拟时间,默认值 1.7
    23. vx_samples: 3 # x方向速度采样数,默认值 3
    24. vy_samples: 1 # 差分驱动机器人y方向速度采样数,只有一个样本
    25. vtheta_samples: 20 # 旋转速度采样数,默认值 20
    26. # 轨迹评分参数
    27. path_distance_bias: 32.0 # 靠近全局路径的权重,默认值 32.0
    28. goal_distance_bias: 24.0 # 接近导航目标点的权重,默认值 24.0
    29. occdist_scale: 0.01 # 控制器避障的权重,默认值 0.01
    30. forward_point_distance: 0.325 # 从机器人到评分点的位置,默认值 0.325
    31. stop_time_buffer: 0.2 # 在碰撞前机器人必须停止的时间长度,留出缓冲空间,默认值 0.2
    32. scaling_speed: 0.25 # 缩放机器人速度的绝对值,默认值 0.25
    33. max_scaling_factor: 0.2 # 机器人足迹在高速时能缩放的最大系数,默认值 0.2
    34. # 防振动参数
    35. oscillation_reset_dist: 1.05 # 重置振动标志前需要行进的距离,默认值 0.05
    36. # 辅助调试选项
    37. publish_traj_pc : true # 是否在 RViz 里发布轨迹
    38. publish_cost_grid_pc: true # 是否在 RViz 里发布代价网格
    39. global_frame_id: odom # 基础坐标系
    40. # 差分驱动机器人配置
    41. holonomic_robot: false # 是否全向移动机器人

    在线调参工具

    rosrun rqt_reconfigure rqt_reconfigure

    TEB测试

    1. <launch>
    2. <include file="$(find why_simulation)/launch/why_robocup.launch"/>
    3. <node pkg="move_base" type="move_base" name="move_base">
    4. <rosparam file="$(find why_simulation)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
    5. <rosparam file="$(find why_simulation)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
    6. <rosparam file="$(find why_simulation)/config/global_costmap_params.yaml" command="load" />
    7. <rosparam file="$(find why_simulation)/config/local_costmap_params.yaml" command="load" />
    8. <param name="base_global_planner" value="global_planner/GlobalPlanner" />
    9. <param name="base_local_planner" value="teb_local_planner/TebLocalPlannerROS" />
    10. <rosparam file="$(find why_simulation)/config/teb_local_planner_params.yaml" command="load" />
    11. node>
    12. <node pkg="map_server" type="map_server" name="map_server" args="$(find why_simulation)/maps/map.yaml"/>
    13. <node pkg="amcl" type="amcl" name="amcl"/>
    14. <node name="rviz" pkg="rviz" type="rviz" args="-d $(find why_simulation)/rviz/nav.rviz"/>
    15. launch>

  • 相关阅读:
    OpenAI Whisper论文笔记
    一文彻底搞懂前端ES6模块化
    一文总览元宇宙科技独角兽Animoca Brands投资版图
    Nodejs 发送 TCP 消息的正确姿势
    RabbitMQ部署指南
    怎么拼接图片成一张图?分享简单有趣的拼图方法
    8核16g服务器能容纳多少人呢?
    python 爬虫 app爬取之charles的使用
    Python tkinter -- 第11章滚动条
    极米十年巅峰之作极米Z7X,能带走的百吋大屏
  • 原文地址:https://blog.csdn.net/ohhjack/article/details/140102791