动态环境下移动机器人的导航定位项目 算法与开发技术栈分析

  • 项目描述:以复杂的动态的室内实验室环境为背景,探索动态环境下构建语义地图的方法,结合基于RGBD相机的视觉SLAM系统和基于单阶段实例分割的神经网络 Yolact 框架设计算法剔除动态物体点,融合位姿信息和语义信息以及构建语义目标数据库实时构建高层次语义地图.
  • 项目硬件:Turtlebot2,Kinectv2,Nvidia Jetson Tx2
  • 项目主体框架:使用Cmake构建环境,使用Opencv,PCL点云库,Eigen矩阵运算库,g2o图优化库和DBOW2词袋模型库协助构建SLAM系统,并在SLAM前端的视觉里程计使用轻量级的实例分割模型YOLACT进行动态点的检测与剔除,并与点云信息进行结合完成三维语义地图和语义目标数据库的构建,并针对嵌入式平台TX2使用NCNN框架降低YOLACT模型的前向计算速度和使用octomap八叉树算法对地图进行压缩,完成实时建图的要求。

开发涉及的技术栈:

项目主要实现:主要使用CMake来编译整体工程代码,使用git 来进行代码版本控制,项目使用的主要语言为c++和python。

项目涉及的主要技术栈:

1.C++中调用Pytorch模型

​ 由于项目的主体框架使用的C++代码,python主要是在pytorch框架中使用,pytorch框架生成的模型会pytorch中的tracing方法将模型封装成一个module对象,通过使用pythorh的C++ API—libtorch加载的这个module会得到一个序列化过的module,然后在C++代码中来反序列化这个module来取到需要的模型。

使用C++调用并部署pytorch模型 - 小金乌会发光-Z&M - 博客园 (cnblogs.com)

2.C++的多线程编程

项目中代码涉及到了几个不同线程,使用了C++的thread库来实现多线程编程,为了实现线程之间的交流,需要用到互斥锁。做到在多个线程同时对一个内存空间操作的时候,保证线程安全,主要使用的mutex、unique_lock和设置不同的标志位来实现线程的同步。

例子 :

mbNotStop 插入关键帧标志位

正在插入关键帧标志,用于local mapping与tracking线程之间的调度,tracking中的CreateNewKeyFrame()函数执行前先调用SetNotStop()函数,这个函数有两个作用:

  • 查询插入关键帧的条件是否满足?(mbStopped)
  • 设置mbNotStop状态

false->tracking插入关键帧已经完成
true->正在插入关键帧(插入前调用SetNotStop()函数设置true,插入完成设置false

3.C++的STL标准库

​ 项目中主要使用了C++的STL标准库中的Vector和Map来存储数据,熟练的使用vector、map的迭代器存取数据,并使用相应的算法来操作vector和map

vector和map的原理和操作 问的很多,自行了解

4.通信

​ 项目中主要使用ROS进行通信,ROS的通信主要有四种

  • Topic 主题 (主要)

  • Service 服务(主要)

  • Parameter Service 参数服务器

  • Actionlib 动作库

通信的具体内容 参考 ROS——通信(一)_cchangcs-CSDN博客_ros通信

算法涉及的技术栈:

​ 项目主体框架:使用Cmake构建环境,使用Opencv,PCL点云库,Eigen矩阵运算库,g2o图优化库和DBOW2词袋模型库协助构建SLAM系统,并在SLAM前端的视觉里程计使用轻量级的实例分割模型YOLACT进行动态点的检测与剔除,并与点云信息进行结合完成三维语义地图和语义目标数据库的构建,并针对嵌入式平台TX2使用NCNN框架降低YOLACT模型的前向计算速度和使用octomap八叉树算法对地图进行压缩,完成实时建图的要求。

你可能感兴趣的:(c++,算法,python)