cartographer使用安装包安装并融合odom和imu建图 Ubuntu18.04 ros melodic

1、从 安装网站中下载以下四个安装包到本地并安装

分别点击进去下载 如果没有相同的就下载相似的
在这里插入图片描述
(1) ros-melodic-cartographer-ros_1.0.0-1bionic.20220413.182356_amd64.deb
(2) ros-melodic-cartographer-ros-msgs_1.0.0-1bionic.20210505.011559_amd64.deb
(3) ros-melodic-cartographer-rviz-dbgsym_1.0.0-1bionic.20220413.184040_amd64.deb
(4) ros-melodic-cartographer-dbgsym_1.0.0-0bionic.20200801.034034_amd64.deb

安装

dpkg -i *.deb

2.修改配置文件

  1. 给文件操作权限
cd /opt/ros/melodic/share

sudo chmod -R 777 cartographer_ros

  1. 打开demo_revo_lds.launch文件修改如下
<launch>
<param name="/use_sim_time" value="true" />

  <node name="cartographer_node" pkg="cartographer_ros"
      type="cartographer_node" args="
          -configuration_directory $(find cartographer_ros)/configuration_files
          -configuration_basename revo_lds.lua"
      output="screen">
    <remap from="scan" to="/fcbot/laser/scan" />
  </node>

  <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
      type="cartographer_occupancy_grid_node" args="-resolution 0.05" />

  <node name="rviz" pkg="rviz" type="rviz" required="true"
      args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
 
</launch>

  1. 修改 revo_lds.lua 文件

只需修改以下3个参数,若要融合imu 看第3步。

tracking_frame = "base_footprint",
  published_frame = "base_footprint",
  odom_frame = "odom",
  use_odometry = true

3. 设置启动文件

将demo_revo_lds.launch的内容 复制到一个新的launch文件中,里面需要包含雷达的启动文件。
在实际车上还要启动车辆,在gazebo 需要启动gazebo的urdf等文件提供odom 这里不在赘述 (如果要使用imu 和odom融合后的数据需要需要将lua文件修改为 TRAJECTORY_BUILDER_2D.use_imu_data = true,并在launch文件加上)frame id和话题要根据实际修改

可以看到/odom, /laser, /imu话题都指向了cartographer_node 这就是融合了odom和imu
在这里插入图片描述

4.保存地图

为简化保存地图步骤可先编写一个sh文件如下

#!/bin/bash

rosservice call /finish_trajectory 0

sleep 1

rosservice call /write_state "{filename: '${HOME}/maps/mymap.pbstream'}"

sleep 2

rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=${HOME}/maps/mymap -pbstream_filename=${HOME}/maps/mymap.pbstream -resolution=0.05

参考链接

[1] 参考链接1
[2] 参考链接2

<think>嗯,用户的问题是关于在使用Cartographer算法进行时,如何设置RViz中的tracking framepublished frame的。他们提到了使用激光雷达、IMU里程计(odom)这几个传感器。首先,我需要回忆一下Cartographer的工作原理以及RViz中的坐标系设置。 Cartographer算法通常使用传感器数据来构且依赖于多个坐标系之间的变换。根据ROS的坐标系惯例,通常会有几个关键的frame:base_link、odom、map,以及可能的其他传感器frames,比如激光雷达的frame(例如laser_link)IMU的frame(例如imu_link)。 Tracking frame通常是指机器人本体所在的frame,也就是base_link。这是因为Cartographer需要跟踪机器人的运动,而base_link是机器人本体的参考系。Published frame则是指发布到ROS系统中的地的坐标系,通常是map frame。不过,用户可能需要根据具体情况调整这些设置。 接下来,我需要确认Cartographer的配置文件中关于published_frameodom_frame的设置。例如,在Cartographer的Lua配置文件中,通常会指定published_frame为odom,而map_frame为map。这是因为Cartographer在优化过程中会产生一个优化的位姿,通常相对于map frame,而odom frame则是通过里程计数据累积的,可能带有漂移。 在RViz中,当显示地时,Global Options下的Fixed Frame应该设置为map,这样所有的数据都会相对于map frame显示。此外,LaserScan的frame应该设置为激光雷达的frame,比如laser_link。IMU的数据可能直接关联到base_link或者通过静态变换连接到其他frame,这需要根据实际的URDF或TF树来确定。 用户可能遇到的问题包括TF树的不完整或者坐标系之间的转换缺失,比如odom到map的转换是否由Cartographer发布,或者是否有其他节点(比如robot_localization)在发布这些转换。如果odom数据来自轮式里程计,而Cartographer进行SLAM优化,那么odom到map的变换可能由Cartographer发布,这时候published_frame设为odom可能会有问题,可能需要设为base_link,但需要进一步确认。 另外,用户可能没有正确设置Cartographer的配置参数,导致发布的坐标系不符合预期。例如,如果published_frame设为odom,那么Cartographer会将优化后的位姿发布为map到odom的变换,这可能传统的odom到base_link的变换不同。这时候需要确保TF树正确,避免冲突。 总结一下,可能的步骤是: 1. 确认Cartographer配置中的published_frameodom_frame设置。 2. 在RViz中设置Fixed Frame为map。 3. Tracking Frame设为base_link。 4. 确保所有传感器数据的frame正确,通过TF树正确连接。 同时,需要提醒用户检查TF树是否完整,使用tf_echo或RViz的TF显示功能来验证各个坐标系之间的转换是否存在正确。如果有多个odom源,可能需要使用robot_localization包进行融合,确保坐标系的一致。</think>在Cartographer算法中,RViz的`tracking frame``published frame`设置需坐标系变换(TF Tree)传感器配置严格对应。以下是分步说明: --- ### **1. 坐标系关系梳理** - **map**: 全局地坐标系(Cartographer最终优化的地) - **odom**: 里程计坐标系(用于短期定位,存在累积误差) - **base_link**: 机器人本体坐标系(如底盘中心) - **laser_link**: 激光雷达坐标系(需通过TF`base_link`关联) - **imu_link**: IMU坐标系(需通过TF`base_link`关联) --- ### **2. Cartographer配置文件关键参数** 在Lua配置文件中(如`backpack_2d.lua`)需定义: ```lua POSE_GRAPH = { published_frame = "odom", -- 通常设为odom或base_link map_frame = "map", odom_frame = "odom", -- published_frame一致 } ``` --- ### **3. RViz具体设置步骤** #### **(1) Global Options > Fixed Frame** - **设为`map`**:所有数据显示相对于全局地坐标系。 #### **(2) Tracking Frame** - **设为`base_link`**:表示机器人本体的运动跟踪坐标系。 #### **(3) Published Frame** - **设为`map`**:Cartographer最终会将优化后的地发布到`map`坐标系。 --- ### **4. 传感器TF树验证** - 使用`tf_echo`检查坐标系关系: ```bash rosrun tf tf_echo map odom rosrun tf tf_echo odom base_link ``` - **预期输出**:`map`→`odom`的变换由Cartographer发布,`odom`→`base_link`由里程计节点(如轮式编码器)发布。 --- ### **5. 常见问题排查** - **问题1:TF树断裂** - **现象**:RViz提示`No transform from [base_link] to [map]` - **解决**:检查Cartographer是否正常运行,确认`published_frame`配置文件一致。 - **问题2:地漂移** - **现象**:地激光点云不重合 - **解决**:确认IMU里程计数据时间同步,检查传感器外参标定(如`base_link`到`laser_link`的静态TF)。 --- ### **6. 完整配置流程** ``` Cartographer优化位姿 → 发布`map`→`odom`变换 里程计节点发布`odom`→`base_link`变换 传感器数据通过`base_link`→`laser_link`/`imu_link`关联 RViz通过`map`坐标系渲染全局地 ``` 按此配置后,RViz应能正确显示机器人实时位姿(`base_link`)(`map`)的对齐关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值