一、记录从软件包更新依赖的方法
该方式适用于你在catkin_make时跑出各种神奇 not find 的问题,使用此魔法会有意想不到的效果。(当然,可能有些问题并不是缺少依赖导致的)
使用该方法前请确保 rosdep 已经初始化并可以更新,即:
sudo rosdep init
rosdep update
============================= 完成后即可使用此方法 ==========================
rosdep install --from-paths src --ignore-src -r -y
二、rosdep无法init与update问题
这个可以说是困扰了我很久,一直在使用国内的自己搭的rosdep库,但效果还是很差,经常can not …………
目前比较好的解决办法一个是Robot实验室所搭的rosdep国内站(稳定,今天试试鱼香的)
不得不说采用鱼香ROS的工具不仅解决rosdep问题,ros自己都懒得装了,perfect!!!
wget http://fishros.com/install -O fishros && bash fishros
选择3,等待配置完成后自己就可以试一试,简直 perfect !!!
sudo rosdepc init
rosdepc update
============================分割线===============================
三、cartographer源码安装(重头戏来了)
(重要前提) 首先,你需要保证你已经完成以下几点:
1-已连接好你的网络
2-已安装好你的ROS对应版本
3-按照(一、或者二、)能够使用rosdep或rosdepc
================================ 开始安装 ====================================
(1)请访问cartographer官方网站(建议在使用cartographer前仔细阅读,非常又用),跳转至 Compiling Cartographer ROS——>>>Building & Installation
(2)打开终端,Ctrl+T,新建cartographer的工作空间
mkdir cartographer_ws
(3)打开新终端,Ctrl+T进行以下操作,依次执行
Tips:注意看官网上面的提示,因为我是melodic 所以为python 而非python
sudo apt update
sudo apt install -y python-wstool python-rosdep ninja-build stow -y
(4) 返回上一个终端 进入创建好的 cartographer_ws
=========================2022.10.29更新(重复命令导致的错误)====================
===============依次执行以下命令================
wstool init src
============================================
wstool merge -t src https://ghproxy.com/https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall
(5) 打开cartographer_ws/src目录,点击显示隐藏文件
(6) 打开.rosinstall,将其中两个uri依次替换为以下两个,并保存
uri: https://ghproxy.com/https://github.com/cartographer-project/cartographer.git
=================================================================================
uri: https://ghproxy.com/https://github.com/cartographer-project/cartographer_ros.git
(7) 在下列终端下执行以下命令
wstool update -t src
(8) 等待下载完成后,执行以下命令
Tips:其中rosdep或rosdepc哪个能用就用哪个,melodic根据自己的ROS版本进行更改
sudo rosdepc init
rosdepc update
rosdepc install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
==========================================================================
我的版本为melodic 则为
rosdepc install --from-paths src --ignore-src --rosdistro=melodic -y
==========================================================================
(9) 运行最后命令时,会抛出一个ERROR如下
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
cartographer: [libabsl-dev] defined as "not available" for OS version [bionic]
解决方法: 打开cartographer_ws/src/cartographer/package.xml
将第46行 <depend>libabsl-dev</depend> 进行注释
之后重新执行最后命令出现#All required rosdeps installed successfully
(10) 清理 abseil-cpp 防止冲突问题,执行以下命令(为防止有人是重装,执行一下卸载)
sudo apt remove ros-${ROS_DISTRO}-abseil-cpp
==============================================================
我的是melodic 所以第一个替换为
sudo apt remove ros-melodic-abseil-cpp
(11) 安装 abseil-cpp ,首先打开以下路径文件
cartographer_ws/src/cartographer/scripts/install_abseil.sh
将git clone 地址修改为
git clone https://ghproxy.com/https://github.com/abseil/abseil-cpp.git
执行脚步命令安装abseil-cpp
src/cartographer/scripts/install_abseil.sh
(12) 进行编译,时间比较长,请耐心等待
catkin_make_isolated --install --use-ninja
(13) 将 cartographer_ws 添加到环境变量中
echo 'source ~/cartographer_ws/install_isolated/setup.bash' >> ~/.bashrc
source ~/.bashrc
至此,cartographer 完美安装
======================分割线=====================
四、官方demo验证(建图/定位/保存地图)
(网速快的话可以玩一下3D的,慢的话2Ddemo跑一下就行了)
4.1 -建图
4.2.1、2D-Demo与结果
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
4.2.2、3D-Demo与结果
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-04-05-14-14-00.bag
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag
4.2 -先验地图下定位
1-定位demo下载(两个)
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/b2-2016-04-05-14-44-52.bag
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/b2-2016-04-27-12-31-41.bag
2-构建先验地图(此处建图完成后直接Ctrl+C结束即可,保存地图指令已写入)
roslaunch cartographer_ros offline_backpack_2d.launch bag_filenames:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag
3-定位验证(先验地图保存路径为Downloads/b2-2016-04-05-14-44-52.bag.pbstream)
roslaunch cartographer_ros demo_backpack_2d_localization.launch \
load_state_filename:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag.pbstream \
bag_filename:=${HOME}/Downloads/b2-2016-04-27-12-31-41.bag
4.3-保存地图说明
首先停止建图
rosservice call /finish_trajectory 0
保存地图至pbstream格式(自行对比改文件路径与文件名称)
rosservice call /write_state "{filename: '${HOME}/cart_ws/src/Mapping/carto_map.pbstream'}"
rosservice call /write_state "{filename: '${HOME}/文件路径/文件名称.pbstream'}"
将pbstream格式地图转为pgm与yaml
rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=${HOME}/cart_ws/src/Mapping/carto_map -pbstream_filename=${HOME}/cart_ws/src/Mapping/carto_map.pbstream -resolution=0.02
rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem${HOME}/文件路径/文件名称 -pbstream_filename=${HOME}/文件路径/文件名称.pbstream -resolution=分辨率值
4.4-保存地图脚本
一个一个命令太麻烦了,所以直接写了一个简陋脚本,自取,赋权执行等问题请移步自己搜一下。提前建一个mapping,保存图片名字自行更改。
==================================================================
carto_map01此名称自行更改,但需全文一致
==================================================================
#!/bin/bash
rosservice call /finish_trajectory 0
sleep 2
echo "finishing successful trajectory 0"
sleep 1
rosservice call /warite_state "{filename:'${HOME}/mapping/carto_map01.pbstream'}"
sleep 2
echo "writing filename carto_map01 successful"
sleep 1
rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=${HOME}/mapping/carto_map01 -pbstream_filename=${HOME}/mapping/carto_map01.pbstream -resolution=0.02
sleep 1
echo"successful return maping from pbstream to pgm%yaml"
echo "your pgm resolution is 0.02"
不积跬步无以至千里,不积小流无以成江河 -------------------------------1:56