Cartographer安装、建图与定位 (Ubuntu20.04+ROS Noetic)

打印 上一主题 下一主题

主题 693|帖子 693|积分 2079

在Ubuntu20.04体系与ROS Noetic下实现Cartographer的安装、建图与定位(纯定位)。
  
  

1. 安装

在ROS安装时需要初始化rosdep,这一步网上有很多办理方法(科学上网或修改相干代码中的资源路径)。
本篇安装Cartographer时将其需要的依靠包分开安装,包罗Eigen3.3.7、Ceres2.0.0、Protobuf>=3.0.0、Abseil。其中Eigen在Ubuntu20.04中的默认版本为3.3.7,不需要别的安装。
安装依靠项:
  1. sudo apt update
  2. sudo apt install -y automake google-mock libatlas-base-dev libboost-all-dev libeigen3-dev libgflags-dev libgmock-dev libgoogle-glog-dev liblapack-dev liblua5.2-dev libpcl-dev libprotobuf-dev libsuitesparse-dev libwebp-dev ninja-build pcl-tools protobuf-compiler python3-sphinx ros-noetic-tf2-eigen stow
复制代码
1.1 安装Ceres2.0.0

Ceres的版本需要与Eigen3.3.7的版本匹配,这里选择安装Ceres2.0.0:
  1. git clone https://github.com/ceres-solver/ceres-solver.git
  2. cd ceres-solver/
  3. git checkout 0ffb6db49cec52566f53ab66be7a19970ddc562b                # 将下载的ceres-solver的版本回退到2.0.0
  4. mkdir build
  5. cd build/
  6. cmake ..
  7. make -j8
  8. sudo make install
复制代码
1.2 安装Protobuf>=3.0.0

这里选择安装Protobuf3.21.1:
  1. git clone https://github.com/protocolbuffers/protobuf.git
  2. cd protobuf/
  3. git checkout e73ed1630fdec85d7fb513c166629ed49cd4eb18                # 将下载的protobuf的版本回退到3.21.1
  4. ./autogen.sh
  5. ./configure
  6. make -j8
  7. sudo make install
  8. sudo ldconfig
复制代码
1.3 安装Abseil

  1. git clone https://github.com/abseil/abseil-cpp.git
  2. cd abseil-cpp/
  3. git checkout 215105818dfde3174fe799600bb0f3cae233d0bf
  4. mkdir build
  5. cd build/
  6. cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl ..
  7. ninja
  8. sudo ninja install
  9. cd /usr/local/stow
  10. sudo stow absl
复制代码
1.4 安装Cartographer

  1. mkdir cartographer
  2. cd cartographer/
  3. mkdir src
  4. cd src/
  5. git clone https://github.com/cartographer-project/cartographer.git
  6. git clone https://github.com/cartographer-project/cartographer_ros.git
  7. cd ..
  8. catkin_make_isolated        # 或 catkin_make_isolated --install --use-ninja
复制代码

2. 建图

使用官方提供的示例bag文件进行建图。由于我的后续工作只会用到2D建图,因此这里只测试官方的2D示例:
  1. wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
  2. roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
复制代码
建图完毕后保存舆图:
  1. rosservice call /finish_trajectory 0
  2. rosservice call /write_state "filename: '<绝对路径>/<地图名字>.pbstream' "
  3. rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=<绝对路径>/<地图名字> -pbstream_filename=<绝对路径>/<地图名字>.pbstream -resolution=0.05
复制代码
成功保存后会在对应路径下得到.pbstream、.pgm和.yaml三种格式的舆图文件。

3. 定位

进行定位需要加载之前建图后保存的舆图:
  1. roslaunch cartographer_ros demo_backpack_2d_localization.launch load_state_filename:=<绝对路径>/<地图名字>.pbstream bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
复制代码
但是,Cartographer在定位的同时仍在更新舆图,若想要实现纯定位,即停止舆图的更新,还需要在实行定位的launch文件(即demo_backpack_2d_localization.launch)中进行如下修改:
  1.   <!-- <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
  2.     type="cartographer_occupancy_grid_node" args="-resolution 0.05" /> -->
  3.   <node name="map_server" pkg="map_server" type="map_server"
  4.     args="<绝对路径>/<地图名字>.yaml" />
复制代码
需要删去cartographer_occupancy_grid_node节点,并添加map_server节点提供舆图信息。

4. 用自己的雷达和IMU建图和定位

需要根据自己的雷达和IMU发布的topic及对应的frame_id重写launch文件和对应的lua配置文件,涉及雷达和IMU的相干参数及在机器人上的安装位置。
可以参考上面官方示例里用到的各文件,网络上已经有很多对文件中各参数的解释。或是参考我的相干文件(使用Livox Mid-360雷达及其内置的IMU)。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表