北京上地做网站,注册新公司名称查询,广州建设执业资格注册中心网站,免费设计网站logo【 声明#xff1a;版权所有#xff0c;欢迎转载#xff0c;请勿用于商业用途。 联系信箱#xff1a;feixiaoxing 163.com】 实际使用中#xff0c;树莓派4b是非常好的一个基础平台。本身板子价格也不是很贵#xff0c;建议大家多多使用。之前关于vslam#xff0c;也就是…【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】 实际使用中树莓派4b是非常好的一个基础平台。本身板子价格也不是很贵建议大家多多使用。之前关于vslam也就是视觉slam有一本书很火叫《视觉slam十四讲》。它里面就谈到了很多第三方库的安装这些库其实都是可以在树莓派4b上面运行的。这样有了4b这样的开发板大家就不需要反复打开和关闭虚拟机来运行linux了。 1、安装cmake cmake本身树莓派4b是不带的但是slam的一些第三方库编译需要它所以直接sudo安装
sudo apt-get install cmake 2、《视觉slam十四讲》github代码 很多同学只看书不实操这是不对的。针对书中代码部分是要反复研习的。好在作者提供了相应的github地址
https://github.com/gaoxiang12/slambook 3、安装eigen库 eigen是很基础的矩阵库里面的加、减、乘、除、求逆、转置我们都会用到。这里也是同样的直接用sudo安装的
sudo apt-get install libeigen3-dev 安装好之后就可以用一个十四讲里面的demo代码验证一下
g eigenMatrix.cpp -I/usr/include/eigen3 -g -o eigenMatrix 4、安装sophus库 十四讲里面的sophus库是非模板类我们使用的sophus库是基于模板类的就是这一点小小的区别。代码下载的地址如下所示选择默认分支即可
https://github.com/strasdat/Sophus 有了代码下面就可以准备编译了
(a) 删除CMakeLists.txt中的-Werror
(b) sudo apt-get install libfmt-dev
(b) make build, cd build, cmake ..
(c) make
(d) sudo make install 编译过程不算复杂就是在4b上面编译的时间比较长一点。最后因为我们安装的sophus库是基于模板类的所以只能从其他地方找demo代码编译比如这里
https://www.cnblogs.com/xkbl-blogs/p/14458669.html 编译的话可以直接用g编译
g demo.cpp -I/usr/include/eigen3 -I/usr/local/include -g -o demo -lfmt 本身sophus库是用来解决李群、李代数的问题。而李群、李代数又是为了解决矩阵求导的问题大家把它当成一个数学工具记住结论并且会解决问题就好。至于推导的过程暂时看不懂也没有关系。 当然如果大家还是想使用之前十四讲sophus的demo测试代码其实修改下就好了
#include iostream
#include cmath
#include Eigen/Core
#include Eigen/Geometry
#include sophus/se3.hppusing namespace std;
using namespace Eigen;/// 本程序演示sophus的基本用法int main(int argc, char **argv) {// 沿Z轴转90度的旋转矩阵Matrix3d R AngleAxisd(M_PI / 2, Vector3d(0, 0, 1)).toRotationMatrix();// 或者四元数Quaterniond q(R);Sophus::SO3d SO3_R(R); // Sophus::SO3d可以直接从旋转矩阵构造Sophus::SO3d SO3_q(q); // 也可以通过四元数构造// 二者是等价的cout SO(3) from matrix:\n SO3_R.matrix() endl;cout SO(3) from quaternion:\n SO3_q.matrix() endl;cout they are equal endl;// 使用对数映射获得它的李代数Vector3d so3 SO3_R.log();cout so3 so3.transpose() endl;// hat 为向量到反对称矩阵cout so3 hat\n Sophus::SO3d::hat(so3) endl;// 相对的vee为反对称到向量cout so3 hat vee Sophus::SO3d::vee(Sophus::SO3d::hat(so3)).transpose() endl;// 增量扰动模型的更新Vector3d update_so3(1e-4, 0, 0); //假设更新量为这么多Sophus::SO3d SO3_updated Sophus::SO3d::exp(update_so3) * SO3_R;cout SO3 updated \n SO3_updated.matrix() endl;cout ******************************* endl;// 对SE(3)操作大同小异Vector3d t(1, 0, 0); // 沿X轴平移1Sophus::SE3d SE3_Rt(R, t); // 从R,t构造SE(3)Sophus::SE3d SE3_qt(q, t); // 从q,t构造SE(3)cout SE3 from R,t \n SE3_Rt.matrix() endl;cout SE3 from q,t \n SE3_qt.matrix() endl;// 李代数se(3) 是一个六维向量方便起见先typedef一下typedef Eigen::Matrixdouble, 6, 1 Vector6d;Vector6d se3 SE3_Rt.log();cout se3 se3.transpose() endl;// 观察输出会发现在Sophus中se(3)的平移在前旋转在后.// 同样的有hat和vee两个算符cout se3 hat \n Sophus::SE3d::hat(se3) endl;cout se3 hat vee Sophus::SE3d::vee(Sophus::SE3d::hat(se3)).transpose() endl;// 最后演示一下更新Vector6d update_se3; //更新量update_se3.setZero();update_se3(0, 0) 1e-4;Sophus::SE3d SE3_updated Sophus::SE3d::exp(update_se3) * SE3_Rt;cout SE3 updated endl SE3_updated.matrix() endl;return 0;
} 5、安装opencv 这部分虽然前面的文章提供了相应的步骤这里不妨重新温习一下。安装方法就是直接sudo安装
sudo apt-get install libopencv-dev 编译方法就是用g编译不过要添加上头文件和lib文件
g imageBasics.cpp -o imagesBasics -I /usr/include/opencv4/ -L /usr/lib/ -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_imgproc6、ceres库 ceres和下面要讲的g2o都是一种数据优化方法。一般来说我们构建好一个损失函数之后都不是通过数学方法直接计算的大部分情况都是通过优化方法步步逼近解决的。如果不使用优化方法指望穷举来找到最优值花费的时间就太多了无法满足实时处理的要求。 好在ceres可以直接用sudo安装这样方便一点
sudo apt-get install libceres-dev 安装后就可以在/usr/include和/lib/aarch64-linux-gnu下面看到相应的头文件、lib文件了。这个时候就可以用g直接编译了
g main.cpp -o main -I/usr/include/opencv4/ -I/usr/include/eigen3 -I/usr/local/include -L/usr/lib/ -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_imgproc -lceres -lglog7、g2o库的编译和使用 g2o也就是图优化是目前用的比较多的一种优化方法。因为没有通过sudo apt-cache search找到对应的安装库所以就自己下载代码来处理了。代码可以从这个地方下载
https://github.com/RainerKuemmerle/g2o 编译也没有什么复杂的整个过程除了时间长一点没有遇到什么困难
(a) 解压文件
(b) mkdir build
(c) cd build
(d) cmake ..
(e) make
(f) make install 安装好了库之后接下来就可以编译、运行示例程序了。编译时就是选项多了一点其他都还好
g main.cpp -o main -I/usr/include/opencv4/ -I/usr/include/eigen3 -I/usr/local/include -L/usr/lib/ -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_imgproc -lg2o_core -lg2o_stuff最后运行的时候我们发现找不到动态库这个时候就要重新配置一下LD_LIBRARY_PATH
export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/usr/local/lib 至此g2o也算是用起来了。 8、总结 当然不光上面这些内容树莓派4b还有可能安装一些其他的内容比如说qt、ros、pcd点云库等等。不管是什么需求我们努力去安装就好了逢山开路、遇水搭桥只有用树莓派4b解决越来越多的专业问题才能体现我们软件的价值所在而不是在低端的领域反复做一些造轮子的事情。 十四讲的1-6章非常重要在作者的另外一本书《自动驾驶与机器人的slam技术》中也大量使用有兴趣的同学可以去看看会有不少的收获。