基于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定位评估 - 古月居可查看全文

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第26题删除有序数组中的重复项

题目&#xff1a; 题解&#xff1a; func removeDuplicates(nums []int) int {n : len(nums)if n 0 {return 0}slow : 1for fast : 1; fast < n; fast {if nums[fast] ! nums[fast-1] {nums[slow] nums[fast]slow}}return slow }

window10轻松使用k8s

Docker Desktop安装篇 1、win10安装 1、下载安装包 https://www.docker.com/products/docker-desktop/ 官网下载安装包 2、配置win10支持虚拟化 不勾选Hyper-V&#xff0c;容易出错 3、安装WSL配置window支持linux Windows Subsystem for Linux (WSL) 安装 Linux 子系统&am…

嵌入式sqlite3交叉编译移植

操作系统:Ubuntu20.04 下载sqlite3代码,下载版本3.30.00 wget https://www.sqlite.org/2019/sqlite-amalgamation-3300000.zip 或者https://download.csdn.net/download/benico/89127678 为什么下载amalgamation版本,不下载autoconf版本? 根据我的编译实验,同版本sql…

python爬取京东商品信息与可视化

项目介绍&#xff1a;使用python爬取京东电商拿到价格、店铺、链接、销量并做可视化 ........................................................................................................................................................... 项目介绍效果展示全部…

数据库系统概论(超详解!!!)第四节 数据库安全性

问题的提出&#xff1a; 数据库的一大特点是数据可以共享 数据共享必然带来数据库的安全性问题 数据库系统中的数据共享不能是无条件的共享。 1.数据库的安全概述 数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏 。 系统安全保护措施是否有效…

C语言:约瑟夫环问题详解

前言 哈喽&#xff0c;宝子们&#xff01;本期为大家带来一道C语言循环链表的经典算法题&#xff08;约瑟夫环&#xff09;。 目录 1.什么是约瑟夫环2.解决方案思路3.创建链表头结点4.创建循环链表5.删除链表6.完整代码实现 1.什么是约瑟夫环 据说著名历史学家Josephus有过以下…

C/C++基础----判断和循环

判断 if-elseif-else判断 语句&#xff1a; 条件使用之前的逻辑运算符或者关系运算符 if(条件1){条件1成立时内容 }else if(条件2){条件2成立时内容 }else{所有条件不成立时内容 }#include <iostream>using namespace std;int main() {int age 10;if (age > 18) {c…

【C Hash Map from Redis】

将Redis源码中的哈希表底层逻辑提取&#xff0c;并进行最小demo级测试将对应文件抽出&#xff0c;通过宏替换等方式保证源码编译通过main.c编写测试demo &#xff0c;注册哈希函数和值比较函数&#xff08;必选项&#xff09; /* Hash Tables Implementation.** This file imp…

Java 原生代码获取服务器的网卡 Mac 地址、CPU序列号、主板序列号

1、概述 Java 可以获取服务器的网卡 Mac 地址、CPU 序列号、主板序列号等信息&#xff0c;用来做一些软件授权验证、设备管理等场景。 2、代码实现 package com.study.util;import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Scanner;/*** …

elasticsearch7安全配置--最低安全等级,用户名密码

上一篇博客在centos7上安装了elasticsearch7 接下来对elasticsearch进行安全方面的配置 minimal security 最低安全等级&#xff0c;用户名密码 首先开启xpack vim config/elasticsearch.yml xpack.security.enabled: true由于我是单机配置的&#xff0c;还加了如下配置 d…

SAP HCM GET pernr无法获取到数据二

今天遇到一个比较奇怪的问题&#xff0c;PA30能查到员工主数据&#xff0c;任何信息类型也没有错误&#xff0c;但是核算工资的时候发现无法找到此人。 但是核算工资无法核算 断点到逻辑数据get pernr&#xff0c;也不会进入断点 查看0000数据有间隔 具体错误的代码位置如下&am…

从 iPhone 上的短信中恢复已删除的图片的可靠方法

您可能在浏览消息聊天时不小心删除了一些文本和照片。事实上&#xff0c;如果这些消息对你来说意义重大&#xff0c;那对你来说可能会很麻烦。当发生意外情况时&#xff0c;您可能不想恢复整个聊天&#xff0c;而是恢复其中的附件。 好了&#xff0c;这篇文章主要是讲如何灵活…

Towards Street-Level Client-Independent IP Geolocation(2011年)(第二部分)

被引次数:306 Wang Y, Burgener D, Flores M, et al. Towards {Street-Level}{Client-Independent}{IP} Geolocation[C]//8th USENIX Symposium on Networked Systems Design and Implementation (NSDI 11). 2011. 接着Towards Street-Level Client-Independent IP Geolocati…

【数据恢复软件】:Magnet AXIOM V8.0

Magnet AXIOM V8.0重大更新 1、全新的UI设计 2、更快的相应速度 3、补全工件分析 4、支持亚马逊AWS云数据&#xff08; 获取同一帐户或安全帐户上下文中的快照。 支持Windows实例、加密卷和超过1 TB的卷、具有多个卷的实例等等&#xff01; &#xff09; 5、Bug修复 6、AI支持…

AI虽强,搜索引擎仍不可或缺

AI 领域正以前所未有的速度发展&#xff0c;大模型的发布变得愈发频繁&#xff0c;模型的规模也在持续扩大。如今&#xff0c;大模型的起点已经攀升至数十亿参数&#xff08;数十 B&#xff0c;B 是 Billion 的简写&#xff0c;10 亿&#xff09;&#xff0c;其功能之广泛&…

从零实现诗词GPT大模型:数据集介绍和预处理

本章将介绍该系列文章中使用的数据集&#xff0c;并且编写预处理代码&#xff0c;处理成咱们需要的格式。 一、数据集介绍 咱们使用的数据集名称是chinese-poetry&#xff0c;是一个在github上开源的中文诗词数据集&#xff0c;根据仓库中readme.md中的介绍&#xff0c;该数据…

使用阿里云试用Elasticsearch学习:使用内置模型 lang_ident_model_1 创建管道并使用

文档&#xff1a;https://www.elastic.co/guide/en/machine-learning/current/ml-nlp-deploy-model.html 部署刚刚下载好的内置模型 部署内存不够用 还得花钱&#xff0c;拉几把倒吧。就用自带的吧。 测试模型 POST _ml/trained_models/lang_ident_model_1/_infer {"doc…

错题记录-华为海思

华为 海思数字芯片 参考 &#xff1a;FPGA开发/数字IC笔试系列(5) 华为海思IC笔试解析 FPGA开发/数字IC笔试系列(6) 华为海思IC笔试解析 SystemVerilog Function与Task的区别 $readmemh与$readmemb这两个系统任务是用来从指定文件中读取数据到寄存器数组或者RAM、ROM中。除了…

IP地址修改步骤详解

IP地址是网络设备在网络中的标识&#xff0c;它决定了设备在网络中的位置与可访问性。然而&#xff0c;在某些情况下&#xff0c;我们可能需要修改IP地址&#xff0c;以满足特定的网络需求或解决网络问题。虎观代理将详细介绍IP地址的修改步骤&#xff0c;帮助读者更好地理解和…

HarmonyOS4-学习入门知识总结

简单的组件学习&#xff1a; /*** weip 自定义控件* 自定义构建函数也是需要充电的地方&#xff0c;分全局和局部的* 全局&#xff1a;需要添加function关键字 局部&#xff1a;不加function关键字* Styles function 自定义公共样式 分全局和局部* Extends(Text) 继承模式 只…