谷歌cartographer使用速腾聚创3d激光雷达转二维数据进行2d建图

本文介绍如何使用小强ROS机器人与谷歌Cartographer进行2D SLAM建图。通过录制并回放包含2D雷达、IMU和里程计数据的rosbag文件,配置Cartographer_ros参数,并最终保存地图。

原链接: https://community.bwbot.org/topic/525
运行测试平台:小强ROS机器人

谷歌cartographer_ros请参考这篇安装教程http://community.bwbot.org/topic/136/google激光雷达slam算法cartographer的安装及bag包demo测试

1. 数据包准备

本文建图将采用普通的2d 雷达数据,结合IMU和里程计数据进行2d建图。2d 雷达数据由速腾聚创3d激光雷达转换得到,其他数据由小强机器人底盘得到。
rosbag数据包的详细制作过程,请参考这篇教程: https://community.bwbot.org/topic/522/使用rosbag录制和回放3d激光雷达数据和小强ros开发平台的里程计imu数据
下文教程将以蓝鲸机器人录制的bag包为例,演示如何建立2d地图。bag包百度云下载地址

2. 配置cartographer_ros

蓝鲸机器人github上的cartographer_ros已经配置好了所有文件,对于加装速腾聚创小强xq5开发平台采集的数据包,cartographer_ros需要使用的是下列文件,简略的说明在下文。cartographer_ros的详细文档可以参考官方wiki

cartographer_ros/launch/demo_xiaoqiang_rslidar_scan.launch #建图时启动的launch文件,负责启动rviz,加载cartographer_ros主要的启动节点和参数文件,话题数据名字的remap也在这个文件设定。

cartographer_ros/urdf/rslidar_2d.urd #模型文件,用来发布3d激光雷达、小车里程计、IMU、小车本体之间的tf关系

cartographer_ros/configuration_files/xiaoqiang_rslidar_scan.lua #cartographer_ros算法参数配置文件,优化建图效果需要调整的参数就是这个文件。

ros中坐标系的设置,请参考这篇教程,小强xq5平台的base_link原点设置在两个主动轮轴中间位置。

# cartographer_ros/configuration_files/xiaoqiang_rslidar_scan.lua文件里面设置是否使用imu、odom数据的参数是这两个:
use_odometry = true  #true使能里程计,false禁用里程计
TRAJECTORY_BUILDER_2D.use_imu_data = false  #true使能里程计,false禁用里程计
# cartographer_ros)/urdf/rslidar_2d.urd文件需要调整的参数是3d雷达相对base_link的安装位置,laserbase_link等价于base_link
<joint name="horizontal_laser_link_joint" type="fixed">
    <parent link="laserbase_link" />
    <child link="rslidar" />
    <origin xyz="0 0 0.4" rpy="0 0 0" />
  </joint>

3. 启动cartographer_ros,播放rosbag数据包,开始建图

#先关闭小车的ros启动节点
#在小车主机上新开一个命令终端
sudo service startup stop
roscore
#启动cartographer
#在小车主机上新开一个命令终端
roslaunch cartographer_ros demo_xiaoqiang_rslidar_scan.launch 
#播放bag数据
#在小车主机上新开一个命令终端
rosbag play  --clock  2018-08-11-13-20-34.bag

0_1534137389985_scan_1.png
0_1534137402544_Screenshot from 2018-08-13 13-14-09.png
0_1534137413409_Screenshot from 2018-08-13 13-16-04.png
0_1534137441815_Screenshot from 2018-08-11 20-08-13.png

4. bag播放完成后,用map_server保存地图

rosrun map_server map_saver --occ 51 --free 49 -f work0

保存成功后,会在home目录里面生成work0.yaml work0.pgm两个地图文件,这两个文件可以用来amcl导航。

<think> 我们正在讨论如何使用速腾(RoboSense)激光雷达结合Cartographer进行。这是一个关于SLAM(同时定位与)的技术问题。 由于用户的问题非常具体,我们需要分解步骤并提供详细指导。 步骤: 1. 硬件准备:确保速腾激光雷达(如RS-LiDAR-16)正确连接到计算机,并且能够获取点云数据。 2. 软件环境:安装ROS(推荐Melodic或Noetic版本),安装Cartographer ROS,以及速腾激光雷达ROS驱动。 3. 配置Cartographer:根据激光雷达的参数调整Cartographer的配置文件。 4. 运行:启动激光雷达驱动和Cartographer节点,进行。 5. 保存地完成后,使用Cartographer提供的工具保存地。 详细说明: 1. 硬件连接与测试: - 连接激光雷达到计算机(通常通过以太网),设置好IP地址(例如192.168.1.200),确保计算机与激光雷达在同一网段。 - 测试网络连通性(ping 192.168.1.200)。 2. 安装驱动: - 速腾提供了ROS驱动,可以在GitHub上找到(如robosense/rslidar_sdk)。按照官方文档编译安装。 - 注意:可能需要安装PCAP库(用于处理网络数据包)。 3. 安装Cartographer ROS: - 参考官方文档:https://google-cartographer-ros.readthedocs.io/en/latest/compilation.html 4. 配置Cartographer: - Cartographer的配置主要涉及两个文件:`backpack_2d.lua`(用于2D)和`rslidar.lua`(传感器配置)。 - 需要根据激光雷达的参数调整配置,例如: - `num_lasers`(激光雷达的线数,如16线雷达则设置为16) - `min_range`和`max_range`(有效测距范围) - 设置传感器框架(frame_id)为激光雷达的frame(例如rslidar) 5. 启动文件: - 编写一个ROS启动文件,同时启动激光雷达驱动和Cartographer节点。 - 示例启动文件结构: ```xml <launch> <!-- 启动速腾雷达驱动 --> <node name="rslidar_node" pkg="rslidar_sdk" type="rslidar_sdk_node" output="screen"> <param name="config_path" value="$(find rslidar_sdk)/config/"/> <param name="lidar_type" value="RS16"/> <!-- 根据实际型号修改 --> </node> <!-- 启动Cartographer节点 --> <node name="cartographer_node" pkg="cartographer_ros" type="cartographer_node" args="-configuration_directory $(find cartographer_ros)/configuration_files -configuration_basename my_rslidar.lua" output="screen"> </node> <!-- 启动rviz --> <node name="rviz" pkg="rviz" type="rviz" required="true" args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz"/> </launch> ``` 6. 与保存: - 启动上述文件后,移动机器人进行。 - 完成后,使用以下命令保存地: ```bash rosservice call /finish_trajectory 0 rosservice call /write_state "{filename: '${HOME}/map.pbstream'}" ``` - 然后可以将pbstream文件换为pgm和yaml(用于导航): ```bash rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=${HOME}/map -pbstream_filename=${HOME}/map.pbstream -resolution=0.05 ``` 注意事项: - 确保时间同步:如果使用IMU等其它传感器,需要时间同步。 - 校准:激光雷达的安装位置和角度会影响,需要在校准文件中设置正确的变换(可以使用`static_transform_publisher`或URDF)。 - 性能调优:Cartographer的参数配置对效果影响很大,可能需要根据实际环境调整参数(如扫描匹配参数、子数量等)。 相关问题: 1. 如何安装速腾激光雷达ROS驱动? 2. Cartographer过程中出现定位漂移怎么办? 3. 如何将Cartographer生成的地用于ROS导航? 4. 如何配置Cartographer使用多传感器(如激光雷达+IMU)? </think> ### 速腾激光雷达结合Cartographer方法 #### 一、准备工作 1. **硬件连接** - 将速腾激光雷达(如RS-LiDAR-16/32)通过以太网接入工控机 - 配置雷达IP地址(默认`192.168.1.200`),确保与工控机同网段 - 安装IMU(可选但推荐,可提升精度)[^1] 2. **软件依赖** ```bash # 安装ROS(推荐Noetic/Melodic) sudo apt install ros-noetic-cartographer-ros \ ros-noetic-rslidar-sdk \ ros-noetic-pcl-ros ``` #### 二、配置流程 1. **雷达驱动配置** 修改`rslidar_sdk`参数(`config/rslidar.yaml`): ```yaml common: frame_id: rs_lidar # 坐标系名称 msg_source: 1 # 1=在线模式 lidar: - driver: lidar_type: RS16 # 雷达型号 device_ip: 192.168.1.200 ``` 2. **Cartographer配置** 配置文件`rslidar_2d.lua`: ```lua include "map_builder.lua" TRAJECTORY_BUILDER_2D = { use_imu_data = false, -- 无IMU时设为false min_range = 0.3, -- 最小探测距离(m) max_range = 100.0, -- 最大探测距离(m) num_lasers = 16, -- 雷达线数(按实际修改) } ``` 3. **Launch文件示例** ```xml <launch> <!-- 启动雷达驱动 --> <node pkg="rslidar_sdk" type="rslidar_sdk_node" name="rslidar_node" /> <!-- 启动Cartographer --> <node name="cartographer_node" pkg="cartographer_ros" args="-configuration_directory $(find your_pkg)/config -configuration_basename rslidar_2d.lua" output="screen"> <remap from="scan" to="/rslidar_points" /> <!-- 点云话题重映射 --> </node> </launch> ``` #### 三、执行流程 1. 启动: ```bash roslaunch your_pkg mapping.launch ``` 2. 移动设备采集数据议速度≤1m/s) 3. 完成后保存地: ```bash # 终止轨迹 rosservice call /finish_trajectory 0 # 保存PBSTREAM地 rosservice call /write_state "filename: '${HOME}/map.pbstream'" ``` 4. 换为PGM地: ```bash rosrun cartographer_ros cartographer_pbstream_to_ros_map \ -pbstream_filename=map.pbstream \ -map_filestem=output_map ``` #### 四、常见问题处理 | 问题现象 | 解决方案 | |---------|----------| | 点云数据缺失 | 检查防火墙设置,确认`udp_port=6699`开放 | | 漂移 | 添加IMU数据,或在`TRAJECTORY_BUILDER_2D`中调整`ceres_pose`优化参数 | | 地出现重影 | 降低`TRAJECTORY_BUILDER_2D.submaps.resolution`值(议0.05) | > **关键提示**:速腾雷达需配置**点云格式换**,Cartographer要求`sensor_msgs/LaserScan`格式,可使用`pointcloud_to_laserscan`包换[^2]: > ```bash > rosrun pointcloud_to_laserscan pointcloud_to_laserscan_node \ > _cloud_in:=/rslidar_points \ > _range_min:=0.5 _range_max:=50.0 > ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值