externalForce
베이스를 기준으로 외력 행렬 구성
구문
설명
는 외력 행렬을 구성하며, 이를 fext
= externalForce(robot
,bodyname
,wrench
)inverseDynamics
와 forwardDynamics
에 대한 입력으로 사용하여 bodyname
에 의해 지정된 바디에 외력 wrench
를 적용할 수 있습니다. wrench
입력은 베이스 프레임에 있다고 가정합니다.
은 지정된 fext
= externalForce(robot
,bodyname
,wrench
,configuration
)configuration
의 bodyname
프레임에 wrench
가 있다고 가정하여 외력 행렬을 구성합니다. 외력 행렬 fext
는 베이스 프레임에 주어집니다.
예제
강체 트리 모델에 가해지는 외력으로 인한 정동역학 계산하기
적용된 외력과 중력으로 인한 힘을 사용해 주어진 로봇 컨피규레이션의 결과 조인트 가속도를 계산합니다. 전체 로봇에 지정된 중력과 함께 렌치가 특정 바디에 적용됩니다.
미리 정의된 KUKA LBR 로봇 모델을 불러옵니다. 이 모델은 RigidBodyTree
객체로 지정됩니다.
load exampleRobots.mat lbr
데이터 형식을 'row'
로 설정합니다. 모든 동역학 계산에서 데이터 형식은 'row'
또는 'column'
이어야 합니다.
lbr.DataFormat = 'row';
중력을 설정합니다. 기본적으로 중력은 0으로 가정합니다.
lbr.Gravity = [0 0 -9.81];
lbr
로봇의 홈 컨피규레이션을 가져옵니다.
q = homeConfiguration(lbr);
로봇에 작용하는 외력을 나타내는 렌치 벡터를 지정합니다. externalForce
함수를 사용하여 외력 행렬을 생성합니다. 로봇 모델, 렌치가 작용되는 엔드 이펙터, 렌치 벡터, 현재 로봇 컨피규레이션을 지정합니다. wrench
는 로봇 컨피규레이션 q
를 지정해야 하는 'tool0'
바디 프레임을 기준으로 적용됩니다.
wrench = [0 0 0.5 0 0 0.3];
fext = externalForce(lbr,'tool0',wrench,q);
lbr
이 홈 컨피규레이션에 있을 때 엔드 이펙터 'tool0'
에 적용된 외력을 감안하여 중력으로 인한 결과 조인트 가속도를 계산합니다. 조인트 속도와 조인트 토크는 0으로 가정합니다(비어 있는 벡터 []
로 입력).
qddot = forwardDynamics(lbr,q,[],[],fext);
외력을 상쇄하기 위한 조인트 토크 계산하기
externalForce
함수를 사용하여 강체 트리 모델에 적용할 힘 행렬을 생성합니다. 힘 행렬은 m×6 벡터이며 각 행은 로봇의 각 조인트에 작용하는 요소가 6개인 렌치를 표현합니다. externalForce
함수를 사용하고 엔드 이펙터를 지정하여 렌치를 행렬의 올바른 행에 할당합니다. 여러 힘 행렬을 함께 추가하여 하나의 로봇에 여러 힘을 적용할 수 있습니다.
이러한 외력을 상쇄하는 조인트 토크를 계산하기 위해 inverseDynamics
함수를 사용합니다.
미리 정의된 KUKA LBR 로봇 모델을 불러옵니다. 이 모델은 RigidBodyTree
객체로 지정됩니다.
load exampleRobots.mat lbr
데이터 형식을 'row'
로 설정합니다. 모든 동역학 계산에서 데이터 형식은 'row'
또는 'column'
이어야 합니다.
lbr.DataFormat = 'row';
Gravity
속성을 설정하여 특정 중력 가속도를 제공합니다.
lbr.Gravity = [0 0 -9.81];
lbr
의 홈 컨피규레이션을 가져옵니다.
q = homeConfiguration(lbr);
link1
에 외력을 설정합니다. 입력 렌치 벡터는 베이스 프레임에서 표현됩니다.
fext1 = externalForce(lbr,'link_1',[0 0 0.0 0.1 0 0]);
엔드 이펙터 tool0
에 외력을 설정합니다. 입력 렌치 벡터는 tool0
프레임에서 표현됩니다.
fext2 = externalForce(lbr,'tool0',[0 0 0.0 0.1 0 0],q);
외력의 균형을 맞추는 데 필요한 조인트 토크를 계산합니다. 힘을 결합하기 위해 힘 행렬을 함께 더합니다. 조인트 속도와 조인트 가속도는 0으로 가정합니다([]
로 입력).
tau = inverseDynamics(lbr,q,[],[],fext1+fext2);
입력 인수
robot
— 로봇 모델
rigidBodyTree
객체
로봇 모델로, rigidBodyTree
객체로 지정됩니다. externalForce
함수를 사용하려면 DataFormat
속성을 "row"
또는 "column"
으로 설정합니다.
bodyname
— 외력이 가해지는 바디의 이름
string형 스칼라 | 문자형 벡터
외력이 가해지는 바디의 이름으로, string형 스칼라 또는 문자형 벡터로 지정됩니다. 이 바디 이름은 robot
객체의 바디와 일치해야 합니다.
데이터형: char
| string
wrench
— 바디에 가해지는 토크와 힘
[Tx Ty Tz Fx Fy Fz]
벡터
바디에 가해지는 토크와 힘으로, [Tx Ty Tz Fx Fy Fz]
벡터로 지정됩니다. 렌치의 처음 세 요소는 xyz 좌표축을 중심으로 한 모멘트에 대응합니다. 마지막 세 요소는 동일한 좌표축을 따르는 선형적인 힘입니다. 로봇 configuration
을 지정하지 않는 한, 렌치는 베이스 프레임을 기준으로 하는 것으로 간주됩니다.
출력 인수
fext
— 외력 행렬
n×6 행렬 | 6×n 행렬
외력 행렬로, n×6 행렬 또는 6×n 행렬로 반환됩니다. 여기서 n은 로봇의 속도 개수(자유도)입니다. 형태는 robot
의 DataFormat
속성에 따라 다릅니다. "row"
데이터 형식은 n×6 행렬을 사용합니다. "column"
데이터 형식은 6×n 행렬을 사용합니다.
구성된 행렬은 지정된 바디와 관련된 위치에서 0이 아닌 값만 나열합니다. 힘 행렬을 함께 추가하여 여러 바디에 여러 힘을 지정할 수 있습니다. 외력 행렬을 사용하여 동역학 함수 inverseDynamics
와 forwardDynamics
에 외력을 지정합니다.
세부 정보
동역학 속성
로봇 동역학을 사용하여 작업하는 경우 rigidBody
객체의 다음 속성을 사용하여 매니퓰레이터 로봇의 개별 바디에 대한 정보를 지정합니다.
Mass
— 강체의 질량(단위: 킬로그램).CenterOfMass
— 강체의 무게 중심 위치로,[x y z]
형식의 벡터로 지정됩니다. 이 벡터는 바디 프레임을 기준으로 강체의 무게 중심 위치를 설명합니다(단위: 미터).centerOfMass
객체 함수는 로봇의 무게 중심을 계산할 때 이 강체 속성값을 사용합니다.Inertia
— 강체의 관성으로,[Ixx Iyy Izz Iyz Ixz Ixy]
형식의 벡터로 지정됩니다. 이 벡터는 바디 프레임을 기준으로 합니다(단위: 킬로그램 제곱미터). 관성 텐서는 양의 정부호 행렬로, 형식은 다음과 같습니다.Inertia
벡터의 처음 세 요소는 관성 모멘트이며, 관성 텐서의 대각선 요소입니다. 벡터의 마지막 세 요소는 관성의 곱이며, 관성 텐서의 비대각선 요소입니다.
전체 매니퓰레이터 로봇 모델과 관련된 정보의 경우 다음 rigidBodyTree
객체 속성을 지정합니다.
Gravity
— 로봇에 작용하는 중력 가속도로,[x y z]
벡터로 지정됩니다(단위: m/s2). 기본적으로 중력 가속도는 없습니다.DataFormat
— 기구학 함수와 동역학 함수의 입력/출력 데이터 형식으로,"struct"
,"row"
또는"column"
으로 지정됩니다.
동역학 방정식
매니퓰레이터 강체 동역학은 다음 방정식에 의해 결정됩니다.
또는 다음과 같이 표기합니다.
각 요소는 다음과 같습니다.
— 현재의 로봇 컨피규레이션에 기반한 조인트-공간 질량 행렬입니다. 이 행렬은
massMatrix
객체 함수를 사용하여 계산합니다.— 속도 곱을 계산하기 위해 를 곱한 코리올리 항입니다. 속도 곱은
velocityProduct
객체 함수를 사용하여 계산합니다.— 모든 조인트가 지정된 중력
Gravity
에서 위치를 유지하는 데 필요한 중력 토크와 중력 힘입니다. 중력 토크는gravityTorque
객체 함수를 사용하여 계산합니다.— 지정된 조인트 컨피규레이션에 대한 기하 야코비 행렬입니다. 기하 야코비 행렬은
geometricJacobian
객체 함수를 사용하여 계산합니다.— 강체에 가해지는 외력의 행렬입니다. 외력은
externalForce
객체 함수를 사용하여 생성합니다.— 각 조인트에 벡터로 직접 가해지는 조인트 토크와 조인트 힘입니다.
— 개별 벡터로, 각각 조인트 컨피규레이션, 조인트 속도, 조인트 가속도입니다. 회전 조인트의 경우 각각 라디안, rad/s, rad/s2 단위로 값을 지정합니다. 직선 조인트의 경우 미터, m/s, m/s2 단위로 지정합니다.
동역학을 직접 계산하려면 forwardDynamics
객체 함수를 사용합니다. 이 함수는 상기 입력값들의 지정된 조합에 대한 조인트 가속도를 계산합니다.
일련의 특정 모션을 구현하려면 inverseDynamics
객체 함수를 사용합니다. 이 함수는 지정된 컨피규레이션, 속도, 가속도, 외력을 구현하는 데 필요한 조인트 토크를 계산합니다.
참고 문헌
[1] Featherstone, Roy. Rigid Body Dynamics Algorithms. Springer US, 2008. DOI.org (Crossref), doi:10.1007/978-1-4899-7560-7.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 사항 및 제한 사항:
rigidBodyTree
객체를 만들 때 MaxNumBodies
로 로봇 모델에 추가할 수 있는 바디의 상한을 지정하는 구문을 사용하십시오. 또한 DataFormat
속성을 이름-값 쌍으로 지정해야 합니다. 예를 들면 다음과 같습니다.
robot = rigidBodyTree("MaxNumBodies",15,"DataFormat","row")
데이터 사용량을 최소화하기 위해 모델에서 예상되는 바디 개수에 가까운 수로 상한을 설정하십시오. 코드 생성 시 모든 데이터 형식이 지원됩니다. 동역학 함수를 사용하기 위해 데이터 형식을 "row"
또는 "column"
으로 설정해야 합니다.
show
및 showdetails
는 코드 생성을 지원하지 않습니다.
버전 내역
R2017a에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)