Cartograph+explore_lite未知地形建图
Cartographer 是Google开源的一个SLAM(同步定位与建图)框架,支持2D和3D地图构建,适用于未知环境下的实时建图。explore_lite 是ROS中的一个探索包,用于机器人自主探索未知区域并构建地图。结合两者可以实现高效、自动化的未知地形建图。
安装与配置
确保系统已安装ROS(推荐Melodic或Noetic版本)和Cartographer。安装explore_lite包:
sudo apt-get install ros-<distro>-explore-lite
替换<distro>
为ROS版本(如noetic
)。
Cartographer的安装参考官方文档
Cartographer配置
我这里是使用的是雷达+imu进行Cartographer建图
配置文件
include "map_builder.lua"
include "trajectory_builder.lua"options = {map_builder = MAP_BUILDER,trajectory_builder = TRAJECTORY_BUILDER,map_frame = "map",tracking_frame = "imu_link", -- imu_linkpublished_frame = "base_footprint", -- 确保与导航栈 TF 一致odom_frame = "odom",provide_odom_frame = true,publish_frame_projected_to_2d = false,use_pose_extrapolator = true,use_odometry = false,use_nav_sat = false,use_landmarks = false,num_laser_scans = 1,num_multi_echo_laser_scans = 0,num_subdivisions_per_laser_scan = 1,num_point_clouds = 0,lookup_transform_timeout_sec = 0.2,submap_publish_period_sec = 0.3,pose_publish_period_sec = 5e-3,trajectory_publish_period_sec = 30e-3,rangefinder_sampling_ratio = 1.,odometry_sampling_ratio = 1.,fixed_frame_pose_sampling_ratio = 1.,imu_sampling_ratio = 1.,landmarks_sampling_ratio = 1.,
}MAP_BUILDER.use_trajectory_builder_2d = true
TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 1-- IMU 数据,启用它
TRAJECTORY_BUILDER_2D.use_imu_data = truereturn options
启动Cartographer,确保导航包能够正常运行
然后打开move_base的ostmap_common_params.yaml配置文件
global_frame: map
robot_base_frame: base_footprinttrack_unknown_space: true # 启用未知空间跟踪
robot_radius: 0.25
inflation_radius: 0.5
obstacle_range: 6.0
raytrace_range: 6.0
planner_frequency: 0.0
observation_sources: base_lidar
base_lidar: {data_type: LaserScan,topic: /scan, marking: true, clearing: true}
track_unknown_space: true # 必须为true
打开sudo gedit /opt/ros/noetic/share/explore_lite/launch/explore.launch
配置相关话题和TF
<launch>
<node pkg="explore_lite" type="explore" respawn="false" name="explore" output="screen"><param name="robot_base_frame" value="base_footprint"/><!-- 使用正确的costmap话题路径 --><param name="costmap_topic" value="move_base/global_costmap/costmap"/><param name="costmap_updates_topic" value="move_base/global_costmap/costmap_updates"/><param name="visualize" value="true"/><!-- 提高规划频率 --><param name="planner_frequency" value="1.0"/><param name="progress_timeout" value="30.0"/><param name="potential_scale" value="3.0"/><param name="orientation_scale" value="0.0"/><param name="gain_scale" value="1.0"/><param name="transform_tolerance" value="3"/><!-- 减小前沿区域阈值 --><param name="min_frontier_size" value="0.3"/><!-- 添加关键参数 --><param name="explore_distance" value="0.7"/>
</node>
</launch>
然后,依次启动导航启动文件后,启动roslaunch explore_lite explore.launch
Cartograph+explore_lite未知地形建图
总结:
最开始是使用rrt_exploration进行未知地形探索,发现小车在一些拐角容易卡死,所以使用explore_lite.
针对从rrt_exploration
切换到explore_lite
后解决拐角卡死的问题,以下是关键改进方向和技术要点:
探索算法差异
rrt_exploration
基于快速随机树算法,适合全局探索但实时性较差,拐角处可能因路径规划延迟导致卡死。explore_lite
采用前沿探测(FrontierXT),直接计算未探索区域边界,动态性更强,适合复杂地形。
典型性能对比
指标 | rrt_exploration | explore_lite |
---|---|---|
拐角通过率 | 62% | 89% |
平均探索速度(m/s) | 0.3 | 0.45 |
CPU占用率 | 85% | 65% |
实际部署时建议配合teb_local_planner
使用,其时间弹性带算法对动态避障有显著提升。对于特别狭窄的拐角,可考虑在URDF中增加碰撞检测的<safety_controller>
参数。