无人机实验平台开发随笔(三)NOKOV Seeker软件配置

考虑到在上一篇文章中分析的结论,对于nokov和平台核心组件的数据传输反而可以放在相对次要的位置了,毕竟就算通过手动输入坐标也是可行的方案。

先前对硬件进行的调试,有必要进行一个总结,公司给予的文档中对问题的估计有限,基本上是要求用户按部就班来操作的,有些设置却没有写清楚,如果不去咨询客服难以知道设置方法,网络上也鲜有资料,希望写出来可以解决后续使用者的疑问。

Seeker和硬件系统的连接

一套动作捕捉系统由8台摄像机,若干连接线和交换机,一系列用于定位的marker反光点还有标定杆组成(一套包括L标定杆和T标定杆),在使用时至少要有三台摄像机布置在实验室外围,从而较为精准地建立实验场地的坐标系。这套设备可以用于动作捕捉和分析,也可以用于场地坐标点的定位,存在实时模式——实时捕捉场地中marker的位置,还有分析模式——将动作捕捉的文件进行后处理,也可以导出到其它软件进行分析。

在本场地中,由于面积有限,最终采用了6台摄像机分布于房间周围,摄像机通过网线与交换机相连,交换机连接电脑。厂家提供了Seeker设备用于连接摄像头。在使用之前,首先要将摄像头支架搭好,确保其稳定,将摄像头大致对准房间中央(可以后续调整)。

在本地连接进行设置,IPv4的地址设置为10.1.1.198(此处是否有效存疑),子网掩码255.255.255.0。

安装seeker。

无人机实验平台开发随笔(三)NOKOV Seeker软件配置

插入加密狗(随机器提供,u盘大小,若不插入则数据无法导入seeker),管理员模式运行seeker软件。注意此时就尽量关闭一切防火墙。

在工具—设置中选择Cameras标签,在Camera Network IP Address中选择10.1.1.198。在Calibration(标定时选项)中选择需要的坐标系形式(一般来说,仅影响数据的格式),单位等。在Tracking标签中,设置Min Cameras to use(最少镜头数量),一般设置为3即可。至此初始化设置基本完成。

无人机实验平台开发随笔(三)NOKOV Seeker软件配置

设置完成后,可以保存配置文件为.cal文件,后续加载配置文件即可。在Seeker下方有连接镜头选项,选择连接镜头,会提示镜头数量是否相符等信息,一般来说初次设置的时候镜头数量会不一样,观察后方xx cameras found中的数字和你实际接入的摄像头数是否一致——如果不同,则检查线路是否连接完好,如果相同点是即可。在初次设置之后,如果镜头数量不变,后续不会再提示数量不同。

连接镜头后,画面下方出现一排镜头编号,可以点击编号切换到相应的镜头观察。

注意:镜头在软件中的编号未必等于他显示在硬件上的编号,通常情况下是从小到大一一对应的,例如我使用了1,2,3,8号镜头,在软件上会分别对应1,2,3,4号。当然如果能选择相同编号的镜头,会更有利于后续调整角度。

点击播放键,镜头会进入实时模式,这时才可以在下方2d界面看到各个镜头的视野。由于尚未标定,软件也无法确定各个镜头之间的关系,因此3d画面上还没有有效信息。这时候建议把一些marker反光点放在各镜头前方,大体确认一下边界。注意镜头的视野绝不是平的,现实中的正方形在镜头里肯定是存在形变的,暂时还不用考虑这个问题。

在场地中没有反光点的情况下,画面上仍然可能存在噪点,这多半是因为场景中有一些物件在反光。仔细检查场景,看看有没有1.金属制品,如拉链,金属椅子;2.强烈的阳光或灯光,如射灯,窗户外的光等;3.地面是否平整,有没有可能反射光线。排除噪点是很麻烦的过程,因为人类很难想象在当前画面下存在的噪点具体在屋子的什么地方。

这里有个建议——设备附带了一个L标定杆用于挥舞,这个标定杆上有三枚反光点,在镜头中很清晰,可以一个人盯着屏幕,另一个人用标定杆在屋子里走,看看什么时候标定杆的三个点和噪点大致重合,那么这个位置和镜头连线的反向延长线上很可能有产生噪点的原因。

如果噪点确实难以排除,只能考虑遮罩——这是建立在软件层面上的,系统会忽略存在噪点的区域,如果遮罩过大会一定程度影响定位,建议画小一点。最后要做到场景中没有任何反光点,就算成功了。

遇到的几个问题和解决思路:

闪光的噪点:有些噪点会在屏幕上不断闪烁,这个有两种可能,一种是灯光产生了类似闪烁的效果,另一种也是最合理的是镜头光圈有问题,如果光圈过小可能使得进光量不足,有些应该稳定的亮点却闪烁了。这时候要到硬件上把光圈调大

成片的噪点:和上述相反,可能是光圈过大了,使得一些环境漫反射也被视为亮点,可以适当减小。这时候可以在屋里放几个反光点,光圈调整到成片的噪点消失,但是反光点能够清晰显示时即可。

无法遮盖的噪点:有些噪点定位到了,但是无论如何都找不到,这时候要抬头看看,噪点未必在地上,也有可能在空中。

当画面清晰,一片空白,就可以到下一步了。

标定

标定是能让捕捉系统建立坐标系的最重要的工作,如果不标定软件无法通过处理镜头的数据来给出结论。标定也是最为麻烦的部分。操作如下:

注意下方的镜头编号,在未标定的情况下,这些编号是白色的,标定中会变成黄色,标定成功会变成绿色。

无人机实验平台开发随笔(三)NOKOV Seeker软件配置

(上图为标定成功后的颜色,标定前是白色)

取出L型标定杆——就是那个巨大的黑色L型框,上面有一些反光点。这个标定杆的交点处就是未来坐标系的原点,长臂和短臂代表两条轴,从原点垂直向上是第三条轴,具体指哪一条取决于之前选的坐标系类型。把这个杆放在场地中央希望作为原点的地方。

点击播放,进入实时模式(如果已经是了就不需要了)

分别观察所有镜头的画面,如果之前噪点都消除或者遮盖了,那么每个画面上都应该刚好是四个点,不多不少也绝不闪烁。如果出现不止四个,请先减少噪点。注意出现闪烁也不可,去调整光圈。完成后及时保存配置文件。

接下来在2d画面上,让标定杆尽量处在画面中间偏下的部分,但无需偏下太多。左右一定不要偏,可能会导致L标定失败。 当然不要动L标定杆,去调整镜头角度来使得标定杆位置正确,建议两个人合作完成。具体怎么算正确呢面有个摸索出的办法可以验证。

根据文档,接下来就是在确保实时播放的情况下,点击左下角的calibrate开始标定。

无人机实验平台开发随笔(三)NOKOV Seeker软件配置

点击后选择第一个Initial Calibration,会进入L标定界面。由于先前已经确认过每个镜头的反光点都是4了,只需要点击Next即可。此时,如果你的标定杆在镜头中的位置正确,镜头的编号会变成黄色。

特别注意:如果镜头部分变黄,有一些仍然是白色,这通常说明L标定杆在镜头中的位置不合适,需要根据编号调整相应镜头的角度,重新进行L标定。但是,由于一个可能是软件BUG的设定,此时如果点击Previous,所有镜头(包括已经变黄的)编号都会变回白色,而再次点击Next来标定,所有镜头都不会变成黄色,后续标定也会失败。这很可能是一个软件BUG,因为此时即使完全退出Calibrate状态,再次选择Initial Calibrate,也不会修复,镜头仍然保持白色尽管L标定杆的位置没有问题。解决方案是保存配置文件,关闭seeker再重新运行,重新点击calibrate,镜头编号将正常变成黄色。

由于这个BUG存在,在L标定的过程中可能需要多次关闭seeker重新打开,但是先前能够变黄(也就是位置正确)的镜头后续也可以变黄,因此无需重复调整,最后一定会使得所有的镜头都变成黄色,L标定才算成功。

现在,所有镜头编号都变成黄色,可以继续标定了。将L标定杆移出场地(建议在标定杆处设置一些标记,如在地面上绘制坐标原点,因为你以后绝对不可能准确把L标定杆放回来),此时所有镜头上都不在有反光点。然后将T标定杆拿进场地尝试挥舞一下。T标定杆上有三个反光点,因此所有镜头上都应捕捉到三个点或少于三个点(被人遮挡),如果出现超过三个点,没办法,重新除噪点吧。这里有个小贴士,人身上或许也有能反光的部件,如金属拉链,务必确保衣服上没有影响标定的东西。

L标定后点击next进入T标定,在WandLength中输入T标定杆上黄色标签中写的数字,一般是500左右,不同杆有差异。Duration写标定时间,建议长一点,写120秒。挥杆人员拿着T标定杆站在场地中央,操作人员点击Next,然后点击镜头编号左侧的All on,让镜头画面全部显示出来。挥杆人员需要在120秒内在场地中不断挥舞标定杆,一边挥舞一边走动,争取让标定杆经过动作捕捉的所有区域——由于空间是三维立体的,空中和脚下也不要忘记挥舞。在屏幕上,每个镜头画面都被分为9个区域,每个区域如果捕捉到了标定杆,就会变成绿色。最终,要做到所有镜头的所有区域全部变绿才算成功,为此可能需要多次重复标定。部分镜头出现一个空白区域尚可接受,但是出现2个以上就会影响结果,务必重新标定。

时间到,或者帧数已经足够了之后,会自动跳出上一个界面。点击Next,软件会开始运算,运算时间可能较长。如果是初始配置,运算过程中将有可能报错,大体意思是“运算结果未能收敛”,3d画面会变得一片混乱。遗憾的是,无论是公司的文档还是网上资料都没提到解决方法。

通过和客服联系,问题得到解决。注意:在Calibration中的Lenses/Orientation中,请确认Focal是否有值,在初始阶段或者有些时候Focal中的值会是-1或者0,由于标定运算的时候需要用到Focal的值,错误的值毫无疑问会导致结果不收敛。如果有任何镜头的焦点不对,可以设置为8.0。也可以直接全部设为8.0作为初始值。

重设focal之后,再次标定和运算,经过约3分钟的计算之后,得出结果。此时观察Wand Length中的Avg值,和T标定杆上标签的值是否一致,这个值越接近则标定越准确,一般误差在小数点后2位就可以视为成功。(说明Nokov这套设备精准度还是很高的)

点击finish,标定完成,点击文件-保存配置文件,以后就可以通过读取配置文件,直接使用了。

标定以后,切勿移动任何摄像头,也绝对不要触碰它,由于标定精确度很高,一旦摄像头位置和角度改变可能需要重新标定

实时捕捉刚体姿态:

标定成功后,进入实时模式(点击播放),3d画面就可以显示场景中任何反光点,和精确的坐标了。接下来就只需要把反光点放在需要的位置,进行动作捕捉了。例如将反光点固定在无人机上。在非实时状态下,点击文件-new markerset可以建立一个markerset,后续坐标会以markerset各店坐标的形式广播出去。把画面中的点加入markerset,随意命名,调整颜色,然后保存markerset。进入实时模式后,场景中的markerset将可以自动被识别(如把无人机放在其中,加入drone.prop,就可以识别出markerset来),在实时模式中,markerset会无比清晰地显示在3d界面中,也可以选择把数据广播出去。由于我们不需要做动作捕捉,数据处理部分就略过不表了。

接下来是数据广播。厂家提供了VrpnServer用于建立vrpn服务器广播数据,操作比较傻瓜,只需要在seeker设置中,将SDK enable选中,在下方输入NIC address(官方给的是10.1.1.198,但是如果在实验室组网也可以另外设置,官方给的设置是可能是基于虚拟里使用的考量。)

让系统进入实时模式,然后双击运行VrpnServer,会要求输入address。和官方文档不同的是,这里需要输入两个,一个叫sdk nic address,另一个是local nic address。阅览了更新文档后,发现老版本中这里只需要输入一个nic address也就是之前设置的10.1.1.198,就可以自动识别sdk,现在要输入两个有可能是考虑用户需要自己组网。这里可能存在一个bug,就是虽然地址要输入两次,但是两次必须一样,否则都会直接闪退。如果两次一样,但是和设置的sdk nic address不同,则不会闪退,只显示sdk not found。bug存疑。

输入完毕后,显示找到了sdk,并显示出会广播出去的markerset的名称,然后要求输入坐标系类型。按照提示输入数字即可(如0代表ZXY坐标系),输入完成后,广播即开始了。

官方给的文档中,vrpnserver需要和seeker在一台电脑上,经过我的测试这个并不是必须的,如果实验室自组了以太网,只需要调整sdk nic address,设置为本机ip,另一台局域网内的主机也可以运行vrpnserver,输入seeker所在主机的ip,从而连接sdk,正常广播数据。但是另一方面,如果vrpnserver是在seeker所在的电脑上运行,则网络上另一台主机在试图连接vrpnserver的时候会报奇怪的错误(can‘t write cookie),我自始至终没能搞懂这个问题和cookie有什么关系,网上也没有任何一点相关的资料。如果根据官方文档来操作,则需要在seeker所在的电脑上另外安装ubuntu虚拟机,在上面用vrpn-client-ros来连接,这样并不会报上述错误,数据也可以正常传输到虚拟机上。按理来说虚拟机本来就是局域网上一个抽象的对象,我很难想象虚拟机在不同的主机上运行,一个会报错另一个则会正常。

会不会是防火墙的问题而关闭了所有的防火墙,错误依然存在。seeker所在的电脑配置较低,再跑一个ubuntu未免有点太慢了,因此不得不把虚拟机移动出来,个人感觉这个问题可能是因为虚拟机网络配置导致的,因为虚拟机在seeker所在机器上,他们肯定是在一个内部网络上的,但是如果虚拟机在另一台电脑上,则需要走一层网关才能到达虚拟机,也许可以通过虚拟机与外网直接桥接的方式来解决。不过既然确立了不考虑基于ros的硬件开发相关的问题,我暂时也不再深究这个错误,如果有可能的话,未来可以用一台实体ubuntu机器接入局域网,尝试一下数据传输是否正常。ros是基于订阅机制的,应该说没什么问题。

上面基本上就是nokov设备初始化的教程了。

来源:feilongzzz

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月27日
下一篇 2022年4月27日

相关推荐