Matrix 胡椒机器人:身体的框架是;地标探测“;基于?

Matrix 胡椒机器人:身体的框架是;地标探测“;基于?,matrix,camera,coordinates,coordinate-transformation,pepper,Matrix,Camera,Coordinates,Coordinate Transformation,Pepper,一段时间以来,我一直试图找出“LandmarkDetection”模块基于哪个坐标或身体框架。因为我需要(0,0,0)位置进行计算,以便借助“Landmark detection”实现机器人的自我定位,我认为这已经很重要了。。。 我让它与NAOqi 2.5.5下的胡椒机器人一起工作,我希望它兼容 您可以在此处阅读“LandmarkDetection.py”的全部代码: “LandmarkDetection.py”: “”“示例:演示一种使用 阿兰马克 在第69行,如图所示,上面写着NAO sp

一段时间以来,我一直试图找出“LandmarkDetection”模块基于哪个坐标或身体框架。因为我需要(0,0,0)位置进行计算,以便借助“Landmark detection”实现机器人的自我定位,我认为这已经很重要了。。。 我让它与NAOqi 2.5.5下的胡椒机器人一起工作,我希望它兼容

您可以在此处阅读“LandmarkDetection.py”的全部代码:

“LandmarkDetection.py”: “”“示例:演示一种使用 阿兰马克

在第69行,如图所示,上面写着NAO space,但在官方网站Aledebaran上搜索并关注这个概念后,我没有找到它。 在“transform=self.motion\u service.getTransform(self.currentCamera,2,True)”的函数“getTransform()”的第70行,结合Aldebaran网站的信息:参数“2”可以表示“FRAME\u ROBOT”。 根据官方文件,“FRAME_ROBOT”(我认为是NAO)是ALMotion使用的三个空间参考之一。这是围绕垂直z轴投影的两个脚位置的平均值。这个空间很有用,因为x轴总是向前的,所以提供了一个自然的以自我为中心的参考。 但以下哪个身体框架是Pepper的框架坐标?

基本上,传感器值应基于坐标,如图所示:

我刚刚跟踪了转换的价值:

('wzCamera = markData[1][0][0][1] = :', 0.20727014541625977)
('wyCamera = markData[1][0][0][2] = :', 0.13570936024188995)
robotToCamera = [[0.984479, 0.00163947, -0.175494, 0.0191678]
 [-0.00241521, 0.999988, -0.00420686, -0.00231434]
 [0.175485, 0.00456542, 0.984471, 1.16607]]
cameraToLandmarkRotationTransform =[[0.969599, -0.205789, 0.132397, 0]
 [0.203897, 0.978596, 0.0278419, 0]
 [-0.135293, 0, 0.990806, 0]]
cameraToLandmarkTranslationTransform=[[1, 0, 0, 1.32545]
 [0, 1, 0, 0]
 [0, 0, 1, 0]]
robotToLandmark = [[0.978627, -0.200991, -0.0434926, 1.31629]
 [0.202122, 0.979082, 0.0233536, 0.265588]
 [0.0378889, -0.0316453, 0.998781, 1.21629]]
将这些与下图的信息结合起来

从视频中:

我真的很想知道“robotToCamera”的“robot”是否意味着原始的cemara点…有人知道如何从“robotToCamera”理解矩阵的这些值吗?

观察“robotTocamera”的值,当机器人旋转自己(整个身体+头部,他不会同时点头)来寻找墙上的地标时,它会有一点变化,如下所示:

1.  robotToCamera =
 [[0.979136, 0.0719852, -0.190025, 0.0157459]
 [-0.0700786, 0.997401, 0.0167426, -0.00282726]
 [0.190737, -0.00307653, 0.981636, 1.16688]]
2.  robotToCamera = 
[[0.981156, 0.0583434, -0.184198, 0.0168686]
 [-0.057959, 0.998291, 0.00747475, -0.00518941]
 [0.184319, 0.00334202, 0.982861, 1.16652]]
3.  robotToCamera = 
[[0.981628, 0.0598889, -0.18116, 0.0196037]
[-0.0594456, 0.9982, 0.0078808, -0.00525115]
 [0.181306, 0.00303314, 0.983422, 1.16649]]
4.  robotToCamera = 
[[0.982268, 0.0583533, -0.178169, 0.0191384]
 [-0.0579817, 0.998291, 0.0072969, -0.00522032]
 [0.17829, 0.00316301, 0.983973, 1.16627] ]
5.  robotToCamera = 
[[0.984, 0.021, -0.178, 0.016]
 [-0.021, 1.00, 0.0027, -0.0019]
 [0.178, 0.001, 0.984, 1.17] ]
以下是我的几个问题:

我们可以借助“robotToCamera”计算“Robot”的位置吗?

我们是否可以使用“robotToCamera”的值获得“CameraToRobot”的值,例如计算逆矩阵或伴随矩阵?

对于“robotToCamera”中的第五个矩阵,如果我们计算零件的逆矩阵

[[0.984, 0.021, -0.178]
 [-0.021, 1.00, 0.0027,]
 [0.178, 0.001, 0.984] ]
会是

[[0.984, -0.021,-0.178]
 [0.021, 1.00, -0.001,]
 [-0.178, 0.0027, 0.984] ]
等于它的伴随矩阵。根据维基百科,它应该是一个正交矩阵

我能从中得到什么信息

在视频的6点10分,老师继续解释有关镜头的内容:


在我的情况下,不需要了解镜头(L),或者?

Landmark detection使用其顶部摄像头检测NAOMarks。文档解释说,您在事件值中会得到一个“形状信息”,例如:

ShapeInfo = [ 1, alpha, beta, sizeX, sizeY, heading]
alpha和beta代表Naomark在摄像机上的位置 角度

sizeX和sizeY是标记在摄影机角度中的大小

航向角描述了Naomark如何围绕 相对于机器人头部的垂直轴

然后,代码调用getTransform,它将为您提供相机的方向,这样您就可以将检测到的标记角度与机器人前面的实际方向(X、Y、Z)(成为机器人框架)关联起来


如果需要,标记在这里:

是的,Pepper用头上的“CameraTop”检测地标,同时用腿上的“lasersensorfront”测量到墙壁的距离。问题是“地标检测”的值,例如“robotToLandmark.r1_c4”和“lasersensorfront”已经看到使用了2个不同的坐标。我一直在搜索原点(0,0,0)的位置,例如“robotToCamera=almath.Transform(transformList)”的“robot”的位置表示。地标检测可以基于世界框架,如视频中的辅助坐标——工业机器人的世界坐标:“地标检测”的NAO空间应该是一个辅助坐标。但它通常是由用户定义的,所以我不知道Aldebaran的维护人员是否可以直接告诉我他们使用的是哪一帧……我相信(0,0,0)在机器人臀部上方的某个位置。但是可以肯定的是,你应该使用提供的变换,这样你就不需要关心它的确切位置。因为我需要(0,0,0)位置进行计算,以借助“地标检测”实现机器人的自定位,我认为这已经很重要了。。。
1.  robotToCamera =
 [[0.979136, 0.0719852, -0.190025, 0.0157459]
 [-0.0700786, 0.997401, 0.0167426, -0.00282726]
 [0.190737, -0.00307653, 0.981636, 1.16688]]
2.  robotToCamera = 
[[0.981156, 0.0583434, -0.184198, 0.0168686]
 [-0.057959, 0.998291, 0.00747475, -0.00518941]
 [0.184319, 0.00334202, 0.982861, 1.16652]]
3.  robotToCamera = 
[[0.981628, 0.0598889, -0.18116, 0.0196037]
[-0.0594456, 0.9982, 0.0078808, -0.00525115]
 [0.181306, 0.00303314, 0.983422, 1.16649]]
4.  robotToCamera = 
[[0.982268, 0.0583533, -0.178169, 0.0191384]
 [-0.0579817, 0.998291, 0.0072969, -0.00522032]
 [0.17829, 0.00316301, 0.983973, 1.16627] ]
5.  robotToCamera = 
[[0.984, 0.021, -0.178, 0.016]
 [-0.021, 1.00, 0.0027, -0.0019]
 [0.178, 0.001, 0.984, 1.17] ]
[[0.984, 0.021, -0.178]
 [-0.021, 1.00, 0.0027,]
 [0.178, 0.001, 0.984] ]
[[0.984, -0.021,-0.178]
 [0.021, 1.00, -0.001,]
 [-0.178, 0.0027, 0.984] ]
ShapeInfo = [ 1, alpha, beta, sizeX, sizeY, heading]