2차원 평면에 있던 로봇을 3차원 입체공간에 나타내 보겠습니다.
3차원 그래프를 그리겠다는 선언의 방법은 여러가지가 있겠으나, 매우 단순한 방법 소개합니다.
import numpy as np # numpy는 삼각함수 행렬 계산에 필수입니다
import matplotlib.pyplot as plt # matplotlib은 계산 결과를 그래프(그림)으로 표현하는 라이브러리로
# MATLAB의 기본적인 기능은 수행 가능합니다
plt.figure(figsize=(7, 7)) # x,y축의 크기를 지정합니다. 지정하지 않으면 알아서 해 줍니다.
plt.subplot(projection='3d') # 3d 입체 그래프 선언
맨 아래 한 줄 plt.subplot(projection='3d') 만 추가하면 됩니다. 너무 간단.
지난 게시글에서 사용한 2차원 평면 그리기 프로그램에 위 한 줄만 포함한 결과를 보겠습니다.
그림을 위에서 내려다 보겠습니다.
수평에 가까운 상태로 보겠습니다.
z축 0에 있습니다. 그래프를 x,y값만 지정했고 z값은 주어지지 않았기 때문입니다.
누워있는 로봇팔을 일으켜 보겠습니다.
x축과 y축의 중간 방향으로 하기 위해 45도 각도를 주었습니다.
결과물부터 보겠습니다.
파이썬 프로그램 소스입니다.
-----------------------------------------------
import numpy as np # numpy는 삼각함수 행렬 계산에 필수입니다
import matplotlib.pyplot as plt # matplotlib은 계산 결과를 그래프(그림)으로 표현하는 라이브러리로
# MATLAB의 기본적인 기능은 수행 가능합니다
plt.figure(figsize=(7, 7)) # x,y축의 크기를 지정합니다. 지정하지 않으면 알아서 해 줍니다.
plt.subplot(projection='3d') # 3d 입체 그래프 선언
# initial value
p0x = 0; p0y = 0; p0z = 0 # 원점을 x,y,z축 각각 0으로 설정
l1 = 1.5; l2 = 2 # link 길이
th1 = 20 * np.pi / 180 # degree 30도를 radian으로 변경
th2 = 30 * np.pi / 180
alpha = 45 * np.pi / 180 # x,y 중간방향인 45도로 지정
# forward
p1x = (l1 * np.cos(th1)) * np.cos(alpha)
p1y = (l1 * np.cos(th1)) * np.sin(alpha)
p1z = l1 * np.sin(th1)
p2x = (l1 * np.cos(th1) + l2 * np.cos(th1 + th2)) * np.cos(alpha)
p2y = (l1 * np.cos(th1) + l2 * np.cos(th1 + th2)) * np.sin(alpha)
p2z = l1 * np.sin(th1) + l2 * np.sin(th1 + th2)
plt.plot([p0x, p1x, p2x], [p0y, p1y, p2y], [p0z, p1z, p2z]) # link 그려주기
plt.plot(p2x, p2y, p2z, '*r') # link 끝에 *표 하기
plt.title('2link robot') # 그래프에 제목
plt.xlabel('X axis') # x축에 표현해줄 문자
plt.ylabel('Y axis') # y축에 표현해줄 문자
plt.xlim(0, 4) # x축을 0~4까지 나타냄
plt.ylim(0, 4) # y축을 0~4까지 나타냄
plt.show() # 이 문장이 있어야 화면에 그래프를 보여줍니다
-----------------------------------------------
평면에 그려주던 것과는 기구학적 계산 방법에 차이가 있습니다.
[시험대비 참고서적] 메뉴에 게시한 책들을 참조 바랍니다.