2014-02-10 4 views
2

NAO 로봇은 모양의 각 점의 (x, y) 좌표에서 시작하여 화이트 보드에 몇 가지 모양을 그려야합니다.로봇 로봇 이동 로봇 (x, y, z) 좌표 변환

square = [[251, 184], #point 1 
      [22, 192], #point 2 
      [41, 350], #point 3 
      [244, 346]] #point 4 

을 지금은 화이트 보드에 그려하기 위해 NAO 로봇에 대한 사람들의 좌표를 제공 할 수 있습니다

그래서 내가 예 목록 (x, y)를 위해 가지고하는 것은 사각형의 좌표. 문제는 그 NAO 로봇의 팔을 이동하는 것입니다, 다음 예제 코드 extracted from here은 (난 당신이 이해하는 코드의 부분 만이 중요 여기에 붙여 넣기) 알데바란에 의해 주어진다 : 그래서 당신이 할 수

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) 

난이 올바른 경우에도 정말 모르겠습니다. 이 문제를 어떻게 해결할 수 있습니까?

+1

로봇의 좌표 시스템과 관련하여 화이트 보드가 어느 평면에 있습니까? 이 좌표계에서 화이트 보드 좌표계의 원점은 어디입니까? – Hyperboreus

+0

화이트 보드는 로봇 앞에 서 있거나 테이블 위에있을 수 있습니다. –

답변

4

링크의 예를 보면 로봇의 좌표계는 현재 베어링과 관련이있는 것으로 보입니다. 따라서 기본적으로 (1, 0, 0)은 앞으로, (0, 1, 0)은 왼쪽으로, (0, 0, 1)은 위로 향합니다.

이제 칠판이 오른쪽 (1, 0)이 가리키는 (0, 1) 위쪽을 가리키는 ("normal") 로봇 앞에서 벽면 (0, -c, 0), 칠판에 (0, 1)의 번역은 (0, 1, 0)의 번역이 될 것입니다. , 0, c)를 로봇 좌표계에 입력하고, "c"는 스케일링을위한 상수입니다. 두 벡터를 결합하면 칠판에있는 (a, b)의 번역은 로봇 공간에서 (0, -ac, bc)이어야합니다.

희망 사항은 시작하는 데 도움이되기를 바랍니다. (로봇의 요, 피치 및 롤이 좌표에 미치는 영향에 대해서는 기본적으로 (0, 0, 1)이지면에 수직인지 또는 피치 x 롤에 수직인지에 대한 질문이 있습니다.

+0

당신이 나에게 설명 한 것을 이해합니다. 나는 로봇의 [sonar] (https://community.aldebaran-robotics.com/doc/1-14/family/robots/sonar_robot.html)를 사용하여 깊이 "c"를 추정 할 수 있음을 발견했다. 따라서 로봇과 화이트 보드 사이의 거리를 추정 할 수 있습니다. 그런 다음이 값으로 "c"를 설정하고 로봇을 시도합니다. 당신의 설명에 감사 드리며, 내일가는 방법을 알려 드리겠습니다. –

+0

칠판까지의 거리가 c가 아닙니다. 블랙 보드까지의 거리는 벡터의 x- 성분입니다. – Hyperboreus