视觉位姿解算
前言
本篇文章属于导学性质,为大家入门Robomaster视觉提供一点不成熟的指导,文章内容是笔者在做位姿解算和弹道补偿时学习路程的总结,希望对各位新入门的RMer一点帮助,有时间在做详细整理请大家海涵。
一.什么叫位姿(Pose)
位姿是机器人学中一个重要的概念在机器人学的研究中,我们通常要考虑物体在三维空间中的位置,这通常可以用两个特性来描述:位置和姿态。
为了描述位置和姿态,我们一般现在物体上设置一个坐标系(或位姿),然后在某个参考坐标系中描述该位姿的位置和姿态。
在Robomaster比赛中的应用:电控:电控的机械控制(要想做出好的控制方案一定要有较深的理解),视觉/算法:视觉主要是根据pnp得到的姿态信息进行自动打击,工程取矿,飞镖打击等算法的开发。
二.位姿解算的前置知识
欧拉角与四元数:
最起码要理解row,yaw,pitich(一般以弧度定义)以及四元数各个分量的物理意义
坐标系的变换:
相机标定以及相机矩阵的意义:
相机标定(理解即可,推荐数理基础如不是特别牢固不必深究推荐沈毅君老师的讲解)
以上内容理解即可,推荐数理基础如不是特别牢固不必深究,如果之后有特别需要可再回过头来看。
二.在视觉中常用的API和方法
根据视觉信息解算位姿首先我们要考虑我们获得的视觉信息是怎么样,视觉位姿解算常规来说有基于单目相机的解算方法,基于双目相机的解算方法,基于深度相机的解算方法,三种方法在性能,价值方面各有千秋(具体可见:我是链接)
但是根据实战来看单目相机基本上可以涵盖大多数队伍对于视觉解算的需求,性价比较高。
单目相机解算:
单目相机解算基于opencv的solvepnp()函数
双目解算:可能在雷达上使用/极几何解法(了解)
三.解算的精度优化
solvepnp()的结算结果在深度上是比较精准的,但是左右偏移和上下偏移往往误差较大,争议问题产生的原因有二,一个是标定时误差较大,一个是solvepnp()本身产生的算法问题,一个可行的方案是进行BA优化,通过极小二乘法将数值约束一个较为精准的范围,这个问题尚未开发出较好的方案。
对于解决BA问题你可能需要学习:
egin,ceres,极小二乘法,理解最小重投影误差
对于理解这里推荐沈航顾老师的讲解
(不过在稳定的识别和预测开发出来之前可一先放一放)# 视觉位姿解算