草庐IT

运动捕捉系统原理

您家豆子 2023-03-28 原文

一、什么是运动捕捉

运动捕捉是记录物体或人的运动的过程,也被称作动作捕捉或动捕。该技术还涉及尺寸测量、物理空间里物体的定位及方位测定等能够借助计算机直接处理的数据。这一技术广泛应用于机器人、无人机、多智能体集群协同控制、军事、医疗、体育、科研及电影、动画、游戏、虚拟直播领域。从技术原理层面区分,可以将动捕分为:光学式、惯性式、机械式、声学式和电磁式。其中机械式、声学式、电磁式动作捕捉系统,随着时代的发展,受限于自身各种缺点,已逐渐淘汰出市场,现在行业中普遍使用红外光学动作捕捉或惯性动作捕捉。

1.惯性动作捕捉

惯性导航传感器、信号接收器以及数据处理系统构成了惯性传感器式动作捕捉系统。将姿态传感器穿戴在人体各个主要肢体部位,可将姿态信号无线传输至数据处理系统进行运动解算。其中姿态传感器集成了惯性传感器、重力传感器、加速度计、磁感应计、微陀螺仪等元素,得到各部分肢体的姿态信息,再结合骨骼的长度信息和骨骼层级连接关系,计算出关节点的空间位置信息。

优点:
便携且操作简单,可在户外使用。

缺点:
· 定位不准——通过肢体姿态信息进行积分运算得到的空间位置信息具有不同程度的积分漂移,且一些传感器还会被周围环境磁场影响进而影响精度;
· 续航力弱——充电一次后可持续工作时间有限,不适合长时间使用;
· 数据漂移——原理本身基于单脚支撑和地面约束假设,无法进行双脚离地的运动定位解算;
· 动作受限——传感器自身重量和线缆连接还是会对演员的动作表演造成一定约束;
· 成本翻番——尤其在被捕捉对象数量增加时,设备的成本直接成倍增长,丧失价格优势。

2.光学式动作捕捉

通过布置在场地内的多个光学镜头从不同角度捕捉固定在人体/物体表面的反光标识点的位置信息,捕捉其动作姿态。根据被捕捉物/人不同的特征,还可将光学动捕分成无标记点式光学动作捕捉系统、标记点式光学动作捕捉系统。

(1) 无标记点式光学动作捕捉原理:

· 第一种是基于普通视频图像的运动捕捉,通过提取人体关节点在二维图像中的坐标,再根据多相机视觉三维测量计算关节的三维空间坐标。
· 第二种是基于主动热源照射分离前后景信息的红外相机图像的运动捕捉,也称为热能式动作捕捉,原理和第一种类似。
· 第三种是三维深度信息的运动捕捉,系统基于结构光编码投射实时获取视场内物体的三维深度信息,根据三维形貌进行人形检测,提取关节运动轨迹。

总体而言,无标记点式动作捕捉目前仍存在动捕精度低、动作变形等问题。

(2) 标记点式光学动作捕捉原理:

标记点式光学动作捕捉系统凭借多个光学相机从各个角度捕捉黏贴在被捕捉物/人关键节点部位的Marker点,并实时传输到数据处理工作站,利用三角测量原理计算出该点精确的空间坐标,再结算出骨骼的六自由度运动。无论主动式还是被动式光学动捕都是以标记点的类型为依据进行的分类。

a.主动式

使用LED作为标识点,在人体关节部位黏贴LED之后再通过线缆连接,为电源供电。

优点:
跟踪准确率较高,识别鲁棒性好。且自带光源,因此可在室内、室外使用,不受场地限制。

缺点:
· 运动变形——时序编码的LED识别原理是依赖相机在各个时刻对多个的标记点采集成像标识ID,破坏了同步性,而且有效动作帧的采样率偏低,不适合捕捉快速动作及数据分析;
· 精度较低——LED标识点的可视角度小,一个光学动捕镜头的内部往往集成了两个相机近距离采集,而此类窄基线结构直接影响视觉三维测量的精度;
· 成本加倍——同上一个问题,运动时难免出现动作遮挡导致数据缺失,想要解决遮挡盲区的问题,只有成倍增加镜头的数量,而设备成本也随之上涨;
· 人数受限——还是受到时序编码原理的局限,系统只能承载一定数量的标识点,通常同一时间最多不要超过2个人进行动捕采集。

b.被动式

被动式光学动作捕捉系统中使用反光标识点黏贴在被捕捉物/人身上关键节点部位,光学动捕相机发出的红外光由marker表面反光涂层反射到动捕相机中以对该点进行三维空间内的定位。

优点:
技术成熟,高精度、高采样率、低延迟且定位精准,动作表演无障碍,且标记点成本低能够灵活增加、布点,水下环境也可适用。

缺点:
· 环境约束——被动式marker点自身不发光,通过调节光学相机阈值进行采集,阳光直射或其他反射物的干扰会影响捕捉效果;
· 不抗遮挡——反光标记点一旦在运动时被完全遮住,会造成动作错位,需要后期人工修复数据,或者使用光惯混合的方式避免遮挡。

性能 惯性式 无点式 主动式 被动式
定位精度
采样频率
数据质量
快速捕捉能力
被捕捉物数量
运动范围
受干扰物 铁磁体 阳光、热源 强光源 阳光
便捷度
适用性

二、光学式动作捕捉系统的构成

 

1.红外光学镜头

作为光学动捕系统的主角,光学摄像头的分辨率、频率与视场角直接影响了整个动捕系统的精度和效果。

(1)镜头分辨率

反光标记点在镜头的画面中是以像素的形式呈现,而像素圆形的中心点则作为该点的二维坐标。由此可见,只要这一像素图形越圆润,其中心点的坐标就越准。

因此,相同条件下,1200万像素镜头采集到的数据精度远远高于分辨率130万像素的镜头。

(2)镜头频率

镜头频率,或称帧速率,是指画面每秒被刷新的帧数,即图形处理器一秒内刷新的次数。其单位通常用fps表示,或用Hz来表示。光学镜头的帧速率越高,意味着捕获的图像信息越多,那么被捕捉人/物的三维空间数据精度更高,动作更为流畅。

(3)镜头视场角

视场角是指以光学镜头为定点,以被捕捉物可通过镜头的最大范围的两条边缘构成的夹角。这个角度代表了光学镜头的视野范围。根据镜头分类,有两种类型:广角镜头、非广角镜头。它们的区别如下:

镜头类型 可视距离 视场角范围
广角镜头
非广角镜头

如图所示,广角镜头的视野范围更为开阔,但一个反光标记点所占的像素数量相对较少。反观右侧视场角虽窄,但是采集到的数据精度却高于左侧。

不仅如此,广角镜头的边缘往往存在画面变形,如果被捕捉物处在边缘位置,二维坐标的提取精度也会受到影响。

2.反光标识点

反光标识点是一个实心小球,其内部没有任何电子元件,也不需要供电或连接线,它们的表面覆盖一层反光材料,以反射光学镜头产生的光。使用时通过调整相机自身阈值只对反光标识点进行采样,略掉周围其他物体。

3.软件及配件

包括动作捕捉操作及分析处理软件、POE交换机及固定装置等配件。

三、应用场景

NOKOV度量光学三维动作捕捉系统,采用高精度、低延迟的红外摄像头捕捉反光标识点,采集并生成精准、实时的动作信息,可广泛应用于:

1.机器人&工程方向

红外光学动作捕捉系统往往作为可靠的室内定位手段,为各类智能体,比如无人机、小车、移动机器人、机械臂等提供高精度、低延迟的三维空间位置信息,还可为机器学习验证真值的准确性

2.电影、CG动画、游戏方向

在电影制作和视频游戏开发中,光学动捕系统可用于记录动捕演员的动作,并使用该信息来驱动二维、三维CG动画角色。除了肢体动作,还会对演员面部表情、手指细微动作进行捕捉。

3.虚拟主播、虚拟直播方向

对比游戏、CG动画等要求高精度实时捕捉真人运动数据,虚拟直播或虚拟路演注重实时性及稳定性,以确保在较长时间播出中,虚拟主播、虚拟偶像依旧保持完好的形象和流畅的动作。

4.运动分析、运动康复方向

运动分析及运动康复方向通常会和测力台、肌电等设备数据同步,以获取运动学数据并结合力学、解剖学共同分析。

5.虚拟现实方向

在虚拟现实应用场景中,光学动捕系统会对头盔或手柄及相应配件进行定位,而且介于VR方向场景差别巨大,更要求丰富的产品线及定制化解决方法以满足各类需求。

动作捕捉相关案例:

https://www.nokov.com/support/case_studies.html

 

 

 

 

有关运动捕捉系统原理的更多相关文章

  1. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  2. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  3. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  4. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  5. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  6. ruby - 以毫秒为单位获取当前系统时间 - 2

    在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:

  7. ruby-on-rails - 如何构建复杂的 Rails 系统 - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我们有以下(以及更多)系统,我们将数据从一个应用推送/拉取到另一个:托管CRM(InsideSales.com)Asterisk电话系统(内部)横幅广告系统(openx,我们托管)潜在客户生成系统(自行开发)电子商务商店(spree,我们托管)工作板(本土)一些工作网站抓取+入站工作提要电子邮件传送系统(如Mailchimp,自主开发)事件管理系统(如eventbrite,自主开发)仪表板系统(大量图表和

  8. ruby-on-rails - Rails 3,在RAILS_ROOT上方显示来自本地文件系统的jpg图片 - 2

    我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。

  9. ruby - 我可以从 Ruby 中的系统调用中获得连续输出吗? - 2

    当您在Ruby脚本中使用系统调用时,您可以像这样获得该命令的输出:output=`ls`putsoutput这就是thisquestion是关于。但是有没有办法显示系统调用的连续输出?例如,如果您运行此安全复制命令,以通过SSH从服务器获取文件:scpuser@someserver:remoteFile/some/local/folder/...它显示随着下载进度的连续输出。但是这个:output=`scpuser@someserver:remoteFile/some/local/folder/`putsoutput...不捕获该输出。如何从我的Ruby脚本中显示正在进行的下载进度?

  10. u盘安装系统(win10为例) - 2

    下载微PE工具箱进入官网下载微PE工具箱-下载 安装好后,打开微PE工具箱客户端,选择安装PE到U盘 PE壁纸可选择自己喜欢的壁纸,勾选上包含DOS工具箱,个性化盘符图标 下载原版系统进入网站下载镜像NEXT,ITELLYOU如果没有账号,注册一下就好进入选择开始使用选择win10 这里我们选择消费者版,用迅雷把BT种子下载下来 下面的两个盘符,是PE工具箱安装进U盘后,分成的盘符,注意EFI的盘符,这里面不能删东西,也不能添东西,另一个盘符可以当做正常的U盘空间使用,我们现在需要把下载下来的景象文件复制到正常的U盘空间中去 这个时候我们的系统U盘就只做好了 安装系统我们将U盘插入电脑,开机,

随机推荐