ROS中机器人配置及相关功能实现(Navigation & RViz)

一、机器人配置

(一)安装导航栈

首先,确保安装了ROS导航栈。对于ROS Noetic,可以使用以下命令安装:

sudo apt-get install ros-noetic-navigation

对于ROS 2,可以使用以下命令安装:

sudo apt install ros-$ROS_DISTRO-navigation2
sudo apt install ros-$ROS_DISTRO-nav2-bringup

(二)配置参数文件

复制配置文件到你的包中,并进行修改。例如,复制nav2_params.yaml文件:

cp /opt/ros/humble/share/nav2_bringup/params/nav2_params.yaml .

修改参数文件,例如设置机器人的半径:

robot_radius: 0.12

二、全局和局部代价地图

(一)代价地图简介

代价地图(Costmap)是ROS中用于路径规划的重要工具。它分为全局代价地图(Global Costmap)和局部代价地图(Local Costmap)。

(二)配置代价地图

1. 通用参数配置(costmap_common_params.yaml

robot_radius: 0.2
obstacle_layer:
  enabled: true
  combination_method: 1
  track_unknown_space: true
  obstacle_range: 2.5
  raytrace_range: 3.0
  observation_sources: laser_scan_sensor
  laser_scan_sensor: {
    sensor_frame: /robot0_laser_0,
    data_type: LaserScan,
    topic: /robot0/laser_0,
    marking: true,
    clearing: true
  }
inflation_layer:
  enabled: true
  cost_scaling_factor: 5.0
  inflation_radius: 0.36
static_layer:
  enabled: true

2. 全局代价地图配置(global_costmap_params.yaml

global_costmap:
  global_frame: /map
  robot_base_frame: /robot0
  update_frequency: 0.5
  static_map: true
  rolling_window: false
  transform_tolerance: 1.0
  plugins:
    - {name: static_layer,    type: "costmap_2d::StaticLayer"}
    - {name: obstacle_layer,  type: "costmap_2d::ObstacleLayer"}
    - {name: inflation_layer, type: "costmap_2d::InflationLayer"}

3. 局部代价地图配置(local_costmap_params.yaml

local_costmap:
  global_frame: /map_static
  robot_base_frame: /robot0
  update_frequency: 5.0
  publish_frequency: 3.0
  static_map: false
  rolling_window: true
  width: 4.0
  height: 4.0
  resolution: 0.05
  transform_tolerance: 0.5
  plugins:
    - {name: obstacle_layer,  type: "costmap_2d::ObstacleLayer"}
    - {name: inflation_layer, type: "costmap_2d::InflationLayer"}

三、RViz详细配置

(一)启动RViz并加载配置文件

rosrun rviz rviz -d /path/to/your/rviz_config.rviz

(二)添加显示内容

  • 机器人模型:选择RobotModel,设置Robot Descriptionrobot_description

  • 地图:选择Map,设置Topic/map

  • 全局代价地图:选择Map,设置Topic/move_base/global_costmap/costmap,设置Color SchemeCostmap

  • 局部代价地图:选择Map,设置Topic/move_base/local_costmap/costmap,设置Color SchemeCostmap

  • 导航路线:选择Path,设置Topic/move_base/GlobalPlanner/plan,设置Line StyleBillboards

四、自适应蒙特卡洛定位(AMCL)

(一)安装AMCL

sudo apt-get install ros-noetic-amcl

(二)启动AMCL

<node pkg="amcl" type="amcl" name="amcl">
  <param name="use_map_topic" value="true"/>
  <param name="initial_pose_x" value="0.0"/>
  <param name="initial_pose_y" value="0.0"/>
  <param name="initial_pose_a" value="0.0"/>
</node>

五、避障

(一)配置避障参数

costmap_common_params.yaml中配置避障参数:

obstacle_layer:
  enabled: true
  combination_method: 1
  track_unknown_space: true
  obstacle_range: 2.5
  raytrace_range: 3.0
  observation_sources: laser_scan_sensor
  laser_scan_sensor: {
    sensor_frame: /robot0_laser_0,
    data_type: LaserScan,
    topic: /robot0/laser_0,
    marking: true,
    clearing: true
  }
inflation_layer:
  enabled: true
  cost_scaling_factor: 5.0
  inflation_radius: 0.36

(二)动态避障

local_costmap_params.yaml中配置局部代价地图,确保动态避障:

local_costmap:
  global_frame: /map_static
  robot_base_frame: /robot0
  update_frequency: 5.0
  publish_frequency: 3.0
  static_map: false
  rolling_window: true
  width: 4.0
  height: 4.0
  resolution: 0.05
  transform_tolerance: 0.5
  plugins:
    - {name: obstacle_layer,  type: "costmap_2d::ObstacleLayer"}
    - {name: inflation_layer, type: "costmap_2d::InflationLayer"}

六、目标发送

(一)使用RViz发送目标

在RViz中,使用2D Nav Goal工具发送目标点。点击2D Nav Goal,然后在地图上点击目标位置,机器人将自动导航到该位置。

(二)使用命令行发送目标

使用rostopic命令发送目标点:

rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped "header:
  seq: 0
  stamp:
    secs: 0
    nsecs: 0
  frame_id: 'map'
pose:
  position:
    x: 1.0
    y: 1.0
    z: 0.0
  orientation:
    x: 0.0
    y: 0.0
    z: 0.0
    w: 1.0"

通过以上步骤,您可以完成机器人的配置,设置全局和局部代价地图,详细配置RViz,实现自适应蒙特卡洛定位,配置避障功能,并发送目标点。这些功能是机器人导航和自主移动的基础。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)