Vicon动作捕捉系统使用及其与ros通信

2023-10-10 06:50

本文主要是介绍Vicon动作捕捉系统使用及其与ros通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验室新进一套Vicon设备,闲置多日后被安排学习操作使用,并做一下数据传输到个人终端的工作,将近日学习使用的经验写下来。

关于VICON

Vicon是什么

Vicon光学动作捕捉系统是一种基于反射式的捕捉系统。它需要事先在被捕捉的人或者物体身上贴一种精致的反光球(Marker),当Vicon的摄像机发出的红外光打到反光球表面上时,反光球会反射同样波长的光给摄像机,反光球本身就是高反光率的材料,从而捕捉摄像机可以确定每个反光球的2D坐标,经过控制软件处理便可以得到它的3D坐标。并且由于Vicon的摄像机系列都是高速、高分辨率的,所以可以将每个反光球的运动轨迹清晰地记录下来,得到最终所需要的动作数据。实验室的Vicon设备由十二个“高级”红外摄像头,一台十二路交换机,一套软件组成。(包括Vicon的两个控制软件Nexus和Tracker,后面会讲两者的区别,还有一套读取数据的SDK,包括多种平台的,这边主要用的是Windows64)

Vicon怎么用

Vicon的两个软件(nexus和tracker)需要使用加密狗打开。然后使用流程如下



1、调节摄像头角度。手动去调节摄像头的位置,保证视野在中间偏下位置(安装时候已做好);

2、调节摄像头参数。在nexus软件中左边栏system-->properties

settings-->strobe intensity   控制发射红外线的强弱(数值越小,强度越弱),需要根据实际情况逐个调节,保证只有marker点稳定出现在视野中。

centroid fitting-->threshold  小于threshold的点被滤掉。

                      -->minimum...  最小...即小于xx的点被滤掉。

(在camera 视角下)以上操作调节每个摄像头画面的点,保证去除无效点,保留有效点,点击软件摄像头列表上方的保存设置,每次用都看一下有效点是否都在。

3、去除无效点。上一步的操作其实挺麻烦的,本质上是调节发射源来调整画面效果,多数情况下是在这一步中去除无效点。首先对于去除不掉的无效点可以使用笔&橡皮擦工具将其遮盖(也是对每一个摄像头画面逐个调整);简单一点的方法就是使用右侧tools-->mask cameras-->start 自动遮盖所有摄像头中的点(先把视野中的marker拿走),遮盖完后stop停止。(一步到位)

4、标定。每次实验之前,摄像头被动过之后,建立刚体模型时候,为了保证实验精度都要进行标定工作。

标定步骤:1、Tools-->Calibrate Cameras-->show Advanced  Wand为Active Wand V2

                  2、Tools-->Calibrate Cameras-->start(此时摄像头的指示灯都变为紫色)   

                 (在camera视角下)挥动标定杆。绕着实验室挥动标定杆一周,挥动过程中尽量保持标定杆水平,对着每一个摄像头逐个挥                          动。摄像头的状态由慢闪变为快闪表示其接收到的帧数越来越多,直到其指示灯变为绿色可换另外一个摄像头。将可能运动                       到的空间都走一遍。

                   3、所有灯都变过绿色后即可。查看image error是否小于0.3,若image error为0.3~0.5则重新挥动,若为0.5以上则需要调整摄                     像头参数

                   完成标定计算。

                  4、切回3D Perspective视角,发现此时的12个摄像机平面应该是斜着的。此时选中某个摄像头,将标定杆放置水平,开始设                       置坐标原点。Tools-->set volume origin-->start-->set origin   软件将以杆所在平面为地面,短轴为X轴,长轴为Y轴,右手法则                     定出Z轴,将会把所有摄像头拉回正常状态。

5、选择数据保存位置。双击打开Data Management 这一步是实验目录建立过程,所谓实验目录是指  dataset-->exprienment-->who-->day。双击黄蓝小球图标可以add数据库,选择创建路径。然后依次建立实验目录、人员目录、日期目录。必须有这几级目录之后才能继续操作实验。

6、建立刚体模型。

      ①marker贴到物体上置于检测空间中。

      ②软件左边subjects,新建空白模型,命名模型。

      ③选中Tools中的人形图标,subjects选择相应的模型-->subject capture-->start大概采集一秒即可,stop之后软件进入离线模式。

      ④切回到3D Perspective,视野中没有模型对象,点击工具栏中图标(灰色的不是蓝色的那个),重建三维模型。

      ⑤连接画面中的marker建立刚体。 Tools-->Labeling Template Builder , create segments (命名后) ---->  create  ,  在空间中点击               marker创建刚体(点击的第一个点到第二个点的连线为y轴正方向,第三个点与y轴正方向的垂线为x轴正方向,根据右手准则定出z方         向,其他的点随意。)

      ⑥右键左边的列表模型,save subject,保存模型数据。

      ⑦ Go Live ,进入实时状态,可以看到视野中的刚体模型。

7、采集数据。Tools--->第三个图标-->capture--->start开始记录。若刚体消失再出现时,marker的相对位置与已设置的配置相互匹配,自动识别出这是之前消失的刚体。stop停止记录。若继续start采集,则文件名+1保存。查看数据,在三级目录下面,****01是静态标定的数据

******02才是开始采集的数据

8、回访数据,补点。双击打开录制的数据,点击工具栏中的蓝色图标(蓝色的。。。),将刚体重建出来。点击画面左下角的play,播放采集的数据。补点操作是说利用软件的算法将运动过程刚体上丢失的点的轨迹补充出来,具有一定的不确定性,若非实验操作不当,最好不用。补点操作如下:Tools的第四个图标查看丢点,Gap Filling 若有丢点则会显示出来,补点类型有以下几种 Spline Fill(按前后轨迹补点)Pattern Fill(按运动轨迹相关的点进行补点)Rigid Body Fill(按运动轨迹相关的三个点进行补点)Kinematic Fill(做人体时用的补点方法)Cyclic Fill(往复循环的补点方法)。。。介绍这么多我都没用过,太麻烦啊。。简便方法:工具栏---->Auto Gap Fill(纯自动补点)

9、输出数据。Tools--->第五个图标---->Current Pipeline选择export data,最终将数据保存输出成csv格式,可以在数据库中查看到。

Tracker与Nexus的区别

 按照售后小曹的解释,Nexus与Tracker的区别就是一个(Nexus)体量大,可处理数据更多,但默认不是实时解算,也可以变成实时模式,这样它的延时就会变大,因此我在使用其自带的sdk查看数据时,在实时情况下只有marker的坐标,而没有刚体的旋转平移。另一个(Tracker)相对于前者就并不复杂,延时更低,可以做到实时解算,与前者不同的是,它只能处理刚体上的数据,也就是说如果Marker点丢失掉后,tracker就不会输出这些点的数据了,因此这个软件更适合实时控制。

VICON与ROS通信

这里为了省事直接用了开源的软件包 vicon_brigde   http://wiki.ros.org/vicon_bridge   ,在kinetic下面编译需要改一下cmakelist和packagexml,然后就可以直接用了,,orz,然而当初折腾了好久才把这个搞定,,就是因为我用的Nexus,不能实时得到数据,一直以为是ros包的问题,ethz早在ros刚兴起时便开源了这个软件,尽管现在wiki上还是indigo版本,也不影响使用的。后面有空需要改改代码,,因为早在做smsckf时就发现ethz提供的vicon数据中的pose都是TransformStamped格式,这个格式在rviz里面是不可见的,换一个话题发布就可以了。

 

 

参考资料:

http://www.omgl.com.cn/upfile/File/2011/BME/vicon%E4%BB%8B%E7%BB%8D.pdf

实验室学长笔记

这篇关于Vicon动作捕捉系统使用及其与ros通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/178727

相关文章

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图