问题的引出:AMCL的初始位姿通常要求用户手动输入,或者机器加载上一次保存的位姿。AMCL中自带的全局定位服务(globalLocalizationCallback)实际中基本很难用得上。

问题解决思路:相机在回环检测中具有比较大的优势,那么是不是可以通过搭载一个相机来辅助AMCL实现自动全局定位呢?

~~~~~~~~~~~~下面说说如何实现(相机回环辅助AMCL全局定位)~~~~~~~~~~~~

1.采集图像和位姿

移动机器人激光SLAM(激光同步定位和建图)过程中,检测轮式里程计输出,大概相对位移发生≥0.5m或相对角度发生≥10度,则同时采集保存一张当前图像和当前时刻机器人的位姿,直到整个室内环境行走一遍,则建立图像(images + pose.txt)结束(尽量多走不同的点,这样拍到的照片覆盖多,有利于增加回环的高检测率)。

2.构建DBOW3词典和图像单词

通过上一步骤采集的images,调用DBOW3构建词典和images对应单词

#include "DBoW3/DBoW3.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <iostream>
#include <vector>
#include <string>/*功能:利用图片构建Dbow词典输入:环境下所有图像输出:词典(详细说明查找dbow库说明)*/int main( int argc, char** argv )
{// read the image std::cout<<"reading images... "<<std::endl;std::vector<cv::Mat> images; for ( int i=0; i<15; i++ ){std::string path = "/home/yuan/gosuncn/vscode/VLocation/images_map/"+std::to_string(i)+".png";images.push_back( cv::imread(path) );}// detect ORB featuresstd::cout<<"detecting ORB features ... "<<std::endl;cv::Ptr< cv::Feature2D > detector = cv::ORB::create();std::vector<cv::Mat> descriptors;for ( cv::Mat& image:images ){std::vector<cv::KeyPoint> keypoints; cv::Mat descriptor;detector->detectAndCompute( image, cv::Mat(), keypoints, descriptor );descriptors.push_back( descriptor );}// create vocabulary std::cout<<"creating vocabulary ... "<<std::endl;DBoW3::Vocabulary vocab(10, 5);//设定 tree branchs deepthvocab.create( descriptors );// create words of imagesDBoW3::Database db(vocab);for (size_t i = 0; i < descriptors.size() ; i++){db.add(descriptors[i]);}//save vocabulary and words std::cout<<"vocabulary info: "<<vocab<<std::endl;vocab.save( "vocabulary.dbow3" );db.save("database.db");std::cout<<"done"<<std::endl;return 0;
}

主要使用到库DBOW3(相机回环)(关于该库的具体使用和原理可以参考https://github.com/rmsalinas/DBow3)


保存词典和单词

3.相机回环检测和AMCL全局定位

3.1.移动机器人开机启动加载步骤2中保存的词典(11ocabulary.dbow3)和全部图像对应的单词(11database.db);

3.2.接收当前相机拍到的图像(currentImage),调用DBOW3库在images进行回环检测;

3.3.回环检测成功的图像(loopImage),调取loopImage在images中的索引号index;

3.4.读取索引号index在步骤1中保存的pose.txt对应的位姿poseLoop;

3.5.计算currentImage与loopImage相对位姿(orb特征检测,最好使用深度相机或双目,这样的话求depth没那么累-);

3.6.获取currentImage位姿pose,直接发送给initialpose topic(AMCL中的);

注:实验中不计算3.5步骤,直接以loopImage对应的Pose 发送给AMCL的initialpose ,似乎效果也不错。
~~~~~~~~这步骤的代码由于一些原因就不贴了,反正也简单,大家理一理就会啦~~~~~~~

欢迎各位爱好者留言和加微信讨论(15112119047)

深入AMCL(四):相机如何辅助AMCL自动全局定位相关推荐

  1. 机器人学习--定位算法AMCL全局定位方案

    ROS中已经集成了AMCL(自适应蒙特卡洛定位)的解决方案,按照要求测试一般都没问题. 源码或者相关细节分析参考:机器人学习--定位算法AMCL详解_GGY1102的博客-CSDN博客_amcl定位 ...

  2. stm32 火灾自动报警及联动控制源码_中级消防设施操作员关键技能之十四:能测试火灾自动报警系统联动功能...

    点击蓝字 关注我们 中级消防设施操作员关键技能 之十四: 能测试火灾自动报警系统联动功能 火灾报警控制器和消防联动控制器的设置要求 01 1.火灾报警控制器和消防联动控制器,应设置在消防控制室内或有人 ...

  3. uniapp微信小程序自定义相机 ,给相机添加辅助框,解决拒绝相机默认授权后无法再次拉起相机授权问题

    微信小程序自定义相机 效果 文章目录 微信小程序自定义相机 效果 需求 一.小程序自定义相机 1.使用uniapp的camera组件 二.使用cover-view,cover-image加辅助边框 三 ...

  4. 分享个隐世录脚本工具,辅助挂机自动脚本刷材料副本刷经验

    分享个隐世录脚本工具,辅助挂机自动脚本刷材料副本刷经验 隐世录如果玩家需要刷很多材料来培养角色,还是比较耗费时间的,而且一些副本都可以用脚本工具自动完成节省时间,例如红手指云手机就有很多免费游戏脚本可 ...

  5. 自动驾驶丨吉利选择Zenuity为其辅助和自动驾驶软件首选供应商

    [TechWeb]6月20日消息,据路透社报道,吉利已选择沃尔沃与瑞典科技集团Veoneer组建的合资企业Zenuity,作为其辅助和自动驾驶软件的首选供应商. 吉利的这笔交易涵盖了吉利汽车(Geel ...

  6. 美国佛罗里达州将允许无驾驶员辅助的自动驾驶汽车路测

    [TechWeb]6月18日消息,据国外媒体报道,美国佛罗里达州州长Ron Desantis日前签署议案,允许科技公司7月1日后在佛罗里达州进行无驾驶员辅助的自动驾驶汽车路测. Waymo自动驾驶汽车 ...

  7. IMU, 自动驾驶定位团队“小而美”的队员

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨11号线人 来源丨 十一号组织 自动驾驶定位团队中有位高权重的九代长老GNSS,有颜值担当的华山 ...

  8. 竞赛无人机搭积木式编程(三)---用户自定义航点自动飞行功能(全局定位,指哪打哪)

    竞赛无人机搭积木式编程(三)---用户自定义航点自动飞行功能(全局定位,指哪打哪) 无名小哥 2023年6月10日 用户通过对前面两讲中全国大学生电子设计竞赛真题植保无人机(2021).送货无人机(2 ...

  9. antd tree搜索并定位_自动驾驶定位思考

    最近在做高精地图方面的工作,有一些疑问,这里把一些想法记录下来,希望能够抛砖引玉,对大家有所帮助. 高精地图的作用:一方面为我们提供地理位置信息,另一方面也为我们提供道路的辅助信息(红绿灯,路口,道路 ...

最新文章

  1. mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
  2. [转]Python 列表(List) 的三种遍历(序号和值)方法
  3. 【渝粤教育】 国家开放大学2020年春季 1443卫生信息与文献检索 参考试题
  4. python post 上传文件_如何在 Python 中模拟 post 表单来上传文件
  5. Qt学习笔记-各种对话框基本使用
  6. 高并发场景下,如何保证生产者投递到消息中间件的消息不丢失?
  7. okhttp3 ExceptionInInitializerError 异常处理
  8. export project from intellij to myeclipse
  9. Python利用os.walk遍历文件夹
  10. Python超市商品管理系统
  11. Javaweb安全——Java类加载机制
  12. android怎么防8门神器,八门神器(GameKiller)怎么用?安卓版使用教程
  13. 在深圳,想转行学IT到...
  14. C#+GDAL读取影像(1)
  15. python画图分析问卷(含多选题)
  16. Verilog——半加器详解
  17. 刘雨昕成为Swisse斯维诗胶原蛋白系列代言人
  18. 图难于其易,为大于其细。天下难事,必作于易;天下大事,必作于细--《道德经》...
  19. 如何使用手机将图片改成JPG格式?教你一招解决
  20. win10安装PS和AI后报代码为16的错误解决方法

热门文章

  1. 【指针】*p++、(*p)++、*++p、++(*p)都是什么东西?
  2. 谷歌浏览器提示“要恢复页面吗?Chrome未正确关闭”
  3. ActiveX控件打包、签名、嵌入详解
  4. 越南用户最受欢迎的付款方式
  5. 《白帽子讲WEB安全》学习笔记之第9章 认证与会话管理
  6. win10+vs2019配置lite.ai.toolkit预编译库
  7. 安卓Android开发:使用AudioRecord录音、将录音保存为wav文件、使用AudioTrack保存录音
  8. Spring系列之Spring Web MVC-20
  9. 微软黑屏补丁_微软鬼才,又做了一款跳水神机
  10. SwaggerUI增加公共的Global全局Header