0. 前言
最近群里有些老哥在问cartographer配置的相关问题,将我以前自己记录的文件测试后发现竟然已经失效,其原因在于cartographer官网对程序又进行了一次升级,以前的部分操作已经无法适用,这里在此记录一下。
1. 环境配置(melodic)
安装依赖包
sudo apt-get update
sudo apt-get install -y google-mock libboost-all-dev libeigen3-dev libgflags-dev libgoogle-glog-dev liblua5.2-dev libprotobuf-dev libsuitesparse-dev libwebp-dev ninja-build protobuf-compiler python-sphinx ros-melodic-tf2-eigen libatlas-base-dev libsuitesparse-dev liblapack-dev libpcl-dev pcl-tools automake
首先安装ceres solver
cd ~/Download
git clone https://github.com/Tengyun-Mo/ceres-solver.git
cd ceres-solver
mkdir build
cd build
cmake ..
make -j4
sudo make install
(默认路径为:usr/local/include)
安装protobuf 3.0
git clone https://github.com/google/protobuf.git
cd protobuf
git checkout v3.6.1
mkdir build
./autogen.sh
./configure
make -j2
sudo make install
sudo ldconfig
下面是作者在安装protobuf中遇到的一个问题
安装 cartographer
git clone https://github.com/googlecartographer/cartographer.git
cd cartographer
mkdir build
cd build
cmake ..
make -j4
sudo make install
如果出现absl找不到的情况:
git clone https://github.com/abseil/abseil-cppmkdir .git
打开abseil-cpp包里的cmakelists添加c++11支持
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -std=c++11")
build && cd build
cmake .. -DBUILD_SHARED_LIBS=ON
make
sudo make install
更改cartographer的CMakeList.txt文件(2处)和cartographer-config.cmake.in文件(1处)
CMakeList.txt 第1处:
find_package(Abseil REQUIRED) --> find_package(absl REQUIRED)
CMakeList.txt 第2处:#默认的库文件是 standalone_absl
target_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY}
absl::base
absl::synchronization
absl::strings
absl::flat_hash_map
absl::numeric
absl::flags)
然后重新编译即可
cartographer-config.cmake.in 1处:
find_package(Abseil ${QUIET_OR_REQUIRED_OPTION}) Abseil 改为 absl
安装cartographer_ros
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/googlecartographer/cartographer_ros.git
cartographer_ros的CMakeList.txt,2处
cartographer_ros 和 cartographer_rviz的改法均一致:
find_package(Abseil REQUIRED) --> find_package(absl REQUIRED)
然后重新编译即可。
catkin_make
如果出现未定义应用,请注意Ceres和prtobuf 版本,并在Cmakelists里面修改
测试
运行程序 roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}``/Downloads/cartographer_paper_deutsches_museum``.bag
这里给出网络上的一键安装方法:https://gitee.com/yunxiangluo/Ubuntu_cartographer_script,通过./install.sh
即可一键安装。
2. navigation
sudo apt-get install ros-kinetic-serial
sudo apt-get install ros-kinetic-map-server
sudo apt-get install ros-kinetic-amcl
sudo apt-get install ros-kinetic-navigation
实验仿真
catkin_make_isolated —install —use-ninja (编译lua文件信息)
roslaunch mbot_gazebo mecanum_robot_display.launch (gazebo仿真,需要自己写xacro,注意运动方向、transmission、gazebo控件等)
使用urdf_to_graphiz mecanum_robot.urdf来检查
roslaunch cartographer_ros cartographer_demo_smart.launch (cartographer建图,需要自己写lua)
roslaunch mbot_teleop mbot_teleop.launch (控制)
navigation 导航
首先打开上面的程序开始建图,在rviz跑出地图后 然后需要保存地图
不再接受进一步数据
rosservice call /finish_trajectory 0
序列化保存其当前状态
rosservice call /write_state "{filename: '${HOME}/Downloads/XXX.pbstream'}"
将pbstream转换为pgm和yaml
rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=${HOME}/Downloads/cartographer_map -pbstream_filename=${HOME}/Downloads/XXX.pbstream -resolution=0.05
roslaunch mbot_gazebo mecanum_robot_display.launch
roslaunch mbot_navigation cartographer_nav_cloister_demo.launch
评论(2)
您还未登录,请登录后发表或查看评论