0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于ORB特征的三维定位与地图构建算法

云深之无迹 来源:云深之无迹 作者:云深之无迹 2022-08-16 10:57 次阅读

这文章相当于被追屁股后面写的东西了,拿到地平线的板子一直准备做点什么东西出来。

不辜负是不辜负,有个雷达能干嘛,装头上吗?

自到我看见了这个尘封已久的小飞机

dji专属教育小飞机,啧,可以编程哪种

写过无数了,感兴趣的大家自己搜索一下

x3很牛,TT也牛,但是我不牛,我得让他牛,所以我决定搞个SLAM使用。TT有一个单目的相机,还有一个IMU,以及开放的接口。所以有这个潜力,其次也能学一手ROS2.事实上是我太年轻了,后面再说。

在SLAM框架上面我肯定自己写不了,这里研究了一下午,使用了ORB-SLAM。

ORB-SLAM是一种基于ORB特征的三维定位与地图构建算法(SLAM)[1]。该算法由Raul Mur-Artal,J. M. M. Montiel和Juan D. Tardos于2015年发表在IEEE Transactions on Robotics。ORB-SLAM基于PTAM架构,增加了地图初始化和闭环检测的功能,优化了关键帧选取和地图构建的方法,在处理速度、追踪效果和地图精度上都取得了不错的效果。要注意ORB-SLAM构建的地图是稀疏的。

ORB-SLAM一开始基于monocular camera,后来扩展到Stereo和RGB-D sensor上。作者好像还会做Semi-dense mapping的扩展。作者的开源代码都在GIT上。

ORB-SLAM算法的一大特点是在所有步骤统一使用图像的ORB特征。ORB特征是一种非常快速的特征提取方法,具有旋转不变性,并可以利用金字塔构建出尺度不变性。使用统一的ORB特征有助于SLAM算法在特征提取与追踪、关键帧选取、三维重建、闭环检测等步骤具有内生的一致性。

16bd9930-1c98-11ed-ba43-dac502259ad0.png

架构图

ORB-SLAM利用三个线程分别进行追踪、地图构建和闭环检测。

一、追踪

ORB特征提取

初始姿态估计(速度估计)

姿态优化(Track local map,利用邻近的地图点寻找更多的特征匹配,优化姿态)

选取关键帧

二、地图构建

加入关键帧(更新各种图)

验证最近加入的地图点(去除Outlier)

生成新的地图点(三角法)

局部Bundle adjustment(该关键帧和邻近关键帧,去除Outlier)

验证关键帧(去除重复帧)

三、闭环检测

选取相似帧(bag of words)

检测闭环(计算相似变换(3D<->3D,存在尺度漂移,因此是相似变换),RANSAC计算内点数)

融合三维点,更新各种图

图优化(传导变换矩阵),更新地图所有点。

先别看这么高大上,需要做修改的。这个ORB_SLAM2 库不用Pangolin可视化,而是通过 ROS2 topcis 发布所有数据。

而且这里也需要对TT飞机来一套完整的ROS封装。下篇文章讲封装,在这之前还需要对X3上面的ROS2进行一个熟悉。

16f17f70-1c98-11ed-ba43-dac502259ad0.png

这里使用的编辑器是VSCode,记得密码是root

171f6da4-1c98-11ed-ba43-dac502259ad0.png

提前看好自己的IP

ssh root@ip

17470c92-1c98-11ed-ba43-dac502259ad0.png

官方的安装文档很好了,这里不写,记得运行前必须加一下,当然了我这里建议是可以一劳永逸的写好

1761bd12-1c98-11ed-ba43-dac502259ad0.png

就这样,下面是我的SLAM库

176c53da-1c98-11ed-ba43-dac502259ad0.png

但是我也不理解,写了就好像没有写一样

178be4ca-1c98-11ed-ba43-dac502259ad0.png

等等我找到了!

1799a3b2-1c98-11ed-ba43-dac502259ad0.png

tros。。。地平线自己改了,不过注意后面录还是不对,没有foxy了

17bcc18a-1c98-11ed-ba43-dac502259ad0.png

对了在VSCode里面推荐安装这些插件

17dd9702-1c98-11ed-ba43-dac502259ad0.png

Python的话是安装这些

17fbdb40-1c98-11ed-ba43-dac502259ad0.png

而且可以使用Jupyter,记得pip3 install jupyter

182fad44-1c98-11ed-ba43-dac502259ad0.png

运行的都可以的

186ddf24-1c98-11ed-ba43-dac502259ad0.png

PIP也是可以的

189324c8-1c98-11ed-ba43-dac502259ad0.png

自动补全的速度还行

18b9b354-1c98-11ed-ba43-dac502259ad0.png

第一个就是我们的tros了

18d949c6-1c98-11ed-ba43-dac502259ad0.png

不过这个好像就不管用了

18f6b272-1c98-11ed-ba43-dac502259ad0.png

这些说的都对

191c2340-1c98-11ed-ba43-dac502259ad0.png

但是这里指出的是源应该是墙外的,所以这里需要全局的安排

接下来试试摄像头:

1946c05a-1c98-11ed-ba43-dac502259ad0.png

应该是插入一个摄像头了,但是看源文件

196a2b80-1c98-11ed-ba43-dac502259ad0.png

在tos的文件夹里面

/opt/tros/share/hobot_usb_cam/launch/hobot_usb_cam.launch.py

源码的位置

198b8fa0-1c98-11ed-ba43-dac502259ad0.png

参数是dev下面的

19aa9102-1c98-11ed-ba43-dac502259ad0.png

应该是要这个

19c66f8a-1c98-11ed-ba43-dac502259ad0.png

这里启动失败,是不是是因为我的权限不够

19ebdacc-1c98-11ed-ba43-dac502259ad0.png

报错是没有???

1a08f86e-1c98-11ed-ba43-dac502259ad0.png

再开一个terimal,看看列表

1a241aea-1c98-11ed-ba43-dac502259ad0.png

也知道,节点都是Python的程序,ros的命令是脚本。

1a3bfb1a-1c98-11ed-ba43-dac502259ad0.png

在tros下面的share是存放公开节点的地方

1a5c36f0-1c98-11ed-ba43-dac502259ad0.png

就像这样

1a8c90ac-1c98-11ed-ba43-dac502259ad0.png

包括我们的demo也是在这里的

工作温度:-25°Cto65°C稳定工作温度:20°Cto60°C生产工艺:SMT(ROSH)物距:60CM-150CM解析度:800LW/PH(Center)芯片型号:JX_F37芯片尺寸:1/3最大分辨率:1920*1080像素点大小:2.7um*2.7um最大图像传输速率:30fps(1920*1080)信噪比:36db动态范围:79db芯片型号:JX_F37芯片尺寸:1/3最大分辨率:1920*1080像素点大小:2.7um*2.7um最大图像传输速率:30fps(1920*1080)信噪比:36db动态范围:79db

1aae04b2-1c98-11ed-ba43-dac502259ad0.png

1ac4eb14-1c98-11ed-ba43-dac502259ad0.png

这个就是我们的MIPI的相机

https://developer.horizon.ai/sunrise

售卖的位置,感谢大佬还给了个摄像头:

害,白嫖笑嘻嘻

source /opt/tros/setup.bash  ros2 topic list

1b0b4fb4-1c98-11ed-ba43-dac502259ad0.png

我个人是习惯看看话题的情况的

# 配置 TogetherROS 环境:source /opt/tros/local_setup.bash# launch 方式启动ros2 launch mipi_cam mipi_cam.launch.py

开启一个新的终端,开始把摄像头开启

1b230e4c-1c98-11ed-ba43-dac502259ad0.png

摄像头开启了一个新的线程

1b437358-1c98-11ed-ba43-dac502259ad0.png

这个就是发布的信息

1b5944c6-1c98-11ed-ba43-dac502259ad0.png

可以对比的看

# 一个终端编码source /opt/tros/local_setup.bashros2 run hobot_codec hobot_codec_republish --ros-args -p channel:=1 -p in_mode:=shared_mem -p in_format:=nv12 -p out_mode:=ros -p out_format:=jpeg -p sub_topic:=/hbmem_img -p pub_topic:=/image_jpeg

我们的数据在发送给屏幕显示的时候,需要编码压缩,所以一个新的终端

1b81df08-1c98-11ed-ba43-dac502259ad0.png

这个就是mjpeg的压缩节点

1ba1bb7a-1c98-11ed-ba43-dac502259ad0.png

命令

# 再起一个终端source /opt/tros/local_setup.bash# 启动nginx,nginx只需启动一次,如前面已启动过nginx,则无需再次启动cd /opt/tros/lib/websocket/webservice && chmod +x ./sbin/nginx &&./sbin/nginx -p .# 启动websocketros2 run websocket websocket --ros-args -p image_topic:=/image_jpeg -p image_type:=mjpeg -p only_show_image:=true

在起一个节点来把我们的mjpeg的信息通过服务器发给浏览器

1bb8bb90-1c98-11ed-ba43-dac502259ad0.png

然后再浏览器打开就行

1bd9349c-1c98-11ed-ba43-dac502259ad0.png

结果

1c099272-1c98-11ed-ba43-dac502259ad0.png

我们可以看到各个节点的情况

1c2a7848-1c98-11ed-ba43-dac502259ad0.png

先把硬件打开

1c49b5be-1c98-11ed-ba43-dac502259ad0.png

把原生的raw数据来发送,并且解码成mjpeg

1c7d2124-1c98-11ed-ba43-dac502259ad0.png

接着就是把数据转发到浏览器

1ca36870-1c98-11ed-ba43-dac502259ad0.png

事已至此我们在继续玩

把一个Mac连入我的热点,打开IP就可以播放(我在吃西红柿)

这里充分的展示了ROS的方便之处。

打开我的DELL,里面也有ROS,来个全节点之间的使用

1d16cd42-1c98-11ed-ba43-dac502259ad0.jpg

首先是可以读取发送的节点信息

1d3ca666-1c98-11ed-ba43-dac502259ad0.jpg

但是rviz2打不开

1d56b0b0-1c98-11ed-ba43-dac502259ad0.jpg

定位到Cmake,是有这个库的

1d746042-1c98-11ed-ba43-dac502259ad0.jpg

在这里‘

修了半天也玩不来。

把ROS2卸载了重装看看怎么样?(好了)

1d9836c0-1c98-11ed-ba43-dac502259ad0.jpg

卸载了重装了一次,记得最后加一个--fixmissing的东西

1db97394-1c98-11ed-ba43-dac502259ad0.png

板子上面运行这种东西也没有什么毛病

1ddd4710-1c98-11ed-ba43-dac502259ad0.png

之后我会给安装脚本,但sudo就可以的

1df31054-1c98-11ed-ba43-dac502259ad0.png

对了在VSCode里面打开新的目录是使用这个命令

1e0f40b2-1c98-11ed-ba43-dac502259ad0.png

打开后你记得选择信任

抱歉了,本来想无梯子的,不地不挂了,有的文件有点难搞

1e6c2688-1c98-11ed-ba43-dac502259ad0.png

这个是编译的TT ROS包,大概一分钟吧,DELL 几秒钟

救命。。。连个git也没有

1e940144-1c98-11ed-ba43-dac502259ad0.png

这个是噩梦的开始,慢不说,内存还爆了

1ec0672a-1c98-11ed-ba43-dac502259ad0.jpg

看不懂?

1eec52c2-1c98-11ed-ba43-dac502259ad0.png

就是板子编译东西的时候,没内存维持正常运行就宕机了

1f383674-1c98-11ed-ba43-dac502259ad0.jpg

两位兄台的建议很好,但是太慢了,我不准备在X3上面编译了,我试了脚本为1,但是好慢。

1f46a20e-1c98-11ed-ba43-dac502259ad0.png

目前TT ROS搞好了,就差SLAM了

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    7637

    浏览量

    148461
  • 三维定位
    +关注

    关注

    1

    文章

    8

    浏览量

    8335
  • 开源代码
    +关注

    关注

    0

    文章

    27

    浏览量

    2866

原文标题:X3派+大疆无人机-SLAM单目建图.上

文章出处:【微信号:TT1827652464,微信公众号:云深之无迹】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    三维快速建模技术与三维扫描建模的应用

    相关处理,构建三维模型和对模型进行纹路映射,最终完成物体的三维模型构建。该三维扫描建模流程方法对复杂物件的
    发表于 08-07 11:14

    广西扫描服务三维检测三维扫描仪

    `广西扫描服务三维检测三维扫描仪中科院广州电子的Creaform便携式激光三维扫描仪,包括便携式GoSCAN全彩三维扫描仪,便携式HandySCAN工业级
    发表于 08-29 14:42

    电厂三维安全定位系统迎考察获盛赞

    `河北云酷科技有限公司为神***能天津大港电厂量身打造的基于三维安全管控平台的人员定位系统,利用虚拟三维技术、UWB技术、物联网技术,将复杂的现场环境真实还原为三维场景,并结合生产业务
    发表于 10-12 09:55

    bigemap如使用高程DEM建立三维地图模型的步骤

    bigemap如何使用高程DEM建立三维地图模型(Arcgis ArcScene)
    发表于 04-02 12:46

    三维设计应用案例

    CAD是目前工业制造产品设计的重要软件之一,广泛应用于机械、建筑等领域。而常用的CAD软件,也就是所谓的三维制图软件,较二的图纸和二的绘图软件,三维CAD软件能够更加直观、准确地反
    发表于 07-03 07:06

    如何使用高程DEM建立三维地图模型

    如何使用高程DEM建立三维地图模型(Arcgis ArcScene)
    发表于 04-30 09:26

    请教关于近距离三维定位的问题

    想请教各位大佬,有没有在1米范围的空间内,实现三维准确定位的方法,得到目标物体在空间中位置。 被定位的目标比较小,只有8cm左右,针状圆形。 前部分是针(大概3cm左右),后一部分可以做存放
    发表于 01-13 19:11

    基于麦克风阵列模拟人耳进行三维空间的声源定位

    一、设计概述 /Design Introduction1.1 设计目的基于麦克风阵列模拟人耳进行三维空间的声源定位,有着广泛应用前景,可应用于大型机械产品的故障检测以及新生婴儿先天性心脏病检测筛查等
    发表于 08-06 09:21

    一种同时定位地图构建的仿真系统

    基于近年来流行的移动机器人同时定位地图构建的方法,提出了一种仿真系统,详细地描述了系统的定义模型结构和运行方式流程。系统中采用了一种基于线性特征的环境
    发表于 06-26 08:13 13次下载

    基于VSLAM的移动机器人三维定位地图构建

    移动机器人在探索未知环境且没有外部参考系统的情况下,面临着同时定位地图构建( SLAM)问题。针对基于特征的视觉SLAM( VSLAM)算法
    发表于 11-24 16:33 23次下载
    基于VSLAM的移动机器人<b class='flag-5'>三维</b><b class='flag-5'>定位</b>与<b class='flag-5'>地图</b><b class='flag-5'>构建</b>

    改进ORB特征点匹配算法

    针对定向二进制简单描述符( ORB算法不具备尺度不变性的问题,提出一种结合快速鲁棒性特征( SURF)算法ORB的改进
    发表于 12-15 17:15 21次下载

    机器人SLAM实现

    针对复杂环境下机器人的同时定位地图构建( SLAM)存在实时性与鲁棒性下降等问题,将一种基于ORB特征点的关键帧闭环检测匹配
    发表于 03-26 10:57 6次下载

    一种可在动态环境下构建语义地图算法

    三维语义地图在移动杌器人的导航、路径规划、智能抓取、人机交互等任务中有着关键的作用,因此如何实时地构建三维语义地图尤为重要。当前同时
    发表于 05-07 14:56 4次下载

    基于双目视觉立体匹配的三维地图构建方法

    摘要:针对基于双目深度图的室外大规模地图构建计算冗长,而在无人系统的有限算力下,计算效率需求显著的情况,文中提出一种基于双目视觉立体匹配的三维地图
    的头像 发表于 08-10 11:38 2111次阅读

    工程实践中VINS与ORB-SLAM的优劣分析

    ORB-SLAM是一种基于特征的单目视觉SLAM系统,广泛用于实时三维地图构建和机器人定位。该系
    的头像 发表于 04-08 10:17 363次阅读
    工程实践中VINS与<b class='flag-5'>ORB</b>-SLAM的优劣分析