cartographer安装记录(25/11-20)

小白写在最前面,看网上的教程之前请一定一定对应自己系统的版本还有架构!!!也就是以下3点。
###注意事项
1.用如下命令查询: lsb_release -a
我使用的是BXNUC10I7FNH,Ubuntu 20.04.1 LTS(focal);
2.roscore 就会看到自己ros版本,我的是 noetic 。弄潮儿的心态把系统装到了时代的前沿(2020.10)结果,要安装cartographer的时候发现,人家不支持noetic。 11.24,发现cartographer支持ubantu20了,然鹅我刚装好18…造化弄人阿,但是为了更好的适应性 建议大家还是18吧
ros官网自选超市还是听人性的http://wiki.ros.org/Distributions
对照下图按需自取叭~
cartographer安装记录(25/11-20)_第1张图片cartographer安装记录(25/11-20)_第2张图片由于kinect版本维护到2021年4月,所以我们就选择melodic辣(到2023年)注意对应的是bionic版本ubantu,也就是18.04(不同版本ubantu有数字代号和不同英文名字的)。
3.架构:本外行据个例子吧,jetson nano 就是arm架构的;x86_64,x64,AMD64基本上是同一个东西,我们现在用的intel/amd的桌面级CPU基本上都是x86_64
命令:uname -a

###以下换到笔记本(ubantu18.04,ros_kinect)安装ros(melodic)
->(1)问题:安装之后 运行source ~/.bashrc会提示“ROS_DISTRO was set to kinect before. …”
解决:sudo gedit ~/.bashrc 将kinect那条删掉。
cd opt /ros
sudo rm -rf kinect
继续 source ~/.bashrc
检验 roscore 运行的就是melodic辣~
###下面安装cartographer
总上目前的环境是ubantu18.04,ros melodic
1.absl库安装.
参考链接:

https://www.cnblogs.com/Baron-Lu/p/12468136.html

引申(slam14笔记):linux中库文件分为静态库和共享库,.a是静态库,.so是共享库,二者的区别是静态库每次被调用都会生成一个副本,共享库则只有一个副本.
使用cmake 生成库的方法:
-----静态库----
a.首先有一个A.cpp文件,会写有这个库的函数(比如是 void win()),但是他没与main函数,也就是说这个库没有可执行文件(好一个工具人…).
b.在CMakeList.txt 中添加
add_library( B A.cpp )
也就是要告诉cmake :我们要把这个文件编译成一个叫做B的库
c.使用cmake 编译工程,操作如下:
cd build
cmake …
make
这时文件夹就会生成一个libB.a的文件,这就是我们要的静态库.
----共享库----
只有上面的b步骤不一样:
a.
b’.add_library(B_shared SHARED A.cpp)
c.
生成共享库
----以上生成库----
调用库的方法:
->库的函数被写到C.h文件中以说明库的内容(void win()),我们使用的时候只要拿到头文件和库文件就可以调用
->比如我们现在有一个D.cpp要调用刚才的库
D的形式大致如下:
#include “C.h”
int main (int argc,char**argv){
win();
return 0;
}
->在CMakeList.txt中添加可执行程序的生成命令,链接到刚才的库上.
CMakeList.txt:
add_executable( E D.cpp)
target_link_libraries( E m_shared )
这两行的意思就是:
E是这段程序的名字, D.cpp是可执行文件.
第二句就是链接,这样E程序就能顺利使用m_shared中的代码.
----以上调用库的方法----

2.在cartographer_ws中运行sudo rosdep update 的时候报错
参考链接:https://www.cnblogs.com/jasonchan1202/p/12929308.html 亲测试真的好用!!
3.修改后就可以编译了
4.快快试试安装成果吧
参考https://www.cnblogs.com/hitcm/p/5939507.html

roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=这里是文件到路径/cartographer_paper_deutsches_museum.bag

首先不用考虑你的传感器数据,下载官方2D和3D地图数据 下面是我测试2D的建图效果,哭啊,终于,虽然还只是刚刚开始,快乐嘻嘻.
cartographer安装记录(25/11-20)_第3张图片

–22222.运行命令: rosdep install --from-paths src --ignore-src --rosdistro=${R1OS_DISTRO} -y
出现的问题:Error(s) in package ‘/home/jyyang/catkin_ws/src/protobuf-master/php/ext/google/protobuf/package.xml’:
Error(s):

  • The “package” tag must not have the following attributes: packagerversion, version
  • The manifest of package “protobuf” (with format version 1) must not contain the following tags: date, channel, dependencies, providesextension, notes, time, contents, extsrcrelease, lead, changelog, summary, stability
  • The “version” tag must not contain the following children: release, api
  • The “license” tag must not have the following attributes: uri
    参考链接:https://answers.ros.org/question/350317/problem-during-the-installation-of-cartographer-in-rosdep/
    就是protobuf不应该安装在工作空间下。

重新记录安装过程
1.安装依赖
$sudo apt-get update
$sudo apt-get install -y \ clang \ cmake \ g++ \ git \ google-mock \ libboost-all-dev \ libcairo2-dev \ libcurl4-openssl-dev \ libeigen3-dev \ libgflags-dev \ libgoogle-glog-dev \ liblua5.2-dev \ libsuitesparse-dev \ lsb-release \ ninja-build \ stow
2.ceres依赖
$lsb_release -sc
如果是“focal”或者"buster"
则 $sudo apt-get install -y python3-sphinx libgmock-dev libceres-dev protobuf-compiler
否则 $sudo apt-get install -y python-sphinx
如是bionic,则执行下面命令
$sudo apt-get install -y libceres-dev
4.建立一个cartographer_ws工作空间,建立src
下载cartographer,cartographer_ros.cere-slover
我遇到好多坑,第二天把之前的都删了重新按照这位博主的竟然异常顺利我是第二天爆顺利的链接包含了上面三个文件;
cartographer安装记录(25/11-20)_第4张图片分别进到1.3文件夹中

mkdir build 
cd build 
cmake ..
make -j8
sudo make install

下面记录的是我遇到爆好用链接之前遇到的问题,而且我用自己之前下的文件就会存在各种时间戳啊的问题。下面内容仅供参考吧。

关于时间戳问题
在这里插入图片描述解决:
$find ./ -type f |xargs touch
然后再编译就好了
3.protobuf安装
参考:参考链接
直接把下载的protobuf包放到这个路径

cartographer安装记录(25/11-20)_第5张图片再把googletest换掉,原先的不能用
我下载的是这个版本,同样因为时间关系不贴链接啦,找不到留言,googletest-release-1.10.0.zip
把下载的文件夹解压缩,改名字为googletest替换下面路径的文件
cartographer安装记录(25/11-20)_第6张图片
下面是没有替换时候的报错
在这里插入图片描述然后就是编译
在protobuf文件夹中打开终端执行一下命令
mkdir build
cd build
cmake -G Ninja
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DCMAKE_BUILD_TYPE=Release
-Dprotobuf_BUILD_TESTS=OFF
…/cmake
ninja
sudo ninja install

mkdir build
cd build
cmake -G Ninja \
  -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -Dprotobuf_BUILD_TESTS=OFF \
  ../cmake
ninja
sudo ninja install

install之后原先的包就没有用了,已经安装到系统中。

//检查当前版本
protoc --version

在这里插入图片描述安装完成。
安装完成后按照上面的链接继续

3.1protobuf 版本冲突

https://blog.csdn.net/u014454538/article/details/89005934

4.在编译并且也能够成功仿真后,编译rs_sdk报错
:*/home/jyy/cartographer_ws/src/rslidar_sdk/src/msg/ros_msg_translator.h:41:10: fatal error: pcl_ros/transforms.h: 没有那个文件或目录
#include
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.*

 #include 
          ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

关于cartographer 的编译要注意的是:
新建的工作空间一共有三个包,
cartographer 和cere都相当于库,我们在这两个包里面分别单独编译

//cartographer的安装
mkdir build 
cd build
cmake .. -G Ninja
ninja 
ninja test //可选
sudo ninja install
//cere的安装
mkdir build 
cd build 
cmake ..
make 
make test //可选
sudo make install 

最后在终端

//回到这个状态!   :~$
cd 
//
cd cartographer_ws
wstool init src
source devel_isolated/setup.bash 
catkin_make_isolated  //而不是catkin_make 

将cartographer移植到自己的车上

你可能感兴趣的:(linux,ubuntu)