次坐标从0开始

时间: 2023-08-22 admin IT培训

次坐标从0开始

次坐标从0开始

艾玛~

坐标变换真是学了忘,忘了学

以前学机器臂的控制的时候做的基于inverse kinematic 和 forward kinematic的时候,明明感觉学会了,但是现在看‘概率机器人’的时候又开始混淆了。

机器人的定位里面,坐标变换是必不可少的。 不管GPS,还是传感器识别到的物体的位置,都需要坐标系变换来保证坐标一致性。

万物皆可transform~

有一次玩‘吃鸡’的时候,跟我有一段距离的队友说‘250方向有人’。这时候,机智的我直接把朝向变换到250方向并小心翼翼的伏了半天,然后发现: 根本没有人!嗯。。。 那时候,我感觉自己像个250~ orz 。

因为我意识到,队友说的250方向,只是相对于他自身的坐标系的。 他是基于他自身的坐标系,给出了他的观测值。而我,作为距离队友有一段距离的人来说,只有把队友的坐标系变换到我自身的坐标系里面,才可以在我的坐标系里通过改变我自身的朝向角找到敌人。

刺激战场里面的250特种兵就是我

实际上,像刺激战场这种第一人称射击游戏的玩家,非常像一个自主定位并完成高级任务的机器人。

玩家 = 自主定位并需要完成任务(活到最后)的机器人
机器人与环境产生交互的执行器 = 两条小胳膊 + 两条小腿
传感器 = 声呐(判断声源位置)+ 摄像机(识别物体)

在游戏里,玩家们被设定为自带GPS。我们可以打开地图,查看队友的位置和自己的位置。这个位置实际上就是全局坐标系里面的位置。我们为了落在相同的地点,在飞机上在地图上做标记的时候,只要任何一人做了标记,那么其他人看到的位置也是相同的。 这就是全局坐标系。(跳伞部分省略~)

之后我们落地,开始搜刮装备,系统已经给我们设定好了基本坐标。坐标xyz系统(可能)如下。

本地坐标(我知道这是起飞之前~)

在这里,xyz坐标系的原点o就是我们在全局坐标系里面的GPS点。如果往前跑,那么游戏的物理引擎就会通过坐标变换不停更新我们本身的坐标系原点‘o’在地图中的位置。

那么好玩的事情来了。需要物理引擎计算,就对硬件有要求。所以硬件(手机)性能好的时候,每秒钟可以处理很多帧的动作并更新‘o’的位置。比如一分钟更新自身位置100次,也就是100HZ。sample time

就是1/100。这时候我们感受到的就是自己实力提升了~ 明明没有特别的训练,但就是反应比别人快了。这是因为,好的硬件可以更快的计算出自己的位置和别人的位置,并快人一步的利用控制器(枪)做出相应的反应(击倒敌人)。那么当硬件不好的时候,系统就会让物理引擎不那么快的更新自身的位置。假设我用的是诺基亚。这个硬件只能提供1HZ的更新频率,也就是说一秒钟只能更新一次自己的位置。那么,这1秒钟之内,不管周边的敌人用AWM打了我N枪,还是跑过来拿平底锅砸我,我都不会知道。因为我的位置和观测值都停留在过去的那一秒。当然,这个时候,我或许还在狂奔,或者被击倒,或者加载去看落地成盒称号。

其实我想说的就是一句,样本时间对定位的准确度的影响大。

说起游戏卡顿,突然说了很多东西。。。。。。。。毕竟因为卡顿,输了不少次。 ̄へ ̄

话说回坐标变换。

xyz的原点o是机器人(人物)在地图中的位置。用Mx, My来表示其位置。机器人朝向就是上面说的‘250方向’的这种方位。这个是旋转z轴的角度,表示为

。这个坐标系设定为B坐标系。
那么对于A坐标系的描述就是,原点是map-x,map-y,航向角为 。

机器人来回移动的时候,可以往左右两边看,但这并不影响机器人移动的方向。这是因为,只有机器人的视觉传感器的朝向发生了变化。机器人视觉传感器坐标和机器人本身(大部分是IMU)的坐标是不一样的。这边也是需要坐标变换的。

不过这里,不拿这个举例。因为这都是集成在一个机器人身上的(当然也需要坐标变换,只是想换个例子说明)。

现在机器人通过视觉传感器识别到了补给箱。

那么机器人想告知其他机器人这个补给箱的位置。那么就需要把补给箱的位置,通过坐标变换变换到全局坐标系里面,即地图。我们已经把地形从3D假设为2D 平面,并只旋转Z轴。补给箱这里只做质点处理~

地图坐标系为O,下面公式中表达为A

机器人视觉坐标系为R,下面公式中表达为B

补给箱在R坐标系中的位置P(只需要点坐标,不考虑位姿)

假设中我们已经知道了B坐标系的原点在A坐标系中的位置为[5,5],也知道P(也就是补给箱,也可以理解为特征或者是识别到的物体等等)在全局坐标系中的位置为[15, 15]

假设为2D的地形,并给出相应的全局坐标

坐标变换通过旋转矩阵和平移矩阵来完成。其实公式比较简单,如下。相关详细内容可以百度一下~ (知乎写公式太费劲)

齐次变换矩阵

那么,公式里面的B-P 就是机器人看到的补给箱的位置。A-P-borg 就是机器人在地图坐标系里面的位置。AB-R就是从地图坐标系,转换到机器人坐标系的旋转矩阵。最终得到补给箱在全局坐标系里面的位置。

那么反过来,机器人已知补给箱在地图坐标系中的位置,并想把补给箱的位置在机器人本身的坐标系里面标记出来该怎么办?

其实很简单,按照下面公式求就可以了。

然后把BA-T 乘以 A坐标下的补给箱位置P[x,y]就可以了。 如下

下面是uda rover中变换机器人摄像机坐标系的局部pixel到全局坐标系里面的的代码例子。

.py​github.com
def 

这样就结束了,今天对定位中的基本坐标变换二维的我的理解。所以提醒各位在吃鸡的时候,如果想告知敌人的准确位置,大家可以选择用对话框标记敌方的位置,就比如敌人在前方多少多少米。

三维坐标变化的概念其实也差不多,但是一般会按照特定的顺序或者是特定的方法挨个进行变换。就是好几个二维坐标变化叠加起来变成三维变化。在自动驾驶中 roll pitch yaw.除了用来确定车辆本身的姿态以外,也是用来确定传感器中的物体在全局坐标系中的位置的。只有知道了这些特征,在全局坐标系的位置才可以跟全局坐标系,也就是高清地图中的特征进行匹配,提高定位精度。反过来把全局坐标系里面的特征变换到本地坐标系再匹配,也是一样的。(•̀⌄•́)

(旁白:我不会的,是坐标变换吗?不会的是怎么匹配!)

2019年1月31日

健身房门口瑟瑟发抖的等人中