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 Description为robot_description。 -
地图:选择
Map,设置Topic为/map。 -
全局代价地图:选择
Map,设置Topic为/move_base/global_costmap/costmap,设置Color Scheme为Costmap。 -
局部代价地图:选择
Map,设置Topic为/move_base/local_costmap/costmap,设置Color Scheme为Costmap。 -
导航路线:选择
Path,设置Topic为/move_base/GlobalPlanner/plan,设置Line Style为Billboards。
四、自适应蒙特卡洛定位(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)