环境: ubuntu 20.04
设备: 2D激光雷达(思岚s2)
由于是ubuntu20.04安装的ros为noetic所以cartographer不能通过apt install来安装
1. 安装cartographer
其中ceres版本不能太高,此处用的是1.14
安装ceres库
在终端输入命令
sudo apt-get install libceres-dev
1.安装基本工具(wstool,rosdep,ninja)以编译和运行cartographer
在终端输入指令:
sudo apt-get update sudo apt-get install -y python3-wstool python3-rosdep ninja-build stow
2.创建cartographer的工作空间
在终端输入指令:(catkin_ws是文件夹名称,可以自行更改,但更改之后后续所有catkin_ws均需要替换成更改后的名字)
mkdir catkin_ws cd catkin_ws wstool init src wstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall wstool update -t src
3.安装cartographer_ros的依赖项
先使用rosdep安装所需的软件包。此处我们之前已经运行过 sudo rosdep init,故这里将显示错误,可以忽略(因为初始化的文件已经存在,无需再次初始化。如果不放心可以回到一、3的5)的d)错误3删除初始化文件)。
sudo rosdep init rosdep update rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
4.安装必备库
老伙伴们都知道,cartographer需要abseil,proto和ceres库。ubuntu20.04下的cartographer已经自带了这些库的安装启动文件,或者集成到了apt-get install可以直接获取的库中。接下来我们安装这些库:
1)安装abseil-cpp库
在终端输入命令:
cd catkin_ws src/cartographer/scripts/install_abseil.sh
如果提示版本冲突,请输入以下指令先删除旧版本:
sudo apt-get remove ros-${ROS_DISTRO}-abseil-cpp
然后再次执行src/cartographer/scripts/install_abseil.sh
成功后编译生成并安装
catkin_make_isolated --install --use-ninja
2)安装protobuf库
在终端输入命令:
cd catkin_ws src/cartographer/scripts/install_proto3.sh
3)安装lua
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz tar zxf lua-5.3.5.tar.gz cd lua-5.3.5 make linux test sudo make install export PATH=$PATH:/opt/software/lua-5.3.5/src
2. 修改相应配置
a 修改雷达的frame_id:
src/cartographer_ros/cartographer_ros/configuration_files目录下的revo_lds.lua文件,修改好的文件如下所示(laser为自己的雷达的frame_id)
tracking_frame = "laser", published_frame = "laser",
b 接下来就对 src/cartographer_ros/cartographer_ros/launch目录下的demo_revo_lds.launch 文件进行修改(下面是修改完后的代码)
<launch>
<param name="/use_sim_time" value="false" />
<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="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>
<remap from="scan" to="scan" />
修改内容为: <remap from="scan" to="scan" />
3. 启动雷达和建图
启动雷达:
roslaunch rplidar_ros view_rplidar_s2.launch
启动cartographer中结点建图:
source install_isolated/setup.bash
catkin_make_isolated --install --use-ninja (cartographer中每次修改完内容都需要运行)
roslaunch cartographer_ros demo_revo_lds.launch
4. 结果图
参考:谷歌cartographer算法手持二维激光雷达建图(不使用里程计及IMU)_cartographer雷达建图并显示过程解析_初~雨的博客-CSDN博客