想想大一刚开始在CSDN写作,这一坚持,就是我在CSDN的第九个年头,这也是在CSDN最有里程碑的一年,这一年我被评为CSDN的博客专家啦!先是被评为Unity开发领域新星创作者,写的关于一部分Unity开发的心得获得大家的青睐,然后一鼓作气申请了博客专家。
研究生刚开始做Unity和HoloLens 2的二次开发,后来组里接了一个更大的课题,我们需要自研一个AR头盔,从硬件到软件全部国产化自研,导师很放心我们,于是我开始从底层的SLAM坐起。SLAM虽然科研不好做,很小众,但是很有挑战,也是未来的方向,所以这一年我算是踏入视觉SLAM,成为一个小SLAMer了。希望未来学成的时候,能赶上机器人大规模普及,就业一片蓝海。
视觉SLAM属于计算机视觉和机器人研究的交叉领域,因此涉及的基础知识广而分散。视觉SLAM有参考书还是比较幸运的,然而市面上的书都偏数学推导,对初学者不太友好,高翔博士的《视觉SLAM十四讲》是一本非常好的视觉SLAM教材。于是跟着高博学习实践。疫情放开了,那就又更理想的生活,记录一下2023年的成长,回顾过去,展望未来,我将从工作成长、生活娱乐和身体健康三个方面进行总结。
工作成长 | 生活娱乐 | 身体健康 |
---|---|---|
开始学习C++ | 小破球2真的震撼 | 卡丁车第一次就跑了1’11 |
学习使用INDEMIND双目惯性模组 | 世纪剧院仙剑奇侠传视听音乐会 | 开始徒步旅行 |
参加 “大挑”比赛 | 打卡重庆解放碑 | 学会了反曲弓射箭 |
参加“大唐杯”比赛 | 去了重庆的洪崖洞 | 入门双板滑雪 |
使用ORB-SLAM2跑自己的数据 | 喝了鹅岭二厂的COFFEE HOLIC | 第一次骑行100km到白虎涧 |
多了解了Unity API | 观音桥吃重庆火锅 | 单板落叶飘更丝滑了 |
学习使用EVO工具 | 转了转钟书阁恢弘大气 | 入门速降山地车,体验速度与激情 |
学习ROS,在ROS下会使用bag录制 | 涂鸦一条街很有趣 | 骑行功率又涨了 |
改进了INDEMIND模组点云功能,使其能够输出保存 | 交通茶馆喝一盏茶 | 学会钓鱼 |
用的全部自研的传感器, 参加了电赛 | 四川美院逛逛 | 牙套摘啦,大胆笑更闪耀 |
对比VI-SLAM系统 | 逛逛来福士 | 网球的中速球熟练啦,2.5-3.0的样子 |
学习如何有效的阅读文献 | 磁器口古镇 | 西安城墙骑山地车 |
重新学习了相机标定 | 蹦床公园 | 夜爬华山4H11min到达北峰 |
学习Kalibr标定工具 | 学会了钓鱼 | 尝试拳击,人生体验+1 |
使用ORB-SLAM3跑自己的数据 | 五月天鸟巢 | 公路骑行爬妙峰山5H14min |
学习RANSAC算法进行点云的平面拟合 | 参加《北京科幻大会》 | 单板学会换刃,去了富龙滑雪 |
学习OpenGL渲染 | 观看《银河护卫队3》 | |
学习Vulkan渲染 | 观看《消失的她》 | |
参加第九届中国虚拟现实产学研大会 | 观摩西安碑林博物馆 | |
和实验室的小伙伴组了一个增强现实头盔 | 西安ACC漫展,一发入魂沙鲁 | |
学习搭建PTAM系统 | 逛西安钟楼 | |
学习搭建ORB-SLAM系统 | 大唐不夜城逛吃 | |
学习搭建ORB-SLAM系统 | 兴庆宫游园 | |
学习搭建ORB-SLAM2系统 | 汉宫露营 | |
学习搭建ORB-SLAM-VI系统 | 观光芙蓉园 | |
学习搭建ORB-SLAM3系统 | 观看《封神第一部》 | |
EuRoC数据集配置及评价 | 观看《长安三万里》 | |
TUM-VI数据集配置及评价 | 环球影城第一届万圣季 | |
IMU预积分的计算 | ||
Bundle Adjustment算法 | ||
PnP算法 | ||
Sim3算法 | ||
参加2023中国元宇宙大会 |
做底层的操作需要C++开发,本科时只学过Java,所以需要学习C++语法,有了面向对象的基础,C++学起来也得心应手起来。刚开始接到大课题需要视觉SLAM,在AR应用中通常使用轻便、价格低廉的单目相机设备,仅使用一个摄像头作为传感器完成同步定位与地图创建操作,具有系统结构简单、成本低且易实现等优点。正是尺度不确定性才使得单目SLAM 能够在大尺度和小尺度环境之间进行自由转换。
所以单目视觉SLAM成为增强现实领域的研究热点,我也在单目视觉SLAM开始做研究。接着因为需要的场景是应急救援的灾害场景,需要的环境比较复杂,所以当时加上IMU做一个融合计算。后来硬件同步上还有时间同步机制感觉不容易操作,偶然间发现了一款高博推荐的双目惯性模组。目前最近的SDK版本是1.4.2,这个相机成本便宜,有硬同步的IMU,频率也够高,自带标定,对于目前我只做视觉SLAM定位足够用了。然而封库,其他各种依赖库要跟着SDK的库,OpenCV不使用ROS自带的版本,使用单独版本3.4.3等等。这个SDK组织得真的是一言难尽。
因为算法的需要实时性较高,所以学习ROS操作系统,ROS是机器人操作系统,简单来说就是封装好通信机制的一个框架,底层都已经写好了。
仔细研究了ncepu_Chen讲解的ORB-SLAM2源码,大佬分析的十分通透,深入的了解ORB-SLAM2的三大线程,三个线程建图和三维重建都十分准确。
接着用C++实现了一个通讯录管理系统,主要涉及结构体和指针的使用,旨在复习C++的语法。
当时能够编译运行诸如此类的特征法SLAM开源项目了,虽然初学经历了各种尝试,但是熟悉了Linux系统和ROS系统的操作、cmake、shell、OpenCV等等,为了能够自己进行开发,还需要更深入的学习。发现碰到纹理复杂,大尺度等条件,结合我们应急救援的背景,感觉单一传感器已经不太能够满足需求了
实验室做视觉SLAM需要IMU相机,购入INDEMIND双目惯性模组运行多模态融合的感知定位,官网上关于ROS环境下的教程十分简略,直接按照官网的步骤无法实现相机数据读取并发布到指定的topic上,于是把自己的安装过程记录下来,做了总结。
参加 “大挑”,这次带了一个跨平台的增强现实框架,主要用做HoloLens 2的二次开发,这次的多人协同系统,基于Unity3D游戏引擎构建了一套跨平台增强现实开发的框架。该框架保证了同步渲染,粒子效果,背景视频渲染以及实时阴影渲染,同时封装好接口,可以接入不同平台下的虚实配准算法库。传统Socket异步模型不支持UWP平台,本项目使用高性能IOCP异步模型SocketAsyncEventArgs支持PC、UWP、IOS、Android等市面上绝大多数平台。 ARcore、ARkit、HoloLens锚点同步校准实现多人交互共享,Assetbundle动态更新加载资源,数据同步。区别于采用 Vuforia 包完成图像识别和三维跟踪注册,研究三维点云数据分割与识别,通过三维数据的匹配完成 HoloLens 三维跟踪注册,提升了 HoloLens对三维空间交互感知能力。同时使用Unity Chat SDK 跨平台音视频通讯。建立完整的体验感较好的增强现实程序,为多种业务场景需求提供服务。
ORB在保持了特征子具有旋转、尺度不变性的同时,在速度方面提升明显,ORB是质量与性能之间很好地折中,对于实时性要求很高的SLAM而言是一个很好地选择。单独学习改进FAST算法的ORB算法。
参加第十届大唐杯,需要掌握一定的通信知识和通信基础,这对计算机科班出身的本人及实验室的小伙伴真的不是很友好,但是我们还是硬着头皮学下去了。背景知识上的数据都给出了,只要好好用心填写到对应的地方就好。 但不要只是盲目地复制它。 有些东西需要计算,比如发射功率,频点计算,小区最大发射功率等。 这些都是计算出来的。 还有IP地址计算,网络地址,网关,掩码等等,千万别搞错了。 还有一些知识,比如路由关系不要搞错,关系要一一对应,网元功能(八个网元)不要弄错。
跑了实时的ORB-SLAM3,根据官方例程在中使用ros接入INDEMIND相机,这回有SDK及ORB-SLAM3安装过程中的各种常见性问题解决方法及安装细节,与官网教程略有不同,列举所有默认安装的依赖。
INDEMIND相机的SDK也能在Windows平台运行,所以也做了一些WIN上的探索。
EVO工具全名为“Python package for the evaluation of odometry and SLAM”,使用Python写的轨迹评估工具,目前在SLAM领域论文中的“使用率”逐渐上升,可以说已经成为了作为SLAMer一定要会用的工具。学习evo工具评测SLAM算法性能并可视化结果。
ROS 系统中,可以使用 bag 文件来保存和恢复系统的运行状态,比如相机话题的 bag 包,然后回放用来进行联合外参标定,也可以使用EVO工具显示算法轨迹,这里记录下我学习官方的 rosbag 教程的笔记。
参加电赛,2023年“兆易创新杯”第十八届中国研究生电子设计竞赛,给我的感觉是时间真的紧张,可能是因为去年有疫情原因影响所以能准备的时间到七月份,今年不到月底就要全部出成品。我们团队一直在自研一款增强现实眼镜,从硬件设计到软件实现全部由我和另外两个小伙伴一起完成,所以就把我们做出来的原型机的一部分拿出来改了改参赛了。
双目惯性相机最开始是从VINS中了解到的,2018年VINS中推荐过Loitor视觉惯性相机,但是后来看到GitHub Issue中有人反映Loitor丢帧、无技术支持等问题,加之购入渠道非官方故未入手Loitor,浏览知乎时关注到Indemind的该款产品,发现技术贴较多、SDK支持及销售渠道较为官方,故今年入手了一个,打算用于VI-SLAM用于视觉定位导航及双目三维重建等方面进行感知定位,分析SDK中实时显示点云图代码并加以改进。
对目前VI-SLAM系统做了总结,视觉与IMU融合的SLAM系统逐渐受到广泛关注,已成为SLAM系统的研究热点。我的研究内容已经从单一的传感器,到视觉与惯导融合的多传感器架构了。
算法不够准确,重新做相机标定,学习SLAM真的走了不少弯路,踩了不少坑,我们不像旁边无人驾驶课题组的一直有纵向课题,这次的AR项目真的对我们有着不小的挑战。
使用Kalibr工具线对相机+IMU离线标定,常见SLAM算法的定位精度主要看传感器的情况,传感器的精度保证才能让算法更加准确,所以对传感器的标定显得尤为重要,Kalibr是唯一能标定camToImu的工具。
仔细推到了IMU预积分的过程,是真的很难。
INDEMIND这款相机有硬件同步,但是imu的数据还是不够准确,所以还是需要进行标定。虽然出场已经进行过标定,但是数据仍不够准确,而目前也没有针对这款IMU相机的标定教程,所以从Kalibr安装开始,进行双目相机的标定、IMU的标定、相机和IMU联合标定。
RANSAC算法是“Random Sample Consensus”的缩写,它的全称是随机抽样一致性算法。算法可以从一组包含“局外点”的观测数据集中,通过迭代方式估计数学模型的参数。RANSAC算法是不确定的算法——它是由一定的概率得出一个合理的结果,为了提高概率必须提高迭代次数。首先对算法进行学习,然后根据理论在Unity实践中实现平面拟合。
学习使用OPENGL (Open Graphics Library)可以用来进行虚拟模型的渲染,OPENGL一个跨语言、跨平台的图形编程接口,具有2D/3D 建模、坐标变换、交互技术、纹理映射等功能,包含几百个核心函数,通过这些函数可以便捷、快速地渲染虚拟模型。
学习使用Vulkan。OpenGL是黑盒子,它能提供好用的AP,没有办法进行一个深入的优化,所有东西都包装在一起没有办法看到底层变化的实现逻辑。Vulkan的底层全部铺出来,每一步都需要自己去实现,很麻烦,但与之同时可以做更多的优化。如果你的程序在GPU性能上有瓶颈,不应该使用Vulkan。如果你的性能瓶颈在CPu和GPU的一个数据交互上,这个时候可以使用Vulkan,Vulkan会为CPU减轻非常多的负担。
参加国考,这几年口罩让大家意识到公务员的稳定,考公人数剧增。
参加京考,今年的京考真的很早,我感觉听粉笔980很简单,但是自己做的时候就不一定了,我开始的阶段是这样,现在在慢慢变好,看题能联想到知识点,把基础又过了一遍,越看心里越有东西,基础真的挺重要的,把基础巩固再巩固,做题就会更有思路。
流浪2真的是震撼,被朋友疯狂安利。看之前没想到会这么好看!续集不仅没有扑,还得到全方位升级。构造的宇宙观真的爱了;反曲弓小菜鸡?新技能Get;卡丁车真刺激哈哈哈,玩不够呀,第一次就跑了1’11,进一分就能换快车了;你的酒馆对我打了烊,炉石传说从最早入坑的玩家到暴雪和网易谈崩,跟炉石告别,也是跟青春告别; 意气凌霄不知愁,愿上玉京十二楼。第一次听了音乐会真的感慨良多,观众们都好有素质,演员水平也真的高,好几次都快泪目了,爷青回。不知不觉就过了两个小时,就像如听仙乐耳暂明一般震撼;
保持身材依旧是重中之重,卡丁车真刺激哈哈哈,玩不够呀,第一次就跑了1’11,进一分就能换快车了;双板滑雪犁式学会了,开始练习平行式;
今年的收获感觉溢于言表,也是我非常喜欢的一年,这一年我慢慢变成一个SLAMer,去做元宇宙的应用。
我被CSDN认证为博客专家啦!这也算是C站对我创作能力的认可。从大一开始在施一飞老师的影响下开始在CSDN写作,坚持至今。刚开始写博客只是当作一个学习笔记,把学到的东西记录下来,方便以后重复学习。渐渐地,随着写技术的深度增加,访问量也越来越多,自己的写作能力也慢慢地有所提高。就这样,访问量的提高,粉丝的好评,也让自己的自信心逐渐提高,于是形成了一个良性循环,从而越写越好,越写越多。C站记录了我关于技术的成长,之后的计划是出版一本关于技术的书。十年饮冰,难凉热血。学以致知,然后学以致用。幸运的是,曾经的菜鸟像鸵鸟一样把头扎进沙漠,然后发现在沙子下面的是星辰大海。成为博客专家并不代表了我到一个多高的高度,而是代表了我刚刚上路。