基于OptiTrack跟踪系统和Turtlebot机器人的视觉SLAM定位评估

本文旨在介绍使用OptiTrack光学跟踪系统和Turtlebot机器人进行视觉SLAM定位实验的详细流程,包括实验平台搭建过程、数据处理过程以及SLAM估计评估方法。由于涉及知识较多,部分内容只给出了相关参考博文链接。

1 实验平台搭建

实验平台包括OptiTrack光学跟踪系统和Turtlebot数据采集平台两部分,OptiTrack系统用于获取机器人运动轨迹真值,Turtlebot数据采集平台用于录制图像数据。

1.1 OptiTrack光学跟踪系统介绍

OptiTrack是美国公司NaturalPoint公司研制的高性能光学跟踪系统,可以获取场地中物体的亚像素级位置,目前TUM等公开数据集的轨迹真值均通过OptiTrack系统获取。OptiTrack由固定在场地上方的多个Prime相机、荧光标记球、Motive处理软件组成,使用过程中,将多个荧光标记球粘在物体上,Prime相机以每秒数百帧的速率拍摄荧光标记球,Motive实时地解算出物体在场景中的位姿。OptiTrack系统的原理如图所示。

1.2 Turtlebot数据采集平台介绍

本实验所使用的Turtlebot数据采集平台如图所示,共由五部分组成:笔记本、Turtlebot机器人、深度相机、荧光标记球、游戏手柄。其中笔记本是该平台的核心,用于向各设备发送指令,实现数据采集平台的各项功能;Turtlebot机器人是一款轻量级机器人开发套件,在实验中作为移动平台;深度相机是机器人的传感器,在实验中用于录制深度和彩色图像数据;荧光标记球用于结合OptiTrack系统获取机器人位姿;无线游戏手柄用来控制机器人的运动。各个设备均通过笔记本相连。

1.3 实验平台搭建:

只有知道轨迹和图像的时间戳,才能知道轨迹与估计轨迹之间的对应关系,进而评估SLAM系统的定位性能。OptiTrack系统估计的位姿输出在上位机上,而相机图像数据输出在Turtlebot机器人搭载的笔记本上,需要将位姿数据传输到笔记本上,通过ROS统一录制数据,实现图像与位姿之间的匹配。详细配置过程见:Optitrack与ROS详细教程以及Motive的使用_如何在另一台电脑使用激活过optitrack的motive软件-CSDN博客。这里只介绍其工作原理:

上图中,上位机安装有Motive软件,通过交换机获取OptiTrack系统的数据。通过Motive软件中的设置,将机器人位姿数据经过路由器发布在局域网中。Turtlebot机器人搭载的笔记本通过局域网获取机器人位姿数据,并用ROS的rosbag工具录制深度相机话题和位姿话题。可能用到的命令包括:
配置笔记本防火墙的命令:(只需要配置一次)

sudo ufw status   #查看防火墙
sudo ufw enable   #打开防火墙
sudo ufw disable  #关闭防火墙

开始发布optiTrack位姿的命令,其中192.168.1.104 为路由器的ip地址,笔记本需要通过wifi连接在路由器的局域网中

roslaunch vrpn_client_ros sample.launch  server:=192.168.1.104 #获取optiTrack位姿数据

开始发布Realsense相机的RGB-D图像的命令,其中s_d435_camera_our.launch为编写的launch文件,它记录了各种ros命令以及参数配置信息,需要认真配置该文件,确保发布的数据“深度-彩色匹配”后的图像。filters:=colorizer是指发布的深度图像的格式,这里是指彩色表示深度值的大小。

roslaunch realsense2_camera rs_d435_camera_our.launch filters:=colorizer #发布realsense相机的图像话题

使用rosbag命令录制图像数据与位姿数据,并保存为test.bag文件。其中/camera/color/image_raw为彩色图像话题名称, /camera/aligned_depth_to_color/image_raw 为深度图像话题名称, /vrpn_client_node/RigidBody1/pose为optiTrack位姿的话题名称,各名称需要根据实际情况修改。-O test是指将数据保存为test.bag。

rosbag record subset /camera/color/image_raw  /camera/aligned_depth_to_color/image_raw  /vrpn_client_node/RigidBody1/pose -O test

2 实验设备标定:

2.1 Optitrack光学跟踪系统标定:

在使用OptiTrack光学定位系统前进行标定,标定有几个目的:其一相当于对软件的初始化,为了让系统确定摄像头的采集范围;其二确定软件内部坐标的精度,使软件根据数据生成一个3D空间;其三对所标记的物体进行空间坐标的计算。详细标定过程见:optitrack学习(3):动补系统校准与标定_optitrack标定-CSDN博客。标定后,在Motive中为机器人建立刚体,即可获取机器人的位姿。下图为软件运行结果,蓝色为四个Prime相机,绿线为相机对机器人的观测路径,下方为四相机观测到的红外图像。

2.2 相机标定:

深度相机在使用前需要进行标定,需要标定的参数有彩色摄像头的内参、深度摄像头的内参以及两者的外参。相机在使用前需要进行标定的原因是每个相机在加工制和组装过程中都会存在一定的误差,这使得每个相机的成像平面,相机坐标系都会略有不同,对相机标定后,可校正相机的畸变,获得更为精确的图像,从而能够更为准确的进行定位与建图。在实际使用过程中,一般只对彩色摄像头进行标定,其他采用厂商提供的默认参数即可。使用Matlab标定相机的过程可参考:基于MATLAB的单目摄像机标定_matlab相机标定-CSDN博客。

3 实验数据处理:

实验使用rosbag工具采集图像和位姿数据,需要将其转换为TUM数据集格式,才能进一步运行SLAM算法和评估轨迹精度。该过程包括两部分:其一为将图像保存为TUM格式,并使用TUM提供的associate.py实现深度图与彩色图之间的配准;其二为将位姿数据保存为TUM格式的轨迹真值groundtruth.txt。

3.1 RGB-D相机数据处理:

将.bag格式的图像数据转换为TUM格式数据的过程见本人之前的博文:ROS学习:制作自己的TUM数据集 - 古月居。该博文详细地介绍了转换过程、ROS程序、测试过程。转换结果如下图所示,包括深度图像depth、彩色图像rgb、深度图像路径depth.txt、彩色图像路径rgb.txt。

之后下载TUM提供的associate.py,实现深度图像与彩色图像之间的时间戳对齐,得到associate.txt

python  associate.py rgb.txt  depth.txt > associate.txt

3.2 Optitrack位姿数据处理:

将rosbag数据转换为TUM格式的轨迹真值groundtruth.txt的过程与3.1类似,也是编写一个ROS节点,订阅Optitrack位姿话题,并将数据保存在txt文件中。具体过程为:
1.编写optitrack2tum 节点,修改下文程序中的路径,并用catkin_make命令编译工作空间
2.运行optitrack2tum节点

点击基于OptiTrack跟踪系统和Turtlebot机器人的视觉SLAM定位评估 - 古月居可查看全文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/540714.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Meltano 将数据从 Snowflake 导入到 Elasticsearch:开发者之旅

作者:来自 Elastic Dmitrii Burlutskii 在 Elastic 的搜索团队中,我们一直在探索不同的 ETL 工具以及如何利用它们将数据传输到 Elasticsearch,并在传输的数据上实现 AI 助力搜索。今天,我想与大家分享我们与 Meltano 生态系统以及…

Python项目1 外星人入侵_记分

在本章中,我们将结束游戏《外星人入侵》的开发。我们将添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏。我们还将修改这个游戏,使其在玩 家的等级提高时加快节奏,并实现一个记分系统。阅读本章后,你将…

2024年【山东省安全员C证】考试资料及山东省安全员C证考试试题

题库来源:安全生产模拟考试一点通公众号小程序 山东省安全员C证考试资料考前必练!安全生产模拟考试一点通每个月更新山东省安全员C证考试试题题目及答案!多做几遍,其实通过山东省安全员C证作业模拟考试很简单。 1、【多选题】.设…

【计算机毕业设计】人事管理系统——后附源码

🎉**欢迎来到我的技术世界!**🎉 📘 博主小档案: 一名来自世界500强的资深程序媛,毕业于国内知名985高校。 🔧 技术专长: 在深度学习任务中展现出卓越的能力,包括但不限于…

二叉搜索树--搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m * n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,…

Python之旅(一)——常量、变量、动态类型

文章目录 Python背景知识Python用途Python的优缺点Python前景(钱景) 常量和表达式变量与类型变量的定义变量命名的规则变量的使用变量的类型整数 int浮点数 float字符串布尔其他(暂不介绍) 动态类型 标黄部分是和C语言不同的部分Python背景知…

在mysql中如何更新数据呢?

如何更新一条数据? 在 MySQL 中,更新一条数据可以使用 UPDATE 语句。以下是更新一条数据的基本语法: UPDATE table_name SET column1 value1, column2 value2,... WHERE condition;其中: table_name:要更新的表的…

Git以及Gitlab的快速使用文档

优质博文:IT-BLOG-CN 安装git 【1】Windows为例,去百度下载安装包。或者去官网下载。安装过秳返里略过,一直下一步即可。丌要忉记设置环境发量。 【2】打开cmd,输入git –version正确输出版本后则git安装成功。 配置ssh Git和s…

测试接口时出现HttpMessageNotReadableException: Required request body is missing

问题 测试接口时出现org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing异常 原因 发送请求时没有传参数 解决办法 第一种方式: 传个参数 第二种方式:给个空的JSON

常见的垃圾回收器(下)

文章目录 G1ShenandoahZGC 常见垃圾回收期(上) G1 参数1: -XX:UseG1GC 打开G1的开关,JDK9之后默认不需要打开 参数2:-XX:MaxGCPauseMillis毫秒值 最大暂停的时间 回收年代和算法 ● 年轻代老年代 ● 复制算法 优点…

Sam Altman新动向!被曝公开撬金主微软的客户!

Sam Altman向大公司们推销ChatGPT企业版,这其中包括一些微软的客户! 好好好! 你小子怎么回事!金主的客户也不放过了是吧! 根据路透社4月12日的报道,OpenAI首席执行官Sam Altman本月在旧金山、纽约和伦敦举…

HTML5+CSS3小实例:荧光图标悬停效果

实例:荧光图标悬停效果 技术栈:HTML+CSS 字体图标库:font-awesome 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=d…

【Qt 学习笔记】QWidget的windowOpacity属性 | cursor属性 | font属性

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ QWidget的windowOpacity属性 | cursor属性 | font属性 文章编号&#…

抖音视频无水印采集拓客软件|视频批量下载提取工具

抖音视频无水印批量采集拓客软件助力高效营销&#xff01; 随着抖音平台的崛起&#xff0c;视频已成为各行各业进行营销的重要工具。但是&#xff0c;传统的视频下载方式往往效率低下&#xff0c;无法满足快速获取大量视频的需求。针对这一问题&#xff0c;我们开发了一款视频无…

Springboot+Vue项目-基于Java+MySQL的校园管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

基于公共转点的Alpha shapes有序边缘点提取

1、原理介绍 由Edelsbrunner H提出的alpha shapes算法是一种简单、有效的快速提取边界点算法。其克服了点云边界点形状影响的缺点,可快速准确提取边界点,其原理如下:对于任意形状的平面点云,若一个半径为a的圆,绕其进行滚动,其滚动的轨迹形成的点为轮廓点。需要注意的是,…

一文读懂Java中的WebEndpointProperties类(附Demo)

目录 前言1. 基本知识2. Demo3. 彩蛋 前言 对于Java的相关知识&#xff0c;推荐阅读&#xff1a;java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09; 1. 基本知识 Spring Boot 的配置类 WebEndpointProperties&#xff0c;用于配置 Web 端…

Flutter仿Boss-7.首页列表

效果 考察使用 Flutter Model的创建TabBar及TabBarView 的使用标签Wrap控件的使用列表ListView的使用 具体实现 今天懒的写文字了&#xff0c;想看具体实现的可以直接去我的github上&#xff1a; github&#xff1a;github.com/yixiaolunhui/flutter_project

Flutter第九弹 构建列表元素间距

目标&#xff1a; 1&#xff09;Flutter Widget组件之间间距怎么表示&#xff1f; 2&#xff09;列表怎么定义子项之间间距&#xff1f; 一、间距的表示组件 列表组件的间距一般采用固定间距&#xff0c;间距占据可见的空间。 已经使用的表示间距的组件 Spacer&#xff1a…

什么是NLP?

&#x1f916;NLP是什么&#xff1f;&#x1f916; NLP&#xff08;Natural Language Processing&#xff09;&#xff0c;全称自然语言处理&#xff0c;是人工智能不可或缺的一环&#xff0c;它搭建了人与计算机之间沟通的桥梁&#x1f309;。 &#x1f6e0;️NLP强大功能一…