ubuntu22.04安装cartograph

源码安装

在我们的项目中,需要在ubuntu22.04下源码安装cartograph.可以按照以下步骤进行.

git clone git@github.com:ros2/cartographer.git
git clone git@github.com:ros2/cartographer_ros.git

# 安装依赖项 absl c++扩展库,参考下install_abseil.sh里使用的absl版本
git clone git@github.com:abseil/abseil-cpp.git
cd abseil-cpp
git checkout 215105818dfde3174fe799600bb0f3cae233d0bf
cd build
cmake -G Ninja \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
  -DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl \
  ..
ninja
sudo ninja install
cd /usr/local/stow
sudo stow absl

# 安装 ceres 非线性优化库
sudo apt install libceres-dev

# 安装lua 脚本语言库,提供配置文件解析
sudo apt install liblua5.3-dev

# 安装protobuf 数据序列化开发库
sudo apt install protobuf-compiler libprotobuf-dev

# 安装地图可视化库,支持轨迹绘制以及地图可视化
sudo apt install libcairo2-dev

# 安装boost C++ 库集合
sudo apt install libboost-all-dev

# 安装 Eigen3 线性代数库
sudo apt install libeigen3-dev

# 编译cartographer_ros
colcon build --packages-up-to cartographer_ros

# rviz插件我们直接使用apt安装
sudo apt install ros-humble-nav2-rviz-plugins
sudo apt install ros-humble-cartographer-rviz

保存地图

使用Cartographer进行建图时,可以将建图结果保存下来,我们这里可以采用ROS2自带的保存地图工具nav2_map_server.

建图完成后,我们可以将地图保存到本地,保存的地图格式为一个pgm和一个yaml文件.

安装工具包

# 安装 nav2_map_server
sudo apt install ros-humble-nav2-map-server

保存地图

# 保存地图
ros2 run nav2_map_server map_saver_cli -t map -f myHome
# 执行之后,会将地图保存到myHome.pgm 和myHome.yaml文件中.

生成的pgm是地图的数据文件,yaml是生成的地图的描述文件. -t后是需要保存地图的topic名称, topic类型为nav_msgs/OccupancyGrid. -f后为保存的地图名称.

发布保存的地图

发布地图

navigation2 采用 lifecycle 生命周期管理器节点对各模块进行管理.

# 启动map_server
ros2 run nav2_map_server map_server --ros-args -p yaml_filename:=myHome.yaml
# 加载地图
ros2 lifecycle set /map_server configure
# 发布地图
ros2 lifecycle set /map_server activate