项目实训
项目实训记录
zyuxing
这个作者很懒,什么都没留下…
展开
-
关于项目实训中试错的一点总结
首先是关于r3live中gcc的版本问题,其实就是注意linux的中各个库的配套,比如pcl gcc vtk它们的版本往往有所关联,但它们自身的官方文档里又往往不会明说,所以只好自己挨个试试,反正我试了不少,终于发现了gcc版本的问题。另外,还有就是opencv的版本问题,通过opencv的多版本切换使我终于明白了linux对c++库的使用过程,反正opencv在cmake的时候注意安装位置,需要版本切换的时候,使用脚本调整位置就好了。顺带一提,假如对机械不太熟悉的话就不要擅自调试遥控汽车了,我们把无人车拆原创 2022-06-03 10:41:11 · 211 阅读 · 1 评论 -
如何将loam_livox的全局点云保存并导入unity3d(二)
从这其中取出的obj模型对我而言有个问题,那就是mesh的内外面反了,或者说法线方向反了,需要使用unity3d对其进行法线方向的反转,而这里需要使用脚本,脚本内容如下 通过以上脚本实现法线的反转,[ExecuteInEditMode]表明该脚本会在unity3d非运行状态下运行,获取相关三角后对内外面进行反转。然后可以对其使用unity的navigation进行烘培,而运行的时候脚本可能会失效(不影响烘培效果,但会出现单向透明的情况),可以使用unity3d中的着色器进行装饰,比如说使用玻璃材质,需要原创 2022-05-31 20:59:12 · 535 阅读 · 0 评论 -
如何将loam_livox的全局点云保存并导入unity3d(一)
首先使将loam_livox的全局点云保存问题,找到全局点云后,我模仿了loam中如何保存单帧pcd的方式,全局点云的发布如下所示 然后使用单帧点云的方法进行保存 更改一下参数即可。保存后的点云需要修改为ply格式,可以通过pcl_pcd2ply命令对全局pcd文件进行转换得到ply文件,下一步就需要使用meshlab以获取obj模型,这里可能会发现在pcl中也有从ply2obj的方法,但似乎不太准确,所以推荐使用meshlab,首先计算法线 然后使用泊松算法进行曲面重建接下来前往过滤器的selec原创 2022-05-31 20:47:12 · 1041 阅读 · 1 评论 -
如何使用自动驾驶算法中的obj模型(unity3d)
假如那些slam算法中只有ply文件的话(一般都会有的,发布在global_map一类的全局建图话题上),那就用meshlab进行转化,使用其中的点云简化,计算法线,构建曲面等功能建立出obj模型。 其实刚开始我想用模拟器CARLA等,但是有一个问题,那就是只能主机用,因为它的别的配置不说,光显卡内存就有6G,其他的也差不多,不管是否独显,反正笔记本应该挺难跑的,假如使用远程桌面,那主机上显示的画面传到笔记本这里可是相当掉帧了,我就没有使用相关的自动驾驶模拟器,而是使用unity3d进行构建。 首先..原创 2022-05-20 11:38:56 · 436 阅读 · 0 评论 -
关于OAK-D-POE与POE交换机与ORBSLAM3的结合使用
首先,将联通外网的网线插入交换的WAN口,用一根网线连接电脑和交换机(LAN口),摄像头利用自带的网线插入交换机的LAN口,利用笔记本快速配置交换机,这里可以使用其默认配置。然后下载OAKD_ORBSLAM3。在其中的ORBSLAM3文件夹中下载ORBSLAM(注意分支,我这里使用的都是使用opencv3的分支)。这里我觉得还可以说说如何切换opencv的版本,假如下载了opencv3在默认位置(/usr/local/lib),在下载安装opencv4时,可以使用 cmake -D CMAKE_PREF原创 2022-05-14 10:09:12 · 258 阅读 · 1 评论 -
关于web结合单目以及RGBD图像重建的设计(二)
使用RGBD图像进行点云构建时,我本来想要继续使用nodejs以及c++的方法,但是一些后端优化比如一些因子图相关的库就是加载不出来,我使用ldd发现在node文件中找不到依赖库,所以我只好换了另一种方法,那就是使用c++搭建服务器,使用C++搭建服务器好像一直没有什么统一的框架,我查了一个wfrest进行使用,我使用这个框架的主要原因是它的一些方法和nodejs很像,其实要是图片流很快的话,可能以后使用socket会更好一些。 将图片传给c++后我使用了PNP方法对位姿进行计算然后使用g2o对其进行优化原创 2022-04-24 12:04:38 · 942 阅读 · 0 评论 -
关于web结合单目以及RGBD图像重建的设计(一)
首先是架构的问题,我使用了本机电脑,虚拟机外加一台主机的架构,其中本机电脑使用了react+material UI作为单页面应用框架,使用three.js重现点云。本机电脑通过虚拟机接口转发与虚拟机沟通。而虚拟机上运行的是nodejs与c++的混合编译。主机进行了对点云的构建,源码地址如下 xingzhongyu/cv (gitee.com)https://gitee.com/xingzhongyu/cv 虚拟机上我用nodejs搭建了一个图片服务器,在获取不同的图像(可能还有位姿数据,可选)后将其地址原创 2022-04-24 11:12:57 · 1730 阅读 · 0 评论 -
vins-mono的读后总结(二)
首先解释一下因子图优化,我对其现在只能说有一点大致的理解,那就是通过假设变量情况,通过计算在什么情况下,得到当前数据的可能性最大,从而得到变量的估计与优化。关于这点,以后我可能会进一步得到相应的理解,然后回来进行补充。另外我从这里明白了紧耦合的定义,什么叫做紧耦合,优化函数里面把这些相关变量写在一起才叫做紧耦合。这也就是下面所要介绍的后端优化部分。 在后端优化部分中,我们可以将IMU,视觉以及约束点全部放入统一的优化函数中进行优化并且得到相应的值。其中包括11帧的位姿,相机外参以及时间同步时所产生的误差以原创 2022-03-29 22:00:24 · 284 阅读 · 0 评论 -
vins-mono的读后总结(一)
vins-mono应用于单目加IMU的情况下。 首先是feature_tracker,对图像中的点进行追踪,这里使用的是光流法追踪内部的特征点,查看其中与上一帧匹配的特征点,然后记录跟踪到的次数,假如跟踪次数到达一定程度就会将该点固定,形成约束。清除特征点附近过密的特征点(根据特征点跟踪次序进行清除,从而优先保留次数较多的特征点),还要清除上一帧中在这帧中没有出现的特征点,然后提取新一帧中的一些新的特征点(新特征点的提取位置可以根据清除的旧特征点的位置进行动态的判断)。然后将特征点发布出去。 关于IMU原创 2022-03-29 20:03:20 · 357 阅读 · 0 评论 -
关于SLAM中高斯牛顿法的一些理解
首先就是高斯牛顿法,首先介绍一下背景,假如是一个误差函数求最小值,那么通常情况下就是求取导数为0时的值,然后取其中最小值,但多变量情况下求导是比较困难的,这时可以通过给定一组x的方法进行估算,也就是给出,假如该值较小并且也足够小时就可以认定x为最小值。而牛顿法以及高斯牛顿法就是对的计算。 牛顿法是对目标函数进行二阶泰勒展开,此时该函数为一个变量为的二次函数,可以进行求导计算,然而牛顿法的二阶导数矩阵,也即海塞矩阵计算过慢,所以使用改进的高斯牛顿法,该方法求取的是目标函数误差的平方和,而且泰勒展开时对目标函原创 2022-03-26 15:59:12 · 353 阅读 · 0 评论 -
A-LOAM源码读后的一些简单的总结与备忘
关于A-LOAM运行时的问题,主要是将/camera_init里的破折号去掉,opencv/cv.h替换为opencv/cv.h,另外,假如出现RVIZ闪退的情况,主要是因为运行建图时筛选出的交点与面点过少的问题,可以适当降低相关参数,也可以多运行几次。 源码中的kitthelper.cpp主要是读取文件并且发布用的,读取过程中注意将点转换到点云坐标系下,以及将相关的图像从OpenCV图像转换为ROS图像,将读出的数据根据ROS节点的不同topic进行发布。 对于发布的点云会在scanRegistrat原创 2022-03-23 20:37:34 · 3536 阅读 · 0 评论 -
我对视觉SLAM十四讲的一些理解(二)
光流法与直接法的定义:光流法只对图像中的特征点进行提取,使用光流跟踪进行匹配,然后使用对极几何,PNP或ICP进行计算。而直接法分为是否提取关键点,根据关键点或全部像素的灰度信息对相机运动进行估算。灰度不变假设,在一小段时间内灰度不变。根据该假设进行求导等一系列操作。补充一句,此时我们计算的不是重投影误差,而是光度误差。根据点可以快速计算位姿,而计算全部像素有利于建图。 后端部分同样可以使用非线性优化,可以同时对路标以及相机位姿同时进行优化(根据重投影误差),或者仅仅是优化位姿,而对路标的坐标进行固定处理原创 2022-03-17 11:44:52 · 3541 阅读 · 0 评论 -
我对视觉SLAM十四讲的一些理解(一)
首先是三维空间的刚体运动,关键在于物体的运动如何表述,其中包括欧拉角,旋转向量及其与旋转向量的转换,其中包括罗德里格斯公式等数学知识,但欧拉旋转往往面临万向节死锁问题(简单来说,就是转三次和转两次等价),所以可以使用四元数,而关于四元数的表示,我想可以用复数在数轴上的表现来说明,a+bi中用a表示x轴,b表示y轴,可以通过类比方法来说明四元数的情况。同样,也可以转化为旋转矩阵。 关于李群与李代数,事实上,李群中包括旋转矩阵与变换矩阵,因为它们是可以连续变化的。而李代数则是李群进行指数映射后对李群性质的一些原创 2022-03-16 14:56:22 · 4048 阅读 · 0 评论 -
谈谈SLAM算法中常用的几个库的安装使用问题(一)
首先是github的下载问题,这里有个比较简单的方法,就是去What Is My IP Address - See Your Public Address - IPv4 & IPv6查出来然后将地址贴到hosts文件中。 接下来介绍opencv,由于通常情况下我们使用的是比较新的版本,比如opencv4,这会导致一点问题,比如CV_FM_8POINT -> FM_8POINT,用于表示八点法的参数已经进行了修改,另外还有比如 CV_LOAD_IMAGE_COLOR已经修改为IMREAD_CO原创 2022-03-07 21:49:03 · 672 阅读 · 0 评论