0. 准备工作
解决一下github克隆慢的问题(网上很多帖子,不能fq的话考虑使用修改hosts)
- 加入谷歌域名
sudo gedit /etc/resolv.conf
- 将原有的nameserver这一行注释,并添加以下两行:
nameserver 8.8.8.8
nameserver 8.8.4.4
-
然后保存并关闭文件。这里是为了以后的
wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
这一行命令做铺垫的。(否则会很慢,这个以后再说) -
安装一些必要的依赖包:
sudo apt-get install -y \
cmake \
g++ \
git \
google-mock \
libboost-all-dev \
libcairo2-dev \
libeigen3-dev \
libgflags-dev \
libgoogle-glog-dev \
liblua5.2-dev \
libsuitesparse-dev \
libwebp-dev \
ninja-build \
protobuf-compiler \
python-sphinx
- 安装protobuf3
安装依赖:
sudo apt-get install autoconf automake libtool curl make g++ unzip
方法一(Ubuntu命令安装)
sudo apt-get install libprotoc-dev
方法二:(源码安装)
-
接下来克隆源码,注意,
git submodule update --init --recursive
这一步克隆子模块必须有,否则后面会报错(报找不到文件的错),当然,之前如果你没有解决github下载慢的问题,这里可能就要慢的绝望了。git clone -b v3.6.0 https://github.com/protocolbuffers/protobuf.git #上述命令表示克隆版本为3.6.0的protobuf源码 cd protobuf git submodule update --init --recursive #该命令表示克隆protobuf的子模块,主要是gtest
-
编译并安装
#进入到克隆的protobuf目录,当然,如果之前就在这个目录下不必再次cd cd protobuf ./autogen.sh ./configure make #如果没有克隆子模块,make check会失败但是可以继续make install,但是使用某些功能时可能会出错 make check sudo make install sudo ldconfig #输出protobuf版本信息则表示安装成功 protoc --version
-
最后,查看安装位置:
which protoc
其默认下载位置为
/usr/local/bin/protoc
这是我们不想要的,因为carto的搜索protoc的路径为/usr/bin/protoc
-
直接copy过去
sudo cp /usr/local/bin/protoc /usr/bin
最终,安装完毕protobuf3.6的版本,并完成位置的调整。
1. ubuntu18.04安装ROS运行环境
见博文 01.初识ROS https://blog.csdn.net/weixin_42214178/article/details/108376667
2. 创建工作空间
mkdir -p ~/sx_ws/src
cd ~/sx_ws/src/
catkin_init_workspace
激活环境变量,并查看当前工作空间路径,确认环境变量是否设置成功:
# 仅当前终端
source ~/sx_ws/devel/setup.bash
# 所有终端
echo "source ~/sx_ws/devel/setup.bash " >> ~/.bashrc
#查看当前功能包的路径
echo $ROS_PACKAGE_PATH
显示如下,说明环境变量设置成功:
图1-1 查看ROS功能包相关的环境变量
3 编译功能包
3.1 一些功能包的编译
把给的src文件内的功能包全部复制到本地工作空间的src文件夹下:
~/sx_ws/src
图1-2 放置好功能包后的工作空间内的src文件夹
由于工作需要,暂时将以下文件移出src文件:
图1-3 暂时不编译的功能包
现在,开始编译,由于是在新的主机(中控机)上进行操作,必然会缺少许多相关的依赖,在编译过程中会报错,需要通过报错消息安装相关依赖,直到编译成功:
报错1:
This workspace contains non-catkin packages in it
图1-4 报错1
解决:该工作空间包含了非catkin类型的package,并且catkin不能编译一个“非同步的工作空间”:
'catkin_make_isolated' command instead
使用‘catkin_make_isolated
’代替‘catkin_make
’进行编译
报错2:
Failed to process package ‘ceres-solver’
解决:安装 ‘ceres-solver’
- 先安装 'ceres-solver’依赖包:
# CMake
sudo apt-get install cmake
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev
# BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3
sudo apt-get install libeigen3-dev
# SuiteSparse and CXSparse (optional)
# - If you want to build Ceres as a *static* library (the default)
# you can use the SuiteSparse package in the main Ubuntu package
# repository:
sudo apt-get install libsuitesparse-dev
# - However, if you want to build Ceres as a *shared* library, you must
# add the following PPA:
sudo add-apt-repository ppa:bzindovic/suitesparse-bugfix-1319687
sudo apt-get update
sudo apt-get install libsuitesparse-dev
- 下载最新版本的ceres-solver,具体参考官网安装教程。
tar zxf ceres-solver-1.14.0.tar.gz
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-1.14.0
make -j4
make test
# Optionally install Ceres, it can also be exported using CMake which
# allows Ceres to be used without requiring installation, see the documentation
# for the EXPORT_BUILD_DIR option for more information.
make install
报错3:
Could not find a package configuration file provided by
“jsk_recognition_msgs” with any of the following names。
解决:缺少相应的功能包,类似问题都安装缺少的功能包。
图1-5 报错3
sudo apt install ros-melodic-jsk-recognition-msgs
报错4:
在处理时有错误发生:
/var/cache/apt/archives/ros-melodic-libphidget21_0.7.10-1bionic.20200801.013518_amd64.deb
/var/cache/apt/archives/ros-melodic-lvr2_20.7.1-1bionic.20200710.132440_amd64.deb
/var/cache/apt/archives/ros-melodic-mrpt2_2.0.4-1bionic.20200622.141446_amd64.deb
解决:
-
更名
mv /var/lib/dpkg/info /var/lib/dpkg/info_old
-
新建
mkdir /var/lib/dpkg/info
-
重新安装文件:
sudo apt --fix-broken install
-
将新生成的软件包配置文件覆盖旧的文件:
mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old/
-
恢复软件包配置文件里表
rm -rf /var/lib/dpkg/info mv /var/lib/dpkg/info_old /var/lib/dpkg/info
3.2 cartographer的编译安装
因为未知原因,现在先在新建的工作空间中编译安装cartographer,然后将其他功能包放入src
文件夹,并编译。
- 安装工具:
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
- 初始化工作空间:
cd ~/sx_ws/
wstool init src
- 加入cartographer_ros.rosinstall并更新依赖
wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
wstool update -t src
报错:ERROR in config: Error processing 'ceres-solver' : [ceres-solver] Checkout of https://ceres-solver.googlesource.com/ceres-solver.git version 1.13.0 into /home/lxr/sx_ws/src/ceres-solver failed.
图1-5 更新报错
解决:
如果你挂了 VPN ,一般不会出错。
如果你没有翻墙,会出现无法下载 ceres-solver 的问题,我们可以修改其下载地址:
1) 修改 <工作空间>/src/.rosinstall
文件
2) 修改 <工作空间>/src/cartographter_ros/cartographter_ros.rosinstall
文件
将两个文件中的 ceres-solver 路径改为从 github 下载
https://github.com/ceres-solver/ceres-solver.git
以上是其他博主的解决方案,实测只需修改google_carto_ws/src/.rosinstall
文件,即可更新完成。
使用快捷键“Ctrl + h”显示隐藏文件。
我的修改后的<工作空间>/src/.rosinstall 文件。
# THIS IS AN AUTOGENERATED FILE, LAST GENERATED USING wstool ON 2020-09-09
- git:
local-name: cartographer
uri: https://github.com/cartographer-project/cartographer.git
version: 1.0.0
- git:
local-name: cartographer_ros
uri: https://github.com/cartographer-project/cartographer_ros.git
version: 1.0.0
- git:
local-name: ceres-solver
# 修改部分
uri: https://github.com/ceres-solver/ceres-solver.git
version: 1.13.0
- 安装依赖并下载cartographer相关功能包
#
#sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
- 编译并安装
catkin_make_isolated --install --use-ninja
echo "source ~/sxc_ws/devel/setup.bash" >> ~/.bashrc
4.总结
先编译安装cartographer功能包,然后将其余功能包放入src文件夹,进行编译。如果报错,可以考虑删除除了src文件夹以外的所有文件,然后再次进行整个工作空间的编译。
参考文件
[1] Ceres Solver安装与入门使用
[2] ROS环境下部分编译异常解决方案
[3] 官网安装教程
[4] 问题解决方案2-------------ros的 Cartographer,ninja,ceres-solver,cartographer_ros安装及其问题,附上最好的安装方法(亲测有效)
[5] dpkg 处理 xx 时出错
[6] Cartographer安装教程及踩坑实录