正确校准的机器人非常重要,因为软件要求NAO的所有部件都在预期的位置。否则,NAO将无法稳定行走,从图像坐标投影到世界坐标(反之亦然)将是错误的。
一般来说,很多计算都是不可靠的。NAO的两个物理组件可以通过SimRobot进行校准,关节和摄像机。经常检查这些校准是很重要的,特别是对关节来说。
随着时间的推移和使用,关节会磨损。尤其是髋关节。除此之外,B-Human软件还使用四种颜色类(官方文档4.1.4节),这些颜色类也需要校准。改变位置或光照条件可能需要对其进行调整。
整体物理校准
物理校准过程可以分为三个步骤,总体目标是一个直立的机器人,以及一个正确校准的相机。
第一步:让双脚处于一个平面的位置。这并不意味着机器人必须站直。这是通过把机器人抬起来,这样就可以看到脚的底部。然后改变脚和腿的关节偏移量,直到两脚都是平面的,两腿平行。两条腿之间的距离可以在腿的灰色部分测量。它们之间的距离应该是10厘米。
第二步:相机校准。这个步骤还可以测量身体相对于脚的倾斜程度。该测量可用于第三步。
第三步:使用第二步的测量量以改进关节的校准和机器人的扶正。在某些情况下,可能需要重复这些步骤,因为联合校准中的大变化可能使相机校准无效。
关节校准
BHuman 支持两种关节校准方法。一是通过手动调整每个关节的偏移量;二是使用使用逆运动学的关节校准模块来校准。
整个校准过程的第三步(整体物理校准的第三步)只能通过关节校准器完成。在这两种方法之间切换时,需要保存关节校准,重新部署NAO,重启bhuman。否则,前面做的更改将不会生效。
在改变关节偏移量之前,机器人必须处于固定关节角度的站立位置。否则,运动引擎的平衡机构可能会移动腿,打乱关节的校准。
使用:get representation:MotionRequest
,在返回的语句中设置motion = stand
,校准完成后记得保存,save representation:JointCalibration
。
手动调整关节偏差
首先,机器人必须切换到一个固定的支架上,否则运动引擎的平衡机械手可能会移动机器人的腿,打乱关节的校准:mr StandArmRequest CalibrationStand
,mr StandLegRequest CalibrationStand
。
有两种方法可以调整关节偏移。
要么使用 get 来请求 JointCalibration 表示形式:get representation:JointCalibration
修改返回的校准,然后设置它。
要么通过使用数据视图,更加方便:vd representation:JointCalibration
。
⚠️ 注意:JointCalibration 还包含每个关节的其他信息,不应该改变!
使用关节校准器(JointCalibrator)
首先设置关节校准器,提供关节校准器并切换到校准台:call Calibrators/Joint
当需要全新校准时,可对关节校准进行复位:dr module:JointCalibrator:reset
然后,可以修改脚的平移和旋转。再次使用:get module:JointCalibrator:offsets
或:vd module:JointCalibrator:offsets
⚠️ 注意:调整的单位是毫米,旋转是度数为基准的。
让 Nao 直立
相机校准还计算身体旋转的旋转。这些值可以传递给关节校准器,然后将NAO设置在垂直位置。命令:
1 | get representation:CameraCalibration |
将 bodyRotationCorrection(CameraCalibration 表示)的值复制到 bodyRotation (JointCalibration 表示)中。之后,设置 bodyRotationCorrection(CameraCalibration 表示) 为零。通过使用具有自动化标志的自动相机校准器,可以自动或多或少地使这些动作成为可能。
最后一步是在同一时间调整双脚的移动(大部分时间是在同一方向),使它们垂直于躯干下方。直线激光对这项任务非常有用。当全部操作完成时,通过执行下面的命令来保存校准:
1 | save representation:JointCalibration |
然后重新部署NAO并重新启动bhuman。
图:校准程序之前(a)和之后(b)的投影线
相机校准
使用 AutomaticCameraCalibrator 模块校准相机(参考4.1.2.1节),请遵循以下步骤:
- 将模拟器连接到现场的机器人,并将其放置在确定的位置上(例如,罚球线)。
- 运行SimRobot配置文件Calibrators/Camera.con(在控制台输入
call Calibrators/Camera
)。这将初始化校准过程,并进一步将命令或帮助打印到稍后将需要的模拟器控制台。 - 使用AutomaticCameraCalibrator模块(自动相机校准模块),例如将机器人放在罚球线,控制台输入
set module:AutomaticCameraCalibrator:robotPose rotation = 0;translation= {x = -3200;y = 0;}
,来宣告机器人在球场上的位置。 - 若要自动生成以下关节校准的命令以纠正身体旋转,可通过:
set module:AutomaticCame raCalibrator:setJointOffsets true
,优化完成后,只需输入生成的命令,从而纠正旋转。 - 启动点收集:
dr module:AutomaticCameraCalibrator:start
,然后等待输出”Accumulation finished. Waiting to optimize. . . “。这个过程包括:两个摄像头采集样本进行校准,头部运动覆盖整个场地。上面相机的样本是蓝色的,下面相机的样本是红色的。图像上方的图形表示样本数量是否足以优化,可以(绿色)不可以(红色)。 - 如果对某些特定示例的集合不满意,可以通过左击找到示例的图像中的示例来删除示例。如果缺少一些示例,可以通过
Ctrl+左键单击
将它们手动添加到相应的图像中。 - 使用自动校准程序:
dr module:AutomaticCameraCalibrator:optimize
,然后等待优化收敛。
图:三个有趣的相机校准阶段。a)为校准器的起点。b)为控件从采集的样本开始后的视图。c)为优化后的阶段。
颜色校准
校准颜色类分为两个步骤。
首先:相机驱动程序的参数必须根据环境的需要进行更新。使用get representation:CameraSettings
返回当前摄像机的参数。
此外:将生成必要的set命令。一些比较重要的参数:
- whiteBalanceTemperature: 白平衡。可用区间为[2700,6500]。
- exposure: 曝光,可用区间为[0,1000]。通常,使用140的曝光,等于14毫秒。数值越大,图像越模糊。
- gain: 增益,可用区间为[0,255]。通常,增益设置为50 - 70。高增益值会导致图像嘈杂。
- autoWhiteBalance: 启用(1)/禁用(0)自动白平衡。此参数应始终禁用,因为白平衡中的更改可能会更改颜色并打乱颜色校准。另一方面,环境色温的真实变化也会产生同样的结果。
- autoExposure: 启用(1)/禁用(0)自动曝光。在标准室内锦标赛等静态灯光条件下进行比赛时,应始终禁用此参数,因为自动化往往会选择高于需要的值,从而导致图像模糊。然而,对于2016年机器人世界杯户外比赛中出现的动态光环境,使用相机驱动程序的自动化可能是必要的。在这种情况下,可以使用参数autoExposureAlgorithm和亮度来改变其行为。
相机驱动程序可以做一次自动白平衡。该功能可以通过以下命令触发:
1 | dr module:CameraProvider:doWhiteBalanceUpper |
在设置好相机驱动程序的参数后,必须更新color类的参数(cf. section . 4.1.4)。为此,需要使用分割的上下摄像头图像和颜色校准视图打开视图,(参看第10.1.4.1节和第10.1.4.1节)。完成color类校准并保存当前参数后,可以使用copyfiles/bush来部署当前设置。确保文件cameraSettingsV5.cfg(或cameraSettingsV4.cfg,如果NAO是V4模型)和fieldColorsCalibrationV5.cfg(或fieldColorsCalibrationV4.cfg)更新了并存储在正确的位置。
The left figure shows an image with improper white balance. The right figure shows the same image with better settings for white balance.