Ubuntu 14.04.5系统上OpenPTrack V1版本双Kinect V2简单校准

参照Ubuntu 14.04.5系统上OpenPTrack V1版本安装配置(Kinect V2)配置安装完成后,是单台机器的方式。

如果场地比较大,则需要部署多个 Kinect V2。由于每台 Kinect V2看到同一个人的视角不同,因此需要校准,才能进行合并。

下面,我们用两台 PC+两个 Kinect V2(每台机器上连接一个 Kinect V2)来演示一下如何校准的操作。

原文中的校准是比较麻烦的,涉及到先校准单台 Kinect V2的操作,来提高精度,实际上操作可以跳过此步,原因在于最新的 OpenNI/ libfreenect驱动已经不需要这一步骤了,驱动内部已经处理了。

1.准备所需材料

准备校准纸,在源代码中找到 docs/checkerboard_5x6.pdf这个文件,由于纸张比较大(差不多是 1m*1m的样子),然后去图文店,打印这张校准纸。注意,由于纸张很大,因此打印店是没办法打印的,只能去打印广告之类的图文店才能打印。这个尺寸的纸张打印,差不多是每张 10元左右的样子。

泡沫版,泡沫版用来铺放支撑我们上面打印好的校准纸,建议淘宝搜索"高密度泡沫板保温板反光板",大小规格建议是 100*100*5厘米的样子,貌似卖家是两张起卖,差不多每张 28RMB的样子。

完整的样子(粘帖上校准纸的泡沫板)如下图

准备支撑杆,支撑杆用来架起 Kinect V2,建议淘宝搜索"VR支架定位器三角架HTC vive基站支架"。样子如下图所示

最好买加厚加粗的,原因在于架起 Kinect V2之后,细小的支撑杆容易发生晃动,导致顶端的 Kinect V2也跟着晃动,影响定位精度。每根支撑杆差不多不到 100RMB的样子。

PC服务器,要求必须有 USB3.0接口,必须有 Nvdiva的显卡,必须支持 CUDA。(目前是 GTX 780)

2.支撑杆的部署位置

支撑杆的顶部安装了 Kinect V2,两个设备涉及到部署位置的问题。

部署原则比较重要的一点就是,两个设备看到的校准板的位置应该是相同的

就是说,如果都从左向右看到校准板,那么两个设备看到的棋盘格子是相同的,比如,我们在左上角标注一个数字 ,那么两个设备应该都看到左上角才行,不能一个看到是左上角,一个看到是右上角,这样就会导致无法合并数据了。

因此,我们两个 Kinect V2是同侧部署,而不是对角线部署。也就是两个设备是可以同时看到同一张校准板的。其实,如果场地够大,也可以对角线部署的,只要满足两个设备可以同时看到校准板即可了。

3.编辑硬件配置文件

可以找到 camera_network.yaml.example这个文件,用记事本打开,里面的内容如下:

拷贝一份这个文件

然后修改其中的内容为如下:

注意" id"字段,这个名字我们会在后面用到,取名的时候,要尽可能的简单。

上面的配置文件需要拷贝到每一台机器的相同位置 ~/workspace/ros/catkin/src/open_ptrack/opt_calibration/conf/camera_network.yaml

4.配置两台主机( PC

两台 PC通过有线连接到同一个千兆路由器下面(比如 WS832),保证两台机器可以相互 ping通,并使用静态地址分配的方式,手工分配两台机器的 IP地址。选择其中的一台作为主机,一台作为从机。一般选取性能较强一些的机器作为主服务器。

我们假定主服务器的 IP地址为 192.168.3.227,从服务器的IP地址为 192.168.3.241

然后我们在主服务器上编辑 bash启动脚本:

在其中增加如下内容:

请注意,这里面的 ROS_PC_NAME为我们在 ~/workspace/ros/catkin/src/open_ptrack/opt_calibration/conf/camera_network.yaml中指定的 pc字段中指定的名字, ROS_IP为本机 IP地址。 ROS_MASTER_URI为指定的主服务器的地址,注意端口必须是 11311

接着,在从服务器上编辑启动脚本

在其中增加如下内容:

5.校准系统时间

系统时间的同步是非常关键的,精度越高越好,当然,一般的网络对时,也是满足目前的需求的,因此,请务必确保系统可以正确的网络对时。

6.校准流程

(1)主服务器执行:

(2)所有服务器都执行:

(3)主服务器执行:

(4)主服务器执行:

注意这里的

部分,是我们在 ~/workspace/ros/catkin/src/open_ptrack/opt_calibration/conf/camera_network.yaml里面配置的 id字段的替换。比如,我们定义

则我们的主服务器就执行

(5)从服务器执行:

具体的参考上面关于主服务器的解释。

(4),(5)步骤上需要注意的问题

注意,有时候执行上面的命令之后, Kinect V2中间的红外补光&结构光灯并没有亮起来,如下图的圈中的部分

则一般是 USB接触不良导致的,需要重新插拔一下 Kinect V2与电脑连接的 USB线,然后重试上面的命令。

另外,现在发现某些 Kinect V2的初始化时间偏长,要耗费差不多是 30-60S才能初始化完成,整个过程就是反复对焦,调焦。这个要注意。可以用

来观察,可以在弹出的 Detections窗口中观察到反复的明暗变化,直到几十秒后才稳定输出。因此导致后续的工作就绪,需要多等待几十秒的时间。

此处,必须出现如下图左下角所示的 Calibration Status窗口才算是正式进入了校准流程

接下来就是人拿着校准板,到处移动了。

当设备看到校准板的时候,会出现如下图所示的情况:

注意,移动校准板的时候,要用身体挡住校准板,也就是在移动过程中不要让设备看到校准板,原因在于移动过程中会造成不必要的误差,当到达合适位置,并且稳定后,身体从校准板前面离开,让设备看到稳定的校准图片。

当差不多出现下图的,校准板差不多在图像中散列成片出现,而不是单独的一张的时候,差不多可以结束校准了,当然,校准的图片越多,误差越小。

(6)主服务器执行:

上面的脚本执行后会在上面的一堆 Shell中的某个里面输出一句

生成的 ~/open_ptrack/opt_calibration/conf/camera_poses.yaml就是我们需要的相机位置配置文件。这个文件需要手工拷贝到从服务器上面的相同位置,如果Kinect还在运行的情况下,系统可能无法识别U盘,因此这一步之后,可以关闭Kinect运行的Shell,然后再进行文件拷贝操作,到这一步,需要采集的数据已经全部采集完成了

(7)所有服务器执行:

先退出所有服务器上执行

Shell

然后主服务器执行

在所有服务器上都执行

7.测试效果

关闭所有服务器上执行的 Shell窗口。
在主服务器上执行(WiKi上建议执行这个命令的为一台独立的服务器,不需要连接任何设备,只进行数据的合成计算,我们也可以简单的放到主服务器上执行

主服务器执行

从服务器执行

然后可以在主服务器上看到追踪效果。

附上 Kinect V2主要模块图

参考链接


Camera Network Calibration

发布者

默默

默默码农

发表评论

电子邮件地址不会被公开。 必填项已用*标注