我必须让NAO机器人在白板上绘制一些形状,从形状的每个点的(x,y)坐标开始。
所以我有一个正方形的(x,y)坐标列表:
square = [[251, 184], #point 1
[22, 192], #point 2
[41, 350], #point 3
[244, 346]] #point 4
现在我必须将这些坐标给NAO机器人以便在白板上画画。问题是,为了移动NAO机器人的手臂,以下示例代码extracted from here由Aldebaran给出(我在这里粘贴只有部分代码对您来说很重要):
effector = "LArm"
space = motion.FRAME_ROBOT
axisMask = almath.AXIS_MASK_VEL # just control position
isAbsolute = False # Since we are in relative, the current position is zero
currentPos = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
# Define the changes relative to the current position
dx = 0.03 # translation axis X (meters)
dy = 0.03 # translation axis Y (meters)
dz = 0.00 # translation axis Z (meters)
dwx = 0.00 # rotation axis X (radians)
dwy = 0.00 # rotation axis Y (radians)
dwz = 0.00 # rotation axis Z (radians)
targetPos = [dx, dy, dz, dwx, dwy, dwz]
# Go to the target and back again
path = [targetPos, currentPos]
times = [2.0, 4.0] # seconds
正如您所看到的,我只在白板上绘制了点的(x,y)坐标,但是NAO机器人需要设置更多的变量。我知道首先我必须将坐标从像素转换为米,转换如下:
1 pixel (px) = 1/3779.52755905511 meter [m]
然后,似乎我必须在坐标上添加一个维度以获得(x,y,z)坐标。
当然,要绘制一条线,currentPos应设置为第一个点,targetPos应设置为第二个点。所以,转换之后:
(251, 184) pixels coordinates = (0.066, 0.047) meters coordinates
(22, 192) pixels coordinates = (0.035, 0.011) meters coordinates
因此:
currentPos = [0.066, 0.047, 0.0, 0.0, 0.0, 0.0]
dx = 0.035 # translation axis X (meters)
dy = 0.011 # translation axis Y (meters)
dz = 0.00 # translation axis Z (meters)
dwx = 0.00 # rotation axis X (radians)
dwy = 0.00 # rotation axis Y (radians)
dwz = 0.00 # rotation axis Z (radians)
即使这是正确的,我也不确定。我该如何解决这个问题?
答案 0 :(得分:4)
查看链接的示例,机器人的坐标系似乎与当前轴承相关。所以基本上(1,0,0)向前指向,(0,1,0)指向其左侧,(0,0,1)指向上方。
现在,如果你的黑板位于机器人前面的墙上(垂直于地面)(面向它的机器人),(1,0)指向右,(0,1)指向上方(“正常”笛卡儿)系统),黑板上的(1,0)的翻译,在你的机器人的坐标中将是(0,-c,0),并且黑板上的(0,1)的翻译将是(0, 0,c)在机器人的坐标中,“c”是缩放的常数。结合两个向量,黑板上的(a,b)的平移应该是机器人空间中的(0,-ac,bc)。
希望这有助于入门。 (不确定机器人的偏航,俯仰和滚动如何影响其坐标,基本上问题是(0,0,1)是垂直于地面还是垂直于俯仰x滚动。)