<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>woobin_robot.log</title>
        <link>https://velog.io/</link>
        <description>현우빈의 로봇 만들기</description>
        <lastBuildDate>Sat, 21 Oct 2023 08:14:13 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>woobin_robot.log</title>
            <url>https://velog.velcdn.com/images/woobin_robot/profile/1f8ed621-f6ba-4982-b0e4-62e4593e59df/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. woobin_robot.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/woobin_robot" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Robotics 5. Velocity Kinematics and
Statics (작성중)]]></title>
            <link>https://velog.io/@woobin_robot/Robotics-5.-Velocity-Kinematics-andStatics</link>
            <guid>https://velog.io/@woobin_robot/Robotics-5.-Velocity-Kinematics-andStatics</guid>
            <pubDate>Sat, 21 Oct 2023 08:14:13 GMT</pubDate>
            <description><![CDATA[<p>4장의 forward kinematics(정기구학)에서는 로봇의 관절 값을 이용하여 엔드 이펙터의 좌표를 구해보았다. 
<strong>Velocity kinematics (속도 기구학)</strong>에서는 관절의 값과 속도에 대한 엔드 이펙터의 속도를 다뤄볼 것이다.</p>
<p>이 속도 기구학에서 로봇공학에서 중요한 개념인 <strong>Jacobian</strong>이 등장한다.</p>
<p>엔드 이펙터의 configuration을 최소한의 좌표 $x\in\mathbb{R}^m$, 관절의 값을 $\theta\in\mathbb{R}^n$로 표현했을때 forward kinematics를 다음과 같이 표현할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/407c76ce-5bf7-476a-af4d-0c2dd7f602c2/image.png" alt="">
우리는 엔드 이펙터의 속도를 다룰거기 때문에 이 식을 시간에 대해 미분해보자</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/3dec96be-381d-4b08-abf2-02287f7d2eb8/image.png" alt=""></p>
<p>여기서 $J$가 <strong>Jacobian</strong>이다.
Jacobian은 위의 식에서 볼수 있듯이 관절 값 $\theta$에 대한 함수이며 관절의 속도 $\dot{\theta}$에 대한 엔드 이펙터의 속도 $\dot{x}$의 기울기이다.</p>
<p>구체적인 예를 한번 들어보자</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/2220e9d6-2435-4cf2-8938-486af0f7fc39/image.png" alt="">
위 그림과 같이 2R로봇이 있을 때 forward kinematics를 다음과 같이 표현할 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/46989869-4fe7-44e8-9899-0adb49572fe9/image.png" alt="">
속도를 구하기 위해 시간에 대해 미분을 하고
<img src="https://velog.velcdn.com/images/woobin_robot/post/42d0c118-57e7-4ae8-b918-cb06eb845839/image.png" alt="">
$\dot{x}=J(\theta)\dot{\theta}$ 형태로 바꾸면 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/5b46f121-bcc3-4129-bf1e-fb62232000aa/image.png" alt=""></p>
<p>이와 같이 평면 로봇의 경우 삼각함수를 이용하여 쉽게 Jacobian을 구할 수 있다.</p>
<h1 id="📖jacobian의-특이점">📖Jacobian의 특이점</h1>
<p>자코비안을 사용할 때 조심해야하는 특이점이 있다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/5b46f121-bcc3-4129-bf1e-fb62232000aa/image.png" alt=""></p>
<p>위에서 구한 2R 로봇 Jacobian의 열 벡터를 $J_1$, $J_2$로 나타내고 행렬 곱을 선형 결합 형태로 나타내보자. 
<img src="https://velog.velcdn.com/images/woobin_robot/post/376a4dc0-68b2-45a4-8f2a-9b9fb445c9cf/image.png" alt="">
$v_{tip}$은 문자 그대로 로봇의 끝부분 즉 엔드 이펙터의 속도인 $\dot{x}$이다.
이 식으로 보면 $J_1$은 관절1의 속도 $\dot{\theta}<em>1$로 인해 발생하는 엔드 이펙터의 속도,
$J_2$은 관절2 속도 $\dot{\theta}_2$로 인해 발행하는 엔드 이펙터의 속도이고 이 값을 모두 더하여 실제 엔드 이펙터의 속도를 구하는 것을 볼 수 있다.
$J_1$, $J_2$을 열 벡터로서 다음과 같이 그림에 나타낼 수 있는데
<img src="https://velog.velcdn.com/images/woobin_robot/post/cdc4ee4b-5639-43eb-96e3-77f357146811/image.png" alt="">
그림에 있는 $J_1$, $J_2$가 서로 선형 독립이기 때문에.<br><img src="https://velog.velcdn.com/images/woobin_robot/post/376a4dc0-68b2-45a4-8f2a-9b9fb445c9cf/image.png" alt="">
이 식처럼 엔드 이펙터의 속도 $v</em>{tip}$을 벡터 $J_1$, $J_2$의 선형 결합으로 생각해볼 때 $\dot{\theta}$의 제한이 없다고 가정한다면 $J_1$, $J_2$은 2차원 전체를 span함으로 엔드 이펙터는 어느 방향으로든 속도를 발생시킬 수 있다.</p>
<p>하지만 문제는 $J_1$, $J_2$가 선형 의존일 때이다.
2R로봇의 경우에는 $\theta_1$의 값과 상관없이 $\theta_2$의 값이 0 또는 $\pi$일때 $J_1$, $J_2$가 동일 선상에 놓이게 되면서 선형 의존이 되는데
두 벡터가 선형 의존임으로 $\dot{\theta}$으로 아무리 span을 해봐도 한 방향으로의 벡터만을 만들 수 밖에 없다. 즉 엔드 이펙터의 속도가 발생할 수 없는 방향이 나타나게 된다. 
이런 상태의 Jacobian은 특이행렬(singular matrix)이 되며(역행렬이 존재하지 않는다.)
이런 로봇의 configuration을 <strong>특이점(singularities)</strong>이라고 한다.</p>
<h1 id="📖manipulability-ellipsoid">📖manipulability ellipsoid</h1>
<p>우리는 여기서 Jacobian을 이용하면 관절 속도의 제한이 주어졌을 때 그에 대한 엔드 이펙터의 속도 제한을 구할수 있지 않을까? 라는 생각이 들 수 있다.</p>
<p>그렇다면 다음과 같이 2R로봇의 관절 속도를 $\theta_1^2+\theta_2^2=1$로 제한했을 때의 $v_{tip}$의 한계를 나타내 보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/646e31f4-b6ac-437d-8118-a6b5d65f8bb8/image.png" alt="">
이 그림과 같이 관절 속도 공간의 경계선이 단위 원으로 주어진다면 $v_{tip}$의 경계선은 타운으로 나타나고 이는 로봇의 configuration에 따라 달라진다는 것을 볼 수 있다. 
(이렇게 관절 속도의 제한을 단위 원으로 표현하는 것은 엑추에이터의 총(최대) 힘을 각 관절 속도의 제곱의 합으로 주어졌을때를 예로 들 수 있다.)
이 타원을 <strong>manipulability ellipsoid</strong>(조작성 타원체)라고 부른다.</p>
<h2 id="📌manipulability-ellipsoid의-사용">📌manipulability ellipsoid의 사용</h2>
<p>조작성 타원체의 모양을 보면 로봇의 특정 configuration에서 엔드 이펙터가 어느 방향으로 속도를 내기 쉬운지 알 수 있으며
조작성 타원체가 한쪽 방향으로 눌려 선분에 가까워진 모양이 될수록 그 configuration은 특이점에 가까워진다. 특이점에 얼마나 가까운지를 정량적으로 파악할 수 있는데 그 중 하나의 방법이 조작성 타원체의 장축과 단축의 길이($l_{max}$,$l_{min}$)를 비교하는 것이다.</p>
<ul>
<li><p>타원체가 원에 가까울 수록 즉 $l_{max}$/$l_{min}$가 1에 가까울 수록 엔드 이펙터는 모든 방향으로 움직이기 쉬워지고 특이점에서 멀어진다.</p>
</li>
<li><p>$l_{max}$/$l_{min}$가 클수록 특이점에 가까워 진다.</p>
</li>
</ul>
<h1 id="📖정역학-분석에서-jacobian의-활용">📖정역학 분석에서 Jacobian의 활용</h1>
<p>이런 Jacobian은 정역학적 분석에서도 사용될 수 있다.
만약 엔드 이펙터의 어떠한 외력이 작용됐고 이 외력을 버티기 위해 필요한 관절 토크는 얼마일지 구해보자
정적평형 상태를 가정하고 로봇을 움직이는 어떠한 외력도 작용하지 않는다면 에너지 보존 법칙에 의해 엔드 이펙터에서 측정되는 일률과 관절에서 생성되는 일률은 똑같을 것이다. 
엔드 이펙터에 작용되는 외력을 $f_{tip}$, 관절 토크를 $\tau$라고 할때 에너지 보존 법칙을 다음과 같이 세울 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/e66847f4-28e5-48b2-a171-6ec4622af253/image.png" alt=""></p>
<p>$v_{tip}=J(\theta)\dot{\theta}$을 대입하면
<img src="https://velog.velcdn.com/images/woobin_robot/post/56e3a043-57cd-4d86-912b-8c527b7e0144/image.png" alt=""></p>
<p>정적평형 상태를 가정했기 때문에 $\dot\theta$는 0이다. 하지만 이를 0에 무한히 가까운 값이라고 생각하면 다음과 같이 $\tau$에 대해 정리 할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/b426255d-cec7-462a-b696-83e22cdb8407/image.png" alt="">
이 식을 이용하여 정적 평형 상태일 때 엔드 이펙터의 특정 힘을 내기 위해 필요한 관절 토크를 구할 수 있다.</p>
<h2 id="📌force-ellipsoid">📌force ellipsoid</h2>
<p>Jacobian을 이용하여 관절 토크와 엔드 이펙터에서 발생하는 힘의 관계를 구해봤다. 
Jacobian 전치행렬의 역행렬이 존재한다면 이 관계를 다음과 같이 $f_{tip}$에 대해 정리할 수 있고
<img src="https://velog.velcdn.com/images/woobin_robot/post/f0ef3917-9a53-4624-8940-e2e85d08f04b/image.png" alt=""></p>
<p>이 식을 이용하여 manipulability ellipsoid 때와 같이 관절 토크 제한을 단위원으로 표현했을때의 엔드 이펙터 힘($f_{tip}$)을 나타내 보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/36c5c454-e379-40fa-a0b5-23a4c6550f22/image.png" alt="">
$v_{tip}$ 일때와 같이 $f_{tip}$도 타원체로 표현이 되는데 이 타원체를 <strong>force ellipsoid(힘 타원체)</strong>라고 부른다.</p>
<p>이 힘 타원체의 모양을 보고 특정 로봇의 configuration에서 각 방향으로 엔드 이펙터의 힘을 얼마나 쉽게 발생시킬 수 있는지 알 수 있다.</p>
<h2 id="📌manipulability-ellipsoid-와-force-ellipsoid-의-비교">📌manipulability ellipsoid 와 force ellipsoid 의 비교</h2>
<p>이제 같은 configuration에서 조작성 타원체와 힘 타원체는 어떤 관계가 있는지 알아보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/986f9e87-c3ce-4f3d-a89f-09772b93abbd/image.png" alt="">
위 그림은 2R 로봇의 두 가지에 congiguration에 대한 조작성 타원체(왼쪽)와 힘 타원체(오른쪽)이다.</p>
<p>이 그림을 보면 알 수 있듯이 타원이 눌린 방향이 서로 반대이다.
더 자세히 설명을 해보자면 조작성 타원체와 힘 타원체의 추축들은 서로 나란하며 각 주축의 길이는 서로에 대해 역수이다.</p>
<p>그럼으로 엔드 이펙터의 속도를 생성하기 쉬운 방향으로는 힘을 생성하기 어렵고 그 반대도 마찬가지라는 것을 알 수 있다.</p>
<p>특이점의 경우에는 조작성 타원체가 선분으로 수렴하여 타원체의 넓이다 0이 되고
힘 타원체는 조작성 타원체가 수렴한 선분에 수직 방향으로 무한히 길어지게 된다.(길어진 방향과 수직인 방향으로는 얇아진다)</p>
<p>이 경우는 팔로 가방을 드는 상황을 예로 들수 있다.
가방을 들때 중력 방향으로 팔을 쭉편 자세가 가장 편한 상태이다.
사람의 팔을 2R로봇팔 이라고 생각 했을 때 이렇게 쭉편 상태가 로봇의 특이점 이며 이 경우 가방의 무게를 관절 구조로만 지탱하는 상황이므로 관절의 토크가 발생할 필요가 없다. </p>
<h1 id="📖속도를-twist로-표현했을-때의-jacobian">📖속도를 twist로 표현했을 때의 Jacobian</h1>
<p>위에서 봤듯이 $v_{tip}$은 엔드 이펙터의 좌표를 미분하여 얻기 때문에 엔드 이펙터의 configuration 표현 방법이 $v_{tip}$의 형태를 결정하고 이는 Jacobian의 형태까지 결정한다. 우리는 지금까지 로봇의 configuration을 $T\in SE(3)$로 표현했고 이 경우 속도를 twist로 표현하였다.
그럼으로 이번에는 $v_{tip}$이 twist $\mathcal{V}\in\mathbb{R}^6$로 주어지는 경우의 Jacobian을 알아보자</p>
<p>먼저 Jacobian도 표현된 기준 좌표계에 따라 다음과 같이 나뉘어 진다.</p>
<ul>
<li>twist가 고정 좌표계{s}에서 표현됐을 때 ($\mathcal{V}_s$=$J_s(\theta)$$\dot\theta$): space Jacobian  </li>
<li>twist가 물체 좌표계{b}에서 표현됐을 때 ($\mathcal{V}_b$=$J_b(\theta)$$\dot\theta$) :  body Jacobian  </li>
</ul>
<h2 id="📌space-jacobian">📌Space Jacobian</h2>
<p>space jacobian부터 알아보자 
n-link open chain 로봇의 forward kinematics을 PoE방법으로 다음과 같이 표현해보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/52810fad-9795-4cf4-b603-4457d0af03b4/image.png" alt="">
이 때 spatial twist $\mathcal{V}_s$는 $[\mathcal{V}_s]$$=\dot{T}T^{-1}$을 이용하여 구할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/ab292d8a-a1b6-4182-9c9e-bd1f062ddd51/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/4ceca8e2-e77d-4770-9594-e619d836c3f7/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/8ad9f89c-e6a3-4dfe-9a32-3fd3a6c4ac7a/image.png" alt="">
이 식을 벡터 형태로 변환하면 다음과 같이 쓸 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/5973f8da-0bf7-4c8e-8f7b-8c985f9370e2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/f44ed5e6-2778-45e4-92e6-969c05703b5d/image.png" alt=""></p>
<p>행렬 형태로 변환하면
<img src="https://velog.velcdn.com/images/woobin_robot/post/3831e981-8ede-4101-99a2-977a4625d925/image.png" alt="">
space jacobian $J_s$를 볼 수 있다.    </p>
<p>위 유도 과정에서 볼 수 있듯이 $J_s$의 i번째 열은 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/8056c3b9-0fdd-4614-89f0-5fa35efebd21/image.png" alt="">
$J_{s1}=\mathcal{S}<em>1$이고 $J</em>{si}=AD_{T^{i-1}}\mathcal{S}<em>i$로 표현할 수 있으며 
즉 $J</em>{si}$는 zero position이 아닌 임의의 로봇 configuration에서 i번째 관절의 screw축(고정 좌표계에서 표현된)을 의미한다.</p>
<p>다음은 RRPRRR로봇의 space jacobian을 구하는 과정이다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/15135579-2fae-4e36-8a36-7c4c300f2148/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/493756a2-027e-4d2d-b818-e6afaa76c53f/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/00d382f7-f6cf-4a26-82bd-4ba42dc99cf8/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/704670fd-24de-4d5e-a153-1a80a4e1450a/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/d36ba894-9c65-4478-a186-a5903cfb3b5b/image.png" alt=""></p>
<h2 id="📌body-jacobian">📌Body Jacobian</h2>
<p>n-link open chain 로봇의 forward kinematics를 다음과 같이 표현하고
<img src="https://velog.velcdn.com/images/woobin_robot/post/1df80651-7b61-459b-a398-e47a49ea4de9/image.png" alt=""></p>
<p>이번에는 body twist $\mathcal{V}_b$를 구하는 식을 세워보자
$[\mathcal{V}_b]$$=T^{-1}\dot{T}$을 이용하여 구할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/91fb8611-04b1-4490-affa-a60c1a39023f/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/135a88ec-a307-4725-a443-60d80d28f3bd/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/1364f538-fcb5-4054-a3ea-91e18d479b3e/image.png" alt="">
벡터 형태로 변환하면 
<img src="https://velog.velcdn.com/images/woobin_robot/post/878e9a5e-39a1-42a0-bbe4-4f7a36296ac2/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/7d8a545e-6912-488d-a292-bd48926e6e9e/image.png" alt="">
행렬 형태로 변환하면 
<img src="https://velog.velcdn.com/images/woobin_robot/post/954e25d1-c14f-4ab2-8d0f-250b6698969b/image.png" alt="">
body jacobian $J_b$를 볼 수 있다.</p>
<p>$J_{bn}=\mathcal{B}_n$이며 $J_b$의 i번째 열은 다음과 같으며 
<img src="https://velog.velcdn.com/images/woobin_robot/post/0c71e6c8-d65d-4e87-b5b4-6a1b6fa6e0b8/image.png" alt="">
임의의 configuration에서 엔드 이펙터 좌표계에서 표현한 i번째 관절의 스크류 축이다.</p>
<p>아래 그림을 통하여 space jacobian, body jacobian을 직관적으로 이해할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/58fe6a6d-6cc4-4fa8-8ff2-8dd355790194/image.png" alt=""></p>
<h2 id="📌-space-jacobian과-body-jacobian의-관계">📌 Space Jacobian과 Body Jacobian의 관계</h2>
<p>Jacobian의 열 벡터는 twist이기 때문에 twist때와 같이 Jacobian도 adjoint map을 사용하여 기준 좌표계를 바꿀 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/1e6c8af6-0155-43de-85ff-afbf939a2d07/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/ce05fe6d-0d51-47da-8629-a6ac272debb8/image.png" alt=""></p>
<p>여기서 $T_{sb}$는 로봇의 forward kinamatics이다.</p>
<h1 id="📖jacobian의-다른-표현analytic-jacobian">📖Jacobian의 다른 표현(analytic Jacobian)</h1>
<p>위에서 봤듯이 엔드 이펙터의 configuration 표현법에 따라 Jacobian의 형태가 결정된다. 
이번에는 $T\in SE(3)$가 아닌 최소한의 좌표 집합 $q$를 사용하여 엔드 이펙터를 표현하는 경우를 다뤄 볼 것이다. 
3차원 task space경우에 보통 $q\in\mathbb{R}^6$는 엔드 이펙터 원점의 위치를 표현하는 3개의 좌표와 엔드 이펙터의 방향을 나타내는 3개의 좌표로 구성되며
3개의 좌표로 방향을 표현할 때 오일러 회전각,혹은 지수좌표를 사용한다.
이때 모두 고정 좌표계에서 표현된다.</p>
<p>엔드 이펙터의 속도는 $q$를 시간에 대해 미분한 $\dot{q}$이며 Jacobian을 통해 표현하면  $\dot{q}$$=$$J_a(\theta)$$\dot\theta$이며 $J_a(\theta)$를 <strong>analytic Jacobian</strong>이라고 부른다.</p>
<p>$q\in\mathbb{R}^6$에서 지수 좌표$r=\hat{w}\theta$를 사용하여 방향을 표현한다고 했을 때
다음과 같이 analytic Jacobian을 body Jacobian을 통해 구할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/83bc5670-f6e4-4890-b78f-bb3f60edcd8e/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/8e2b2d70-3225-4697-b462-fdba452f5135/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/e5b0a967-9406-459e-9a6a-36967c6940ef/image.png" alt=""></p>
<h1 id="📖inverse-velocity-kinematics-맛보기">📖Inverse Velocity Kinematics 맛보기</h1>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/ff7992e2-0171-4d8d-8c26-97c7d6dfd3cd/image.png" alt=""></p>
<p>Jacobian을 이용하여 관절의 속도가 주어졌을 때 엔드 이펙터의 속도를 구할 수 있었다.<br>이번에는 엔드 이펙터의 속도가 주어졌을 때 필요한 관절의 속도를 구해보자 </p>
<p>Jacobian의 역행렬이 존재한다면 다음과 같이 $\dot\theta$을 쉽게 구할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/38647d5b-0dab-4d6e-a407-f2a6d48b4f05/image.png" alt=""></p>
<p>로봇의 관절의 개수 n이 twist 원소 개수인 6과 같고 full rank 일때만 Jacobian의 역행렬이 존재하며 $n\ne 6$일 때는 다음과 같은 해석이 가능하다.</p>
<ul>
<li>$n&lt;6$일 때 관절의 수가 부족하여 발생시킬수 없는 twist가 존재한다.</li>
<li>$n&gt;6$일 때 관절의 개수가 많기 때문에 더 다양한 움직임을 구현할 수 있고 이러한 경우를 robot redundant라고 부른다. 이때 정해진 twist는 관절 속도에 6개의 제한을 걸게 되고 남은 $(n-6)$개의 자유도는 로봇 내부 운동을 발생시킨다.
(예를 들어 사람의 팔을 7R로봇 봐보자 책상위에 손바닥을 고정시킨 상태에서 팔꿈치를 1자유도 만큼 움직일 수 있다.)</li>
</ul>
<h1 id="📖open-chains의-정역학">📖Open Chains의 정역학</h1>
<h1 id="📖-jacobian을-사용한-정역학">📖 Jacobian을 사용한 정역학</h1>
<p>로봇이 정적평행이고 엔드 이펙터에 wrench $-\mathcal{F}$가 작용될 때 이 힘을 버티기 위한 관절의 토크를 구할 수 있다.</p>
<p><img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/91a89236-9cba-4e30-a646-a428e0743b88/a01146e1-5811-4f8b-a6e8-08d5f0e8219c/Untitled.png" alt="Untitled"></p>
<ul>
<li><p>유도</p>
<p>  open chain robot에서 에너지 보존 법칙을 다음과 같이 표현할 수 있다.</p>
<blockquote>
<p>(관절의 일률) = (로봇을 움직이기 위해 필요한 일률) + (엔드 이펙터의 일률)</p>
</blockquote>
<p>  정적평형상태를 가정하면 로봇의 알짜힘이 0이기 때문에 다음과 같다</p>
<blockquote>
<p>(관절의 일률) =  (엔드 이펙터의 일률)</p>
</blockquote>
<p>  이것을 식으로 나타내면</p>
<p>  <img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/91a89236-9cba-4e30-a646-a428e0743b88/3df24638-7c77-418f-8c81-60e7ccdfd054/Untitled.png" alt="Untitled"></p>
<p>  이 식은 고정, 물체 좌표계에 모두 적용되며 Jacobian을 사용하면 다음과 같이 나타낼 수 있다.</p>
<p>  <img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/91a89236-9cba-4e30-a646-a428e0743b88/a01146e1-5811-4f8b-a6e8-08d5f0e8219c/Untitled.png" alt="Untitled"></p>
</li>
</ul>
<hr>
<p>관절 토크에 따른 엔드 이펙터에서 발생하는 wench  $\mathcal{F}$ </p>
<p><img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/91a89236-9cba-4e30-a646-a428e0743b88/409648d1-398f-4d7c-8f8c-f7ea86c265cc/Untitled.png" alt="Untitled"></p>
<p>Jacobian이 invertible할 때만 가능한 식이다.</p>
<ul>
<li>invertible하지 않을 때</li>
</ul>
<h1 id="📒오늘의-영단어">📒오늘의 영단어</h1>
<p>substitute: 대입하다
square: 제곱; 정사각형
Static Equilibrium: 정적 평형</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Robotics 4. Forward kinematics]]></title>
            <link>https://velog.io/@woobin_robot/Robotics-4.-Forward-kinematics</link>
            <guid>https://velog.io/@woobin_robot/Robotics-4.-Forward-kinematics</guid>
            <pubDate>Sat, 14 Oct 2023 08:35:33 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/woobin_robot/post/e336be64-9286-4da1-9229-9c271acc7e19/image.png" alt=""></p>
<p>로봇팔에서 로봇의 task는 보통 엔드 이펙터를 통해 이루어 지기 때문에 로봇의 엔드 이펙터의 움직임을 원하는 데로 제어하는 것이 로봇공학의 큰 목표 중 하나이다. 
엔드 이펙터는 로봇의 관절 통해 움직이기 때문에 엔드 이펙터와 관절의 움직임 관계를 파악하여야한다.
이 관계를 다루는 학문을 로봇공학에서 기구학이라고 부른다.</p>
<p>이 기구학은 다음과 같이 두 가지로 나뉜다.</p>
<ul>
<li>정기구학(Forward kinematics): 관절의 값을 통해 엔드 이펙터의 위치와 방향을 계산</li>
<li>역기구학(inverse kinematics): 엔드 이펙터의 위치와 방향이 주어졌을 때 관절의 값을 계산</li>
</ul>
<p>이번에는 정기구학에 대해 알아볼 것이다. </p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/1e9c035a-799f-4e52-9a19-82462e6d774a/image.png" alt=""></p>
<p>위와 같이 4R(회전형 관절이 4개)로봇이 있고 관절값($\theta$)이 주었졌을 때 엔드 임팩터의 위치(x,y)와 방향($\phi$)을 다음과 삼각함수를 통해 간단히 구할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/dc450c8c-42da-43a5-b4b2-a2338890a905/image.png" alt="">
평면상의 로봇에 경우에는 위와 같이 쉽게 구할 수 있지만 로봇이 3차원 운동을 한다면 정기구학적인 분석이 어려워진다. 그래서 우리는 3장에서 배운 강체의 움직임을 통하여 좀 더 체계적으로 정기구학을 구하는 법을 알아볼 것이다. </p>
<p>정기구학을 구하는 방법은 두 가지이다. </p>
<ul>
<li><p>D-H(Denavit-Hartenberg) parameters 를 사용하여 구하기</p>
</li>
<li><p>PoE(product of exponential: 지수 곱)공식</p>
</li>
</ul>
<p>PoE을 사용하여 정기구학을 구한는 방법을 먼저 알아보자</p>
<h1 id="41-product-of-exponentials-formula">4.1 Product of Exponentials Formula</h1>
<p>PoE공식의 핵심 개념은 모든 관절이 링크에 스크류 운동을 가한다고 가정하는 것이며 
보통 고정좌표계{s}와 엔드 이펙터에 부착된 물체 좌표계{b}를 정의하고 {s}에 대한 {b}의 위치와 방향을 스크류 운동 이론을 통하여 구한다.</p>
<p>여기서 고정좌표계와 물체 좌표계 중 어느 좌표계를 기준으로 스크류 운동을 표현하는 지에 따라 정기구학식이 달라진다.  </p>
<h2 id="411-screw-axes-in-the-base-frame">4.1.1 Screw Axes in the Base Frame</h2>
<p>먼저 {s}를 기준으로 스크류 운동을 표현했을 때를 알아보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/07a54060-459c-4eaa-827c-b7661993588d/image.png" alt="">
위의 로봇은 회전형 관절이 n개 있는 로봇이다. $i$번째 관절의 회전값을 $\theta_i$이라고 하자
여기서 모든 관절의 값이 0이라고 가정하고 이때의 엔드 이펙트의 위치 즉 {b}를 $M\in SE(3)$이라고한다. 
이렇게 로봇이 0인 상태에서 엔드 이펙터와 가까운 관절부터 회전하여 {b}의 위치가 바뀌는 것을 식으로 표현해보자</p>
<p>n번째 관절만 $\theta_n$만큼 회전하고 나머지 관절은 0 위치에 있다고 할때 엔드 이펙터의 위치는 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/c9869ef6-ee03-4103-a15b-faf053de91f8/image.png" alt="">
$T\in SE(3)$는 위치가 변한 {b} 즉 엔드 이펙터의 위치와 방향을 나타내고 $S_n\in \mathbb{R}^6$은 로봇의 0 위치에서 n번째 관절의 회전에 대한 스크류 축을 고정 좌표계를 기준으로 표현한 것이다.</p>
<p>$n-1$번째 관절까지 회전한다면 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/2020558f-9911-4f82-b5ae-6578aa5964a8/image.png" alt=""></p>
<p>이와 같은 방법으로 엔드 이펙터와 가장 가까운 관절부터 회전하여 모든 관절이 회전하였을 때 엔드 이펙터의 위치와 방향을 다음과 같이 구할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/656cf5cb-49ca-4a83-964e-ab4ad32d75b4/image.png" alt="">
여기서 엔드 이펙터와 가까운 관절부터 회전하는 것은 다음과 같은 이유가 있다.
$(i-1)$번 관절의 회전은 $i$번 관절의 위치를 변화시킨다.(고정 좌표계에서 봤을 때) $S_i$는 0위치에서의 스크류 축 이기 때문에 관절의 위치가 변화되면 $S_i$을 이용하여 운동을 표현할 수가 없다. 그렇기 때문에 $(i-1)$번 관절이 $i$번 관절보다 먼저 회전을 하게되면 나중에 $i$번 관절에 대한 회전운동을 표현할 때 문제가 발생한다. 하지만 $i$번 관절의 회전은 $(i-1)$번 관절의 위치를 변화시키지 않기 때문에 이 때에는 $S_{i-1}$을 그대로 사용할 수 있다. 그렇기 때문에 $i$번이 $(i-1)$번 보다 먼저 회전한다고 가정하고 계산을 하는 것이다.</p>
<p>이렇게 고정좌표계를 기준으로 스크류 운동을 표현하는 PoE를 space form PoE라고 부른다.</p>
<h3 id="4111-examples">4.1.1.1 Examples</h3>
<p>가장 많이 사용되는 6R로봇팔의 정기구학을 공간 PoE를 이용하여 구해보자
    <img src="https://velog.velcdn.com/images/woobin_robot/post/b78dc4e2-7da5-4694-ad5e-c3562249e570/image.png" alt="">
위 그림이 로봇의 0위치라고 할때 $M$을 구해보면 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/15e1129f-fb36-4a79-9c78-288b695b2f1e/image.png" alt=""></p>
<p>$S_i=(w_i,s_i),i=1...6$은 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/072cd3a5-c524-45a3-94f5-17242cb20192/image.png" alt="">
위의 값을 바탕으로 아래에 식에 적용하면 엔드 이펙터의 좌표계를 구할 수 있다.($n=6$)
<img src="https://velog.velcdn.com/images/woobin_robot/post/656cf5cb-49ca-4a83-964e-ab4ad32d75b4/image.png" alt=""></p>
<p>아래 그림처럼 선형관절이 있는 RRPRRR로봇에 경우는 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/cdee4db4-b65a-4042-a26b-98c360cd0ebd/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/6bbeb2e0-da21-45f3-9abe-48153def3409/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/fad98233-68db-4ef4-890c-f3e7548b2339/image.png" alt=""></p>
<h2 id="412-screw-axes-in-the-end-effector-frame">4.1.2 Screw Axes in the End-Effector Frame</h2>
<p>엔드 이펙터에 부착된 물체 좌표계{b}를 기준으로 스크류 운동을 표현한 PoE를 body form PoE라고 부른다.</p>
<p>이번에는 body form PoE에 대해 알아보자.</p>
<p>여기서는 다음과 같은 행렬 지수의 성질을 사용하며
<img src="https://velog.velcdn.com/images/woobin_robot/post/5fa93014-b888-44d0-b65a-e84f0117f282/image.png" alt="">
space form 식의 오른쪽 부터 위에 등식을 n번 박복 적용하여 body form 식을 구할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/79105e0b-83fa-4d48-b5f9-a1203824d2e1/image.png" alt=""></p>
<p>여기서 $[\mathcal{B}<em>i]=M^{-1}[S_i]M$ 이다.
즉 $\mathcal{B}_i=[ADT</em>{M^{-1}}]S_i$이며 $[\mathcal{B}_i]$는 고정좌표계에서 표현한 스크류 축이라는 것을 알 수 있다. 이 식에서 알 수 있듯이 body form PoE는 엔드 이펙터에서 먼 관절의 스크류 운동부터 고정 좌표계를 기준으로 $M$을 변환시키는 방식으로 계산한다는 것을 알 수 있다. </p>
<p>엔드 이펙터에서 먼 관절부터 적용하는 이유는 space form의 경우와 반대이다.
엔드 이펙터의 좌표계에서 봤을 때는 $i$번 관절의 운동은 $(i-1)$번 관절의 위치를 변화시지만. $(i-1)$번 관절의 회전은 $i$번 관절의 위치를 변화시키지 않기 때문이다.</p>
<h3 id="4121-examples">4.1.2.1 Examples</h3>
<p>앞에서 다룬 6R로봇을 이번에는 body form PoE를 이용하여 구해보자
    <img src="https://velog.velcdn.com/images/woobin_robot/post/b78dc4e2-7da5-4694-ad5e-c3562249e570/image.png" alt="">
 $M$은 space form 일 때와 똑같다.</p>
<p> <img src="https://velog.velcdn.com/images/woobin_robot/post/15e1129f-fb36-4a79-9c78-288b695b2f1e/image.png" alt=""></p>
<p> 이번에는 인데 이펙터 기준 좌표계를 기준으로 각 관절 운동의 스크류 축 $\mathcal{B}_i=(w_i,v_i)$을 정리해보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/0ab1ef74-3d63-4f27-9eab-f8c8a6c60e3c/image.png" alt=""></p>
<p>이 정보를 바탕으로 다음과 같이 계산하여 엔드 이펙터의 좌표를 알 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/4f8406d4-ff73-4bd7-9489-c4819eaec0c2/image.png" alt=""></p>
<h1 id="42-denavithartenberg-parameters"><del>4.2 Denavit–Hartenberg Parameters</del></h1>
<p>D-H parameters 방법
나중에 작성 예정이다.</p>
<h1 id="43-the-universal-robot-description-format">4.3 The Universal Robot Description Format</h1>
<p>정기구학에서 중요하게 다룰 파트는 아니라고 생각하지만
modern robotics 책에서는 설명하기 때문에 간단하게 언급만 하겠다.</p>
<p>Universal Robot Description Format 번역하면 로봇 기술용 통일 포멧이며
줄여서 URDF라고 불린다. 
URDF는 로봇의 동작을 구현하기 위해 필요한 각 링크들의 지오메트리, 질량 등의 정보가 있는 xml 파일이다. 즉 URDF파일이 있으면 여러 시뮬레이션 툴에서 그 로봇의 동작 제어를 구현해 볼 수 있다. ROS(Robot Operating System)에서 주로 사용된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Robotics 3. Rigid-Body Motions]]></title>
            <link>https://velog.io/@woobin_robot/Robotics-3.-Rigid-Body-Motions</link>
            <guid>https://velog.io/@woobin_robot/Robotics-3.-Rigid-Body-Motions</guid>
            <pubDate>Mon, 02 Oct 2023 08:28:15 GMT</pubDate>
            <description><![CDATA[<p>우리는 로봇의 움직임을 분석할 때 로봇의 링크를 강체로 취급하고 그 강체의 위치와 이동을 수학적으로 표현한다.
이번에는 강체의 위치와 이동을 어떻게 표현하는 지에 대해 다룰거다.
이 파트에서 배운 표현이 앞으로 계속 사용되기 때문에 잘 숙지하는 것이 좋다.</p>
<p>이 파트에서는 나의 개인적인 분석과 해석이 들어가기 때문에 본책의 내용과 순서와 설명이 다를 수 있다.</p>
<h1 id="31-rigid-body-motions-in-the-plane">3.1 Rigid-Body Motions in the Plane</h1>
<p><strong>평면에서 강체의 표현</strong>
<img src="https://velog.velcdn.com/images/woobin_robot/post/6d4017c5-1933-42b4-9072-d002ffe6c26c/image.png" alt="">
보통 로봇의 강체에 달린 좌표계를 물체 좌표계${b}$로 표현하고
로봇이 놓인 움직이지 않는 공간에 좌표계를 고정 좌표계${s}라고 표현한다.
이런 몰체 좌표계의 움직임을 고정 좌표계에 대해 설명하며 우리는 로봇의 움직임을 설명 할 수 있는 것이다.
물체 좌표계를 고정 좌표계에 대해 표현해 보자</p>
<p>물체 좌표계의 원점을 표현하는 벡터 $p$를 공간 좌표계의 단위축$\hat{x}_s,\hat{y}_s$을 사용하여 다음과 같이 나타낼 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/57988306-7c01-4a28-80d9-47de6930f644/image.png" alt=""></p>
<p>물체 좌표계의 방향을 표현하기 위하여 물체 좌표계의 단위축 $\hat{x}_b,\hat{y}_b$을 고정 좌표계에 대해 다음과 같이 표현해보자.
<img src="https://velog.velcdn.com/images/woobin_robot/post/725f869d-f83e-40db-9a9a-4c8ed34a9369/image.png" alt="">
위의 표현들을 벡터와 행렬로 나타내 보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/4607df6d-b5fd-4b6a-8f00-e8dc3b3e0d7f/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/4bdb0f0f-a918-4f0b-a22b-98c2cf532029/image.png" alt="">
 $p$는 물체 좌표계의 위치를 $P$는 물체 좌표계의 방향을 나타낸다.
 이렇게 물체좌표계 즉 강체의 위치와 방향을 표현할 수 있다.</p>
<p> 똑같은 방법으로 3차원에 있는 강체를 다음과 같이 표현할 수 있다.
 <img src="https://velog.velcdn.com/images/woobin_robot/post/449abb33-71ac-4558-8e7a-608439bc8fc8/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/dbc5c48a-7814-44e0-982c-107acee9afff/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/959f96cb-6bf1-4508-93a8-872c5618cab4/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/f2975a90-1c37-46dc-86a9-658d0d386086/image.png" alt=""></p>
<p> 이 정보들은 강체의 자세를 표현하거나 기준 좌표계의 변경, 그리고 벡터나 좌표계를 이동시킬 때 사용될 수 있다. 이에 대해서는 나중에 자세히 다루어진다. </p>
<p>위에서 방향을 나타내는 행렬 $P$와 $R$은 회전행렬(rotation matrixes)이라 불린다. 위에서 볼 수 있듯이 회전행렬의 열벡터가 단위벡터라는 것을 기억하자.</p>
<h1 id="32-rotations-and-angular-velocities">3.2 Rotations and Angular Velocities</h1>
<p><strong>회전과 각속도</strong></p>
<h2 id="321-rotation-matrixes">3.2.1 Rotation Matrixes</h2>
<p><strong>회전행렬</strong></p>
<p>2.3.2의 간접적 표현식에서 설명했 듯이 회전행렬은 간접적 표현식을 사용한다. 3차원 공간에서 강체의 방향은 3자유도를 사용하기 때문에 3차원 회전행렬에서 3개의 원소만 독립적으로 정해질 수 있다. 
<img src="https://velog.velcdn.com/images/woobin_robot/post/4fb7c4d0-0faf-46d0-9926-7920ebdd305f/image.png" alt=""></p>
<p>위와같이 3차원 회전행렬은 3 by 3행렬이고 이 행렬의 9개의 원소에 6개의 제약조건이 걸린다. 이 제약조건을 알아보자.</p>
<p>위에서 볼 수 있듯이 회정행렬은 단위축(즉 단위벡터이다.)을 행렬의 열로 사용하기 때문에 각 열들은 서로 orthogonal이다. 즉 크기가 1이고 서로 수직이다.</p>
<p>그럼으로 다음을 만족한다. 
<img src="https://velog.velcdn.com/images/woobin_robot/post/71f42675-6d25-463b-8f04-17af4a8c738e/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/03f0d19a-183f-441a-ae09-0a1855996e94/image.png" alt="">
이것이 위에서 말한 6개의 제약조건이 된다.
이렇게 각 열이 orthonormal한 행렬을 orthogonal matrix 혹은 orthnormal matrix라고 한다.</p>
<h3 id="3211--properties-of-rotation-matrices">3.2.1.1  Properties of Rotation Matrices</h3>
<p><strong>회전행렬의 성질</strong></p>
<p>즉 회전행렬은 orthogonal matrix이다. 이러한 3 by 3 행렬들을 특수직교군(Special Orthogonal Group) $SO(3)$라고 한다. ($SO(2)$은 $2$ by $2$ 회전행렬이다.)</p>
<p>특수직교군은 &#39;군&#39;(group)임으로 다음과 같은 수학적인 군의 성질을 만족시킨다. 
<img src="https://velog.velcdn.com/images/woobin_robot/post/49a517d7-43f8-4486-979c-801d8a82da32/image.png" alt=""></p>
<p>추가로 특수직교군은 다음과 같은 성질을 가진다.
특수직교군에 속한 행렬 $R$에 대해</p>
<ul>
<li>$R^{-1}=R^T$이고 이 둘 모두 회전행렬이다.</li>
<li>$det(R)=1$이다. </li>
<li>두 회전행렬의 곱 또한 회전행렬이다.</li>
<li>벡터$x$에 대해 $y=Rx$는 $x$의 크기와 같다.</li>
</ul>
<h3 id="3212-uses-of-rotation-matrices">3.2.1.2 Uses of Rotation Matrices</h3>
<p><strong>회전행렬의 활용</strong></p>
<p>좌표계 {$a$},{$b$},{$c$}가 있을 때 $R_{ab}$는 {$a$}를 기준으로 표현한 {$b$}의 방향이다. 그럼으로 $R_{bc}$는 {$b$}에서 보는 {$c$}의 방향이라고 할 수 있다.</p>
<p>여기서 $R_{ac}R_{ca}=I$ 임으로 $R_{ac}=R_{ca}^{-1}$이다.</p>
<p>이런 회전행렬의 용도는 3가지이다.</p>
<h4 id="1-좌표계의-방향을-표현하기-위해">(1) (좌표계의) 방향을 표현하기 위해</h4>
<p>3.1에서 보았듯이 $R$자체로 방향을 표현할 수 있다.
$R_{bc}$는 {$b$}에서 보는 {$c$}의 방향이며
$R_{bc}$의 열은 {$b$}에서 표현한 {$c$}의 단위축이다. 회전행렬을 설명하는 글을 많이 봐왔지만 이렇게 단위축으로 설명하는 경우는 거의 없었다. 하지만 나는 단위축 해석을 통해 회전행렬을 직관적으로 이해 할수 있었다.</p>
<h4 id="2-벡터나-좌표계를-표현하고-있는-기준-좌표계를-변환하기-위해">(2) 벡터나 좌표계를 표현하고 있는 기준 좌표계를 변환하기 위해</h4>
<p>$R_{ac}=R_{ab}R_{bc}$
$p_a=R_{ab}p_b$
위에 식처럼 기준좌표계를 변환시킬 수 있다.</p>
<h4 id="3-벡터나-좌표계를-회전하기-위해">(3) 벡터나 좌표계를 회전하기 위해</h4>
<p>$\hat{w}$를 회전축으로 하여 $\theta$만큼 회전시키는 회전행렬을 다음과 같이 표현할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/7abf5126-6b21-43a9-ac1b-86fc56145bc2/image.png" alt="">
$\hat{w}=(\hat{w}_1,\hat{w}_2,\hat{w}_3)$에 대해 $R$은 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/a50196a7-ac7d-4a0b-ae1c-120221d76d90/image.png" alt="">
이 식의 증명은 3.2.3.2에서 다룬다.</p>
<p>다음과 같이 {$b$}를 $R$을 이용하여 두 가지 방식으로 회전시킬 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/8b017189-b04b-4283-928c-93a4009b0e48/image.png" alt="">
여기서 {$\acute{b}$}는 {$b$}가 회전된 것이다.</p>
<p>이 식에서 볼 수 있듯이 R을 앞에 곱하면 고정 좌표계에서 표현한 값이 $\hat{w}$인 회전축을 중심으로 회전한 것이고 R을 뒤에 곱하면 물체 좌표계에서 표현한 값이 $\hat{w}$인 회전축을 중심으로 회전한 것이다. 
즉 전자는 고정 좌표계를 중심으로 후자는 물체 좌표계를 중심으로 회전시킨 거다.</p>
<p>아래 그림이 이해에 도움이 될 것이다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/7ae11c8a-9686-4a7b-b9c4-4f4ec1348e4d/image.png" alt=""></p>
<p>벡터의 경우에는 그 벡터를 표현하는 기준 좌표계 하나만 있음으로 벡터의 회전은 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/774a4bc4-b14d-4520-b869-d1ce3cb9453d/image.png" alt=""></p>
<h2 id="322-angular-velocities">3.2.2 Angular Velocities</h2>
<p><strong>각속도</strong></p>
<p>이번에는 좌표계를 임의의 각속도를 중심으로 회전시키는 것을 봐보자
각속도 벡터 $w$는 회전축$\hat{w}$와 각속도의 크기$\dot{\theta}$로 다음과 같이 정의된다. 
$w=\hat{w}\dot{\theta}$
다음 그림과 같이 좌표계를 회전시킨다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/a049464f-a4c6-404b-92fe-9f6219d40536/image.png" alt="">
여기서 $w$가 어느 좌표계에서 나타낸 지를 알아야 한다.
$w_s$는 {s}좌표계(고정좌표계)에서 나타낸 것이고 $w_b$는 {b}좌표계(물체좌표계)에서 나타낸 $w$이다.</p>
<p>그리고 위에서 설명한 회전행렬의 활용을 이용하여 다음처럼 기준좌표계를 바꿀 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/940c426a-3de2-4f84-8105-7348aa9a2f13/image.png" alt=""></p>
<p>이 각속도는 물체 좌표계{b}의 방향을 표현한 $R$과 다음과 같은 관계가 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/6f3395eb-98fc-4930-9f9e-ec1ab5cbb624/image.png" alt="">
여기서 $\dot{R}$은 각속도$w$로 인해 회전하는 $R$의 변화율이고 [$w$]은 $w$의 반대칭(skew-symmetric)행렬표현이다.</p>
<p>이 식의 증명과 반대칭행렬 표현에 대한 설명해보겠다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/a049464f-a4c6-404b-92fe-9f6219d40536/image.png" alt="">
이 그림에서 회전하는 좌표계의 단위축들의 변화율은 다음과 같이 구할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/773b6fca-1ca1-4fe9-937f-87bc7a728352/image.png" alt=""></p>
<p>물체 좌표계{b}가 고정 과표계{s}에서 표현된 각속도 $w$를 기준으로 회전한 다고 할 때 
단위축 $\hat{x},\hat{y},\hat{z}$는 {b}의 방향을 나타내는 회전행렬을 $R$의 열이다. 이 열을 $r_1,r_2,r_3$로 표현하고 이 회전행렬의 시간에 대한 변화율을 $\dot{R}$로 한다면 다음과 같은 식을 세울 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/d45b413b-f254-4ef2-88c5-3bdca6f1ded3/image.png" alt="">
 이 세 방정식을 행렬을 사용하여 정리하자
<img src="https://velog.velcdn.com/images/woobin_robot/post/5fbecd4f-aa25-4aee-a98b-17b82d8b46e2/image.png" alt="">
이 식의 외적 기호를 제거하기 위해 우리는 반대칭(skew-symmetric)행렬 표현을 사용할 것이다. </p>
<h4 id="반대칭skew-symmetric행렬-표현">반대칭(skew-symmetric)행렬 표현</h4>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/66858ca0-2047-4356-b914-3af8cf79dd56/image.png" alt="">
반대칭 행렬이란 위 식을 만족하는 행렬이며
벡터 $x=(x_1,x_2,x_3)^T$의 3 by 3 반대칭 행렬 표현 [$x$]은 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/1354fe35-c00f-49c7-bf4f-eab2d8875ee0/image.png" alt=""></p>
<p>그리고 3 by 3 실수 반대칭행렬의 집합을 $so(3)$라 한다.
반대칭 행렬과 회전회전의 성질로 임의의 $w\in\mathbb{R}^3$와 $R\in SO(3)$가 일을 때 다음 식이 항상 성립한다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/d2aaf767-f0b8-4756-97f5-9c2575d15ab5/image.png" alt="">
이 식의 증명은 본책에서 볼 수 있다.</p>
<p>이 반대칭행렬 표현을 사용하여 우리는 다음과 같이 위에서 정리한 식의 외적 기호를 없앨 수 있다.</p>
<blockquote>
<p>$\dot{R}=w_s\times R=[w_s]R$</p>
</blockquote>
<p>이 식의 양변의 오른쪽의 $R^T$을 곱해주면 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/3aecd483-be5b-4b21-b66c-0e93b0984b0b/image.png" alt=""></p>
<p>이번에는 {b}를 기준좌표계로 하여 설명해 보자</p>
<p>$w_b$는 회전행렬의 성질로 인해 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/3ec10346-aee8-4094-ae6a-b2a8965448ba/image.png" alt="">
이번에는 반대칭행렬 표현을 이용해보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/0deda6cf-be9d-408d-80a6-bf95014004c6/image.png" alt="">
여기서 Proposition 3.8은 위에서 소개되었던 반대칭행렬 표현의 성질인 다음의 식이다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/d2aaf767-f0b8-4756-97f5-9c2575d15ab5/image.png" alt=""></p>
<h2 id="323-exponential-coordinate-representation-of-rotation">3.2.3 Exponential Coordinate Representation of Rotation</h2>
<p><strong>회전의 지수 좌표 표현</strong></p>
<p>회전을 3차원 매개변수로 표현하는 것이 회전의 지수 좌표 표현이다.
3차원의 회전은 회전축 $\hat{w}$와 회전각 $\theta$으로 표현될 수 있고
이 때 벡터 $\hat{w}\theta$가 회전의 3차원 지수좌표 표현이 된다.</p>
<p>회전행렬 $R$의 지수좌표 $\hat{w}\theta$는 다음과 같이 3가지 방식으로 해석될 수 있다.</p>
<ul>
<li><p>처음 $s$와 일치하던 좌표계가 $s$에서 표현한 축$\hat{w}$를 중심으로 $\theta$만큼 회전했다 할 때 $R$은 회전한 좌표계의 방향을 $s$에서 표현한 것이다.</p>
</li>
<li><p>처음 $s$와 일치하던 좌표계가 $s$에서 표현한 각속도 $\hat{w}$$\theta$로 단위 시간 만큼 회전했다 할 때 $R$은 회전한 좌표계의 방향을 $s$에서 표현한 것이다.</p>
</li>
<li><p>처음 $s$와 일치하던 좌표계가 $s$에서 표현한 각속도 $\hat{w}$로 시간$\theta$ 만큼 회전했다 할 때 $R$은 회전한 좌표계의 방향을 $s$에서 표현한 것이다.</p>
</li>
</ul>
<p>여기서 회전행렬과 지수좌표 사이에 변환을 <strong>행렬지수</strong>와 <strong>행렬로그</strong> 를 활용하여 할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/87f9ab94-9efc-4873-b0cf-3d32a0a51617/image.png" alt="">
위 표현처럼 지수좌표가 $\hat{w}\theta$일때 반대칭행렬$[\hat{w}]\theta$의 행렬지수(exp)가 그 회전의 회전행렬$R$이고 
회전행렬$R$의 행렬로그(log)가 지수좌표의 반대칭행렬$[\hat{w}]\theta$이다.</p>
<h3 id="3232--exponential-coordinates-of-rotations">3.2.3.2  Exponential Coordinates of Rotations</h3>
<p><strong>행렬 지수(회전의 지수 좌표)</strong></p>
<p>회전의 지수좌표가 $\hat{w}\theta$일때 회전의 회전행렬 즉 반대칭행렬$[\hat{w}]\theta$의 행렬지수는 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/04aef8cb-2bdd-4191-aa79-7072cfa1feb4/image.png" alt="">
행렬로 표현하면 
<img src="https://velog.velcdn.com/images/woobin_robot/post/a50196a7-ac7d-4a0b-ae1c-120221d76d90/image.png" alt="">
이다.</p>
<p>행렬 지수 표현은 $e^{[\hat{w}]\theta}$로 많이 사용함으로 위에 행렬표현을 암기하기 보다는 $\hat{w}$을 중심으로 $\theta$만큼 회전하는 회전행렬을 $e^{[\hat{w}]\theta}$로 표현한다는 것을 기억하자.</p>
<h3 id="3233-matrix-logarithm-of-rotations">3.2.3.3 Matrix Logarithm of Rotations</h3>
<p><strong>행렬 로그(회전 행렬의 행렬 로그)</strong></p>
<p>다음과 같은 알고리듬으로 회전행렬$R$의 행렬지수를 구할 수 있다.</p>
<ul>
<li><p>$R=I$이면 $\theta=0$이고 $\hat{w}$은 정의되지 않는다.</p>
</li>
<li><p>$trR=-1$이면  $\theta=\pi$이고 $\hat{w}$는 다음 세 벡터 중에서 적합한 해로 둔다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/65b41760-e184-4684-8989-44da46de0d33/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/ef2dd141-da17-4bb6-8e3f-b3217507c56b/image.png" alt="">
여기서 $r_{ij}$는 $R$의 $i$행 $j$열인 원소이다.</p>
</li>
<li><p>그 외에 경우에는 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/945d47ef-84fb-42d4-acf8-f6b464a17d7d/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/50952153-0bef-4cb7-a486-d605a5f77d9e/image.png" alt=""></p>
</li>
</ul>
<p>모든 $R$이 알고리금의 세 가지 경우 중 어느 한 가지에 속하기 때문에 모든 행렬 $R$이 존재한다. 즉 지수좌표 $\hat{w}\theta$가 존재한다. 
행렬 로그가 계산하는 지수 좌표는 $\Vert \hat{w}\theta \Vert \leq \pi$이기 때문에 벡터 $r$을 $r=\hat{w}\theta$라고 하고 모든 회전행렬의 지수좌표에 대한 벡터 $r$을 3차원 공간에 그린다면 반지름이 $\pi$인 속인 꽉찬 구가 나올 것이다. 즉 $SO(3)$를 이런 구로 표현할 수 있다. 여기서
$trR\neq-1$이면 임의의 $R$에 해당하는 점(벡터) $r$이 유일하게 존재하고
$trR=-1$이면 이 $R$에 해당하는 점 $r$은 구면에 서로 반대편에 존재하는 두 점으로 주어진다. ($\theta=k\pi$에서 $k$가 홀수인 경우를 생각해 보자!)</p>
<p>이런 행렬지수와 행렬로그의 증명은 본책에서 볼 수 있다.</p>
<h1 id="33--rigid-body-motions-and-twists">3.3  Rigid-Body Motions and Twists</h1>
<p><strong>강체운동과 트위스트</strong></p>
<p>지금 까지 좌표계(강체)의 회전에 대해서만 다루었다. 이번에는 좌표계의 위치까지 다루어 보아 강체의 운동을 설명해볼 것이다.</p>
<h2 id="331--homogeneous-transformation-matrices">3.3.1  Homogeneous Transformation Matrices</h2>
<p><strong>동차 변환행렬</strong></p>
<p>회전행렬은 강체의 회전만을 표현한다. 이번에는 회전과 위치를 모두 표현하는 동차 변환행렬(homogeneous transformation matrix)에 대해 알아보자</p>
<p>$R$은 {s}에서 바라본 {b}의 방향을 표현하는 회전행렬이고</p>
<p>벡터 $p\in\mathbb{R}^3$는 {s}에서 바라본 {b}의 원점을 열 벡터로 표현한 것일 때</p>
<p>동차 변환행렬 $T$는 다음과 같이 회전행렬 $R$과 벡터 $p$ 를 하나의 행렬로 묶어서 표현하며 {s}에서 바라본 {b}의 자세를 나타낸다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/88ede1a0-0988-40f3-b0a8-a9a74d80eb47/image.png" alt=""></p>
<p>변환행렬 $T$는 ($R,p$)로 표기되기도 한다.</p>
<p>위와 같이 $R\in SO(3)$와 열벡터 $p\in\mathbb{R}^3$로 표현된 행렬들을 특수유클리드군(Special Euclidean Group) $SE(3)$이라고 한다. (강체운동의 군 혹은 동차 변환행렬의 군으로도 알려졌다.)
$SE(2)$은 3 by 3 행렬이고 2차원의 좌표계의 방향과 위치를 표현한다.</p>
<h3 id="3311-properties-of-transformation-matrices">3.3.1.1 Properties of Transformation Matrices</h3>
<p>*<em>변환행렬의 성질 *</em>
이런 변환행렬의 성질을 알아보자</p>
<ul>
<li><p>변환행렬의 역행렬 또한 변환행렬이며 다음과 같은 형태를 갖는다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/a463fd68-ce7c-47ed-a7d6-3e1d1b5d4b4b/image.png" alt=""></p>
</li>
<li><p>두 변환행렬의 곱 또한 변환행렬이다.</p>
</li>
<li><p>변환행렬의 곱셈은 결합 법칙을 만족한다.</p>
</li>
<li><p>모든 변환행렬 $T\in SE(3)$와 $x,y,z\in \mathbb{R}^3$에 대해 다음이 성립한다.
  (a) $\Vert Tx-Ty\Vert=\Vert x-y\Vert$
  (b) $\langle Tx-Tz,Ty-Tz \rangle=\langle x-z,y-z \rangle$
  이 성질은 변환행렬의 활용을 본 후에 더 봐야 이해가 잘 될 것이다.</p>
</li>
</ul>
<h3 id="3312--uses-of-transformation-matrices">3.3.1.2  Uses of Transformation Matrices</h3>
<p><strong>변환행렬의 활용</strong></p>
<p>변환행렬의 활용 또한 회전행렬의 활용과 비슷한다. 단지 변환행렬은 회전뿐만 아니라 위치까지 다룬다.</p>
<p>변환행렬의 활용을 알아보자</p>
<h4 id="1-강체의-자세위치와-방향을-표현하기-위해">(1) 강체의 자세(위치와 방향)을 표현하기 위해</h4>
<p>{s}에서 바라본 물체 좌표계{b}자세를 표현하는 변환행렬을 $T_{sb}$라고 하며
$T_{sb}=(R,p)$에서 $R$은 {s}에서 본{b}의 방향 $q$는 {s}에서 본{b}의 위치를 바타낸다.</p>
<h4 id="2-벡터나-좌표계를-표현하고-있는-기준-좌표계를-변환하기-위해-1">(2) 벡터나 좌표계를 표현하고 있는 기준 좌표계를 변환하기 위해</h4>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/38b91512-f63e-4f54-9653-f34ca5a73af8/image.png" alt=""></p>
<p>회전행렬 때처럼 위에 식과 같이 기준좌표계를 변환시킬 수 있다.</p>
<h4 id="3-벡터나-좌표계를-이동시키기-위해">(3) 벡터나 좌표계를 이동시키기 위해</h4>
<p>$T=(R,p)$를 통하여 벡터나 좌표계를 $R$만큼 회전시킨 후 $p$만큼 이동시킬 수 있다.
예를들어 벡터 $x\in\mathbb{R}^3$를 변환시킨다고 한다면 $x$의 아래의 1을 붙여 벡터$(x^T,1)^T$를 만들고 $T=(R,p)$를 통하여 변환해보자.
<img src="https://velog.velcdn.com/images/woobin_robot/post/2b0f57f7-ce5c-4c8b-9ed2-ac88991b253f/image.png" alt="">
이와 같이 $Rx+p$를 얻을 수 있고 이것은 $x$를 $R$만큼 회전시킨 후 $p$만큼 이동시킨 것이라는 것을 알 수 있다. 여기서 $(x^T,1)^T$은 $x$를 동차 좌표로 표현한 것이고 그래서 $T\in SE(3)$를 동차 변환이라 부르는 것이다.
앞으로 $Tx$처럼 벡터와에 곱은 위와 같은 변환을 의미한다.
이는 좌표계도 똑같이 적용된다. 
 여기서 회전행렬 때와 같이 변환행렬을 어디에 곱하는 지에 따라 기준좌표가 달라진다.</p>
<ul>
<li><p>$T$를 $T_{sb}$앞에 곱했을 때(고정좌표계 기준의 변환)
<img src="https://velog.velcdn.com/images/woobin_robot/post/6dec5482-372f-4eb9-ad6a-f1d5b8376057/image.png" alt="">
$T=(R,p)$의 $\hat{w}$와 $p$를 표현한 좌표계가 {s}가 된다. 그리고 이런 고정좌표계 기준의 변화는 좌표계{b}를 {s}좌표계를 기준으로 회전시킨 후 회전된 {b}를 {s}의 $p$만큼 이동시켜 {$b\acute{}$}를 얻는다.</p>
</li>
<li><p>$T$를 $T_{sb}$뒤에 곱했을 때(물체좌표계 기준의 변환)
<img src="https://velog.velcdn.com/images/woobin_robot/post/273b7ebf-0200-4769-a7e8-1776b18c0d4a/image.png" alt="">
$T=(R,p)$의 $\hat{w}$와 $p$를 표현한 좌표계가 {b}가 된다. 그리고 이런 물체좌표계 기준의 변화는 좌표계{b}를 {b}의 $p$만큼 이동시킨 후 이동된 좌표계를 기준으로 회전시켜 {$b\acute{}$}를 얻는다.</p>
</li>
</ul>
<p>이런 이동의 차이를 다음 그림에서 시각적으로 볼 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/a60dcd10-4728-49f1-9aa8-e1a2258f07f4/image.png" alt="">
왼쪽 그림이 고정좌표계 기준의 변환이고 오른쪽이 물체좌표계 기준의 변환이다.</p>
<h2 id="322-twists">3.2.2 Twists</h2>
<p><strong>트위스트</strong></p>
<p>변환행렬이 회전과 위치를 모두 표현한 것처럼
트위스트는 위에서 배운 물체의 각속도와 선속도를 다음과 같이 모두 표현한 것이며 공간 속도(spatial velocity)라고도 불린다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/30bd1c50-d60a-452a-947f-633ba0d03966/image.png" alt=""></p>
<p>이 트위스트는 $\mathcal{V}$로 표현되며 첨자를 통해 다음과 같이 표현된다.</p>
<ul>
<li>$\mathcal{V}_b$: 물체 좌표계에서의 트위스트 즉 물체 트위스트(body twist)</li>
<li>$\mathcal{V}_s$: 공간(고정) 좌표계에서의 트위스트 즉 공간 트위스트(spatial twist)</li>
</ul>
<p>고정좌표계{s}와 물체좌표계{b}가 있고 물체 좌표계가 부착된 강체가 각속도 $w$로 회전하면서 속도 $v$로 이동하고 있다고 하자 이때 트위스트 $\mathcal{V}_b$와 $\mathcal{V}_s$는 다음과 같다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/94a55ef2-9637-43c8-bf62-b427db7009fb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/ed8fd9f2-07eb-4142-b574-1913459a8909/image.png" alt=""></p>
<p>$w_b$는 {b}에서 표현한 각속도이며 $w_s$는 {s}에서 표현한 각속도이다.
$v$는 이 강체가 무한히커서 {s}의 원점 위에도 이 강체가 놓인다고 가정을 하면 다음과 같은 해석이 가능하다.</p>
<ul>
<li>$v_b$는 강체에서 {b}의 원점에 있는 점의 선속도를 {b}에서 표현한 값이다.</li>
<li>$v_s$는 강체에서 {s}의 원점에 있는 점의 선속도를 {s}에서 표현한 값이다.</li>
</ul>
<p>여기서 조심해야 할 것은 회전의 중심이 {s}의 원점을 지나지 않는다면 $v_s$은 강체 중심의 선속도와 동일하지 않다는 것이다.
다음 그림과 같이 강체 중심이 아닌 {s}의 원점에 있는 점의 선속도를 {s}에서 표현한 것 임으로 강체가 이동하지 않고 회전만 해도 $v_s$는 0이 아니게 된다.
($v_b$에서도 마찬가지이다.)
<img src="https://velog.velcdn.com/images/woobin_robot/post/318373b5-dd9f-4266-a6f1-b6d118de0818/image.png" alt="">
(초기 강체의 자세가 실선이고 이동후의 강체의 자세가 점선이다.)
이때  $v_s$는 다음과 같다.</p>
<blockquote>
<p>$v_s=-w\times q$</p>
</blockquote>
<p>그리고 {s}에서 바라본 {b}의 자세인 변환행렬$T_{sb}$가 있을 때 트위스트와 변환행렬은 다음과 같은 관계가 있다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/12f8354f-0b89-4851-9b1b-01941740251c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/4fd36b31-1411-4938-8874-92d50eb5d793/image.png" alt="">
여기서 [$\mathcal{V}$]는 4 by 4행렬이며 트위스트의 행렬표현 $se(3)$라 한다. 
위에 식들은 각속도 파트에서 다룬 각속도-회전행렬의 관계와 비슷한 것을 알 수 있다.</p>
<p>좌표계{c},{d}가 있을 때 트위스트 $\mathcal{V}_c$,$\mathcal{V}_d$또한 다음과 같이 서로 변환이 가능하다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/2d1a28ed-0571-4b6b-9258-df56dd39ca02/image.png" alt=""></p>
<p>여기서 [$Ad_{T}$]는 주어진 $T$에 대한 수반 표현이며 $T=(R,p)$에 대해 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/da24d931-bdd4-4d4f-8225-f32d319180b6/image.png" alt=""></p>
<p>이 수반표현은 다음과 같이 표현하기도 하며 
<img src="https://velog.velcdn.com/images/woobin_robot/post/dc4b3464-aeac-4231-b84c-c2407be06f1d/image.png" alt="">
다음과 같은 성질을 가진다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/58cec4de-0b25-4293-9992-4904477876f3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/a7b9945e-309a-4bfd-a00f-5e36227eb298/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/90dcf41f-07a4-41a0-92aa-d15f96eef6f0/image.png" alt=""></p>
<p>이와 같은 트위스트에 관한 식들은 행렬곱을 통해 직접 증명이 가능하며 그 과정은 본책에서 볼 수 있다.</p>
<h3 id="3322-the-screw-interpretation-of-a-twist">3.3.2.2 The Screw Interpretation of a Twist</h3>
<p><strong>트위스트의 스크류 해석</strong></p>
<p>각속도$w$는 회전축 $\hat{w}$와 각속력$\dot{\theta}$을 이용해 $w=\hat{w}\dot{\theta}$로 표현되 듯이 트위스트$\mathcal{V}$도 <strong>스크류 축$\mathcal{S}$</strong>와 이에 대한 각속력 $\dot{\theta}$를 이용하여 $\mathcal{V}=\mathcal{S}\dot{\theta}$으로 표현된다.
즉 스크류 축은 회전운동의 회전축과 대응대며 회전축에서 이동 정보까지 담은 것이며 스크류 운동은 어떠한 축을 중심으로 회전하면서 그 축을 따라 이동하는 운동을 말한다.</p>
<p>스크류 축의 이해를 돕기위해 스크류 축을 {$q,\hat{s},h$}으로 표현해 보겠다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/6ae85436-f2eb-4de9-998b-82827248d5ba/image.png" alt="">
위 그림처럼 $q\in\mathbb{R}^3$은 축 위의 임의의 점, $\hat{s}$는 축 방향을 나타내는 단위벡터,$h$는 스크류 피치(screw pitch)이다. 스크류 피치는 스크류 축을 따라 이동하는 석속력과 스크류 축에 대한 회전 속력 $\dot{\theta}$의 비율이다.(순수한 회전의 경우 $h$=0, 순수한 병진운동의 경우에는 $h$는 무한대로 발산한다.)</p>
<p>위 그림에서 스크류 축 $\mathcal{S}$와 각속력 $\dot{\theta}$에 대한 트위스트 $\mathcal{V}$는 다음과 같다. 
<img src="https://velog.velcdn.com/images/woobin_robot/post/cb90791d-01f7-452d-b074-7d031c1f5a06/image.png" alt=""></p>
<p>스크류 축의 {$q,\hat{s},h$}표현은 번거롭기 때문에 이러한 트위스트를 정규화 하여 다음과 같이 표현한다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/4329358f-ed50-4d11-938d-1c2c032a99ac/image.png" alt="">
스크류 축의 $v$도 트위스트 때와 비슷하게 해석된다.(차이점은 스크류 축의 경우는 크기를 제외한 방향만을 나타낸다.)
(트위스트, 스크류 축 모두 $(w,v)$를 사용하기 때문에 맥락을 보고 둘 중에 무엇인지 파악한다.)
여기서 $w$는 스크류 운동의 회전축을 의미한다 그럼으로 $\Vert w \Vert=1$ 혹은 $\Vert w \Vert=0$를 만족한다.</p>
<ul>
<li>$\Vert w \Vert=1$이라는 것은 스크류 운동에서 회전이 존재한다는 뜻이며 $v$는 회전운동과 병진운동에 의한 속도의 합인 $v=-w\times q+hw$이다.</li>
<li>$\Vert w \Vert=0$이라는 것은 스크류 운동에서 회전이 없다는 뜻이다. 즉 순수한 병진운동이다. 이 경우에 $v$는 병진운동의 방향만을 나타내고 $\Vert v \Vert=1$이다.</li>
</ul>
<p>스크류 축은 단순히 정규화된 트위스트이기 때문에 스크류 축 $\mathcal{S}=(w,v)$의 4 by 4행렬 표현 $[\mathcal{S}]$은 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/5317ec5e-408a-46de-bb9d-726bcb59b00b/image.png" alt=""></p>
<p>또한 스크류 축의 기준좌표계 변환도 다음과 같이 트위스트의 경우와 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/a0f7d706-d216-443d-b67d-d6583e879b2b/image.png" alt=""></p>
<h2 id="333-exponential-coordinate-representation-of-rigid-body-motions">3.3.3 Exponential Coordinate Representation of Rigid-Body Motions</h2>
<p><strong>강체 운동의 지수 좌표 표현</strong></p>
<p>샤를-모치 이론(chasles-mozzi theorem)에 따르면 모든 강체 이동은 공간상에 고정된 스크류 축 $\mathcal{S}$에 대한 이동으로 나타낼 수 있다.
그럼으로 회전의 지수좌표 $\hat{w}\theta$처럼 동차 변환$T$의 6차원 지수 좌표를 $\mathcal{S}\theta$로 정의할 수 있다. 
여기서 $\mathcal{S}$는 스크류 축이고 $\theta$는 이동의 변위량을 의미한다. 
즉 스크류 운동의 회전이 존재한다면 즉 $\Vert w \Vert=1$이면 $\theta$는 이 회전의 회전각을 의미하고 
스크류 운동이 회전이 없는 순수한 병진운동이라면 $\theta$는 스크류 축을 따라 이동한 선형 거리가 된다.
그리고 회전의 경우와 유사하게 다음처럼 행렬지수(exp)와 행렬(log)로그를 다음과 같이 정의할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/6092fce2-ac69-4625-b4d3-e78f74562b81/image.png" alt=""></p>
<h3 id="3331-exponential-coordinates-of-rigid-body-motions">3.3.3.1 Exponential Coordinates of Rigid-Body Motions</h3>
<p><strong>강체 운동의 지수 좌표</strong></p>
<p>스크류 축 $\mathcal{S}=(w,s)$와 변위량 $\theta$에서 </p>
<ul>
<li>$\Vert w \Vert=1$이면 행렬지수는 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/35b12a87-3650-4564-96d2-4d3e6163809d/image.png" alt=""></li>
<li>$\Vert w \Vert=0$,$\Vert v\Vert=1$이면 행렬지수는 다음과 같다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/80e47f01-e50b-43d0-afec-eb5c7e662333/image.png" alt=""></li>
</ul>
<h3 id="3332--matrix-logarithm-of-rigid-body-motions">3.3.3.2  Matrix Logarithm of Rigid-Body Motions</h3>
<p><strong>강체 운동의 행렬 로그</strong></p>
<p>주어진 $T=(R,q)\in SE(3)$의 행렬로그 $[S]\theta\in se(3)$는 다음의 알고리듬으로 구해진다. ($S=(w,v)$라고 하자)</p>
<ul>
<li>$R=I$인 경우: $w=0, v=p/\Vert p\Vert, \theta=\Vert p\Vert$이다. </li>
<li>$R\neq I$인 경우: ($SO(3)$알고리듬에서 $\hat{w}$라고 표기한) $w$와 $\theta$를 $SO(3)$에서 $R$의 행렬로그를 통해 구한다. 
그리고 $v$는 다음과 같이 구한다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/763aaa11-204f-4110-a4ec-1b2f64a43ba1/image.png" alt="">
<img src="https://velog.velcdn.com/images/woobin_robot/post/e6b30a35-a0f8-42fa-a8e4-a2b168d09502/image.png" alt="">
이 식들의 유도는 본 책에서 볼 수 있다.</li>
</ul>
<h1 id="34-wrenches">3.4 Wrenches</h1>
<p><strong>렌치</strong>
렌치(wrench)는 강체에 힘이 가해졌을 때 그때 발생한 모멘트와 그 힘을 같이 나타낸 것이다.
{a}좌표계에서 표현된 강체 위의 점 $r_a\in\mathbb{R}^3$에 힘$f_a\in\mathbb{R}^3$가 가해지고 있다고 하자 이때 힘은 토크 또는 모멘트를 발생시키는데 {a}에서 표현한 모멘트인 $m_a\in\mathbb{R}^3$를 다음과 같이 표현할 수 있다. 
<img src="https://velog.velcdn.com/images/woobin_robot/post/62a05c4f-d09b-48e5-b0fd-cf4e84d171b3/image.png" alt="">
트위스트 때와 비슷하게 모멘트와 힘을 묶어 다음과 같이 <strong>렌치(wrench)</strong>$\mathcal{F}_a$를 다음과 같이 쓸 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/2630d275-e16f-4487-a58c-897b7441259f/image.png" alt="">
6차원 벡터 <strong>공간 힘(spatial force)</strong>라고도 부른다.
힘 성분 없이 모멘트만 있는 렌치는 순수 모멘트(pure moment)라고 한다.</p>
<p>두 개 이상의 렌치가 강체의 적용하고 있을 때 모든 렌치가 같은 좌표계에서 표현되고 있다면 최종 렌치는 각각의 렌치의 벡터합이 된다.</p>
<p>이러한 렌치도 트위스트와 스크류 축 처럼 다음과 같이 기준좌표계의 변환이 가능하다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/74840a75-d160-4082-a057-34d9d3e1abc9/image.png" alt="">
이 기준좌표의 변환은 트위스트와 스크류 축의 변환과 같은 방식으로 증명 될 수 있다. 하지만 렌치의 경우에는 이 외에 $\mathcal{F}_a$와 $\mathcal{F}_b$사이에 관계를 직관적으로 유도할 수 있는 방법이 있는데 이 과정이 <strong>물리적으로 의미가 있기 때문에</strong> 이번에는 스킵을 하지 않고 증명을 해보겠다.</p>
<p>기준 좌표계가 변해도 일률의 값은 변하지 않는다. 일률은 속도와 힘의 내적으로 구할 수 있기 때문에 다음식이 만족한다는 것을 알 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/e8ce93d2-899e-464a-bc11-174951cbb1e2/image.png" alt="">
이 식에 $\mathcal{V}<em>a=[Ad</em>{T_{ab}}]\mathcal{V}_b$를 대입하면 다음과 같이 정리 할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/bf3d299c-ff66-4673-ab82-22f953aaa594/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/a2b34d5a-e501-4190-9790-c48efbb1b595/image.png" alt=""></p>
<p>일반적으로 고정된 좌표계{S}와 물체 좌표계{b}를 사용할때 공간 렌치(spatial wrench)$\mathcal{F}_s$와 물체 렌치(body wrench)$\mathcal{F}_b$로 표현한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Robotics 2. Configuration Space]]></title>
            <link>https://velog.io/@woobin_robot/Robotics-1.-Configuration-Space</link>
            <guid>https://velog.io/@woobin_robot/Robotics-1.-Configuration-Space</guid>
            <pubDate>Mon, 02 Oct 2023 05:27:01 GMT</pubDate>
            <description><![CDATA[<p>로봇의 움직임을 알아보기 전에 우리는 &#39;로봇이 어디에 있는가?&#39;라는 질문에 답을 해야한다. 이에 대한 답은 로봇의 configuration에서 시작된다.</p>
<h2 id="configuration">Configuration</h2>
<p>책에서는 Configuration을 다음과 같이 설명한다.</p>
<blockquote>
<p>robot&#39;s configuration: a specification of the positions of all points of the robot.</p>
</blockquote>
<p>해석하면 로봇의 Configuration은 로봇의 모든 점의 위치를 정확하게 명시하는 것이다. 
로봇의 움직임을 분석하기 위해 보통 로봇을 강체인 링크와 그 링크를 연결해주는 관절(joints)로 구성한다.
여기서 우리는 강체에 모양을 알고 그 모양이 변하지 않기 때문에 로봇의 configuration을 표현하기 위해 많은 숫자가 필요하지 않을 수도 있다. </p>
<p>예를 들어 다음과 벽에 고정되어 있고 $\theta$ 만큼 열려있는 문이 있다고 하자
<img src="https://velog.velcdn.com/images/woobin_robot/post/ce8ebb8b-8b84-4b2a-a634-6e4f9e37f227/image.png" alt=""></p>
<p>이 문의 configuration은 $\theta$라는 하나의 매개변수로 표현할 수 있다.</p>
<p>이번에는 평면에 앞면으로 놓인 동전을 살펴보자</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/c03aeb0c-e64b-44e7-9ab9-1e7c5a7dee6a/image.png" alt="">
 이 동전의 Configuration을 표현하기 위해서는 이 동전의 위치를 표현하는 $x, y$와 동전의 방향을 표현하는 $\theta$가 필요하다.</p>
<h2 id="degree-of-freedom-자유도">Degree of Freedom (자유도)</h2>
<p>줄여서 dof 한국어로는 <strong>&quot;자유도&quot;</strong> 라고 한다. 자유도는 로봇의 configuration을 표현하기 위해 필요한 최소한의 실수 매개변수(좌표)의 수이다. </p>
<p>위에 예시에서 문의 컨피규레이션을  $\theta$하나로 표현할 수 있기 때문에 문의 자유도는 1 이다. 
평면 위에 놓여진 동전은 $x, y, \theta$임으로 자유도가 3임을 알수있다.</p>
<h1 id="21-degree-of-freedom-of-a-rigid-body-강체의-자유도">2.1 Degree of Freedom of a rigid Body (강체의 자유도)</h1>
<p>시스템의 자유도를 결정하기 위해 다음과 같은 일반적인 규칙을 적용 할 수 있다.</p>
<blockquote>
<center>자유도 = (모든 점의 자유도의 합) - (독립적인 제약조건의 개수)</center>
</blockquote>
<div style="text-align: right"> (2.1) </div>

<p>이를 적용하기 위해 위에 동전 예시에서 이번에는 동전 위에 3개의 점을 정해보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/5d78289c-cda6-4c28-b40b-65d3b138f619/image.png" alt=""></p>
<p>이 평면이 $x-y$좌표계에 있다고 할때 이 3개의 점은 $(x_A,y_A), (x_B,y_B), (x_C,y_C)$로 표현 할 수 있다. 만약 이 3개의 점이 이 평면에서 어디에든 서로 독립적으로 움직일 수 있다면 이 한 점의 자유도는 2임으로 동전의 자유도가 6이 된다. 하지만 동전은 강체임으로 각각의 점 사이에 거리는 모두 일정하다. 그럼으로 다음과 같은 제약조건 식을 세울 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/3e96f206-729f-4907-b684-f418ef7e0ae5/image.png" alt=""></p>
<p>여기에 앞에서 설명한 규칙을 적용하면 </p>
<blockquote>
<p>동전의 자유도=6(모든 점의 자유도의 합) - 3(독립적인 제약조건의 개수) = 3</p>
</blockquote>
<p>이렇게 앞에서 설명한 동전의 자유도와 같은 것을 알 수 있다. 이와같은 방식을 적용하면 3차원에 놓여진 강체의 자유도는 6이라는 것을 알 수 있다.</p>
<p>로봇은 강체로 이루어 졌기 때문에 로봇에서는 위에 규칙을 다음과 같이 나타낼 수 있다.</p>
<blockquote>
<p>자유도 = (몸체의 자유도의 합) - (독립적인 제약조건의 개수)</p>
</blockquote>
<h1 id="22-degrees-of-freedom-of-a-robot-로봇의-자유도">2.2 Degrees of Freedom of a Robot (로봇의 자유도)</h1>
<p>로봇의 경우에는 joint가 강체의 자유도를 제한함으로서 로봇의 전체 자유도를 줄인다. 이 관점으로 링크(강체)와 관절의 수를 셈으로서 로봇의 자유도를 결정할 수 있다.</p>
<h2 id="221-robot-joints-로봇-관절">2.2.1 Robot Joints (로봇 관절)</h2>
<p>다음은 전형적인 로봇 관절이다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/1e2895f2-affc-47dc-bf53-6b20bceb31e5/image.png" alt="">
모든 관절은 정확히 두 개의 링크를 연결하며, 세 개 이상의 링크를 동시에 연결하는 것은 허용하지 않는다. </p>
<p>다음은 로봇 관절이 제공하는 자유도 $f$와 제약조건 $c$이다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/0ed79440-dd0b-4b9e-b48b-f9c0f67a2377/image.png" alt="">
예를 들어 원통형(Cylindrical)관절은 하나의 공간 강체에 다른 강체에 대한 5개의 제약조건을 가함으로서 두 강체 사이에 하나의 자유도를 부여한다. 여기서 2.1에서 설명한 자유도 규칙이 적용되는 것을 알 수 있다.(6-5=1)</p>
<h2 id="222-grüblers-formula-그뤼블러의-공식">2.2.2 Grübler&#39;s Formula (그뤼블러의 공식)</h2>
<p>링크와 관절로 이루어진 매커니즘의 자유도는 그뤼블러의 공식으로 구할 수 있다.</p>
<p>지면을 링크로 간주할 때 다음의 매커니즘을 봐보자</p>
<ul>
<li>링크의 개수: $N$</li>
<li>관절의 개수: $J$</li>
<li>강체의 자유도: $m$(공간:=6, 평면:=3)</li>
<li>관절 $i$가 제공하는 자유도: $f_i$</li>
<li>관절 $i$가 제공하는 제약조건의 수: $c_i$</li>
</ul>
<p>위에 상황을 2.1.에서 설명한 규칙에 적용하면 로봇의 자유도를 쉽게 구할 수 있는 공식이 나온다.</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/7fe6d64b-0524-4827-bd5a-580634240d94/image.png" alt=""></p>
<p>이 식은 관절 제약조건이 독립이 아니면 성립하지 않으며 이 공식을 그뤼블러의 공식이라고 한다.</p>
<p>아래 그림에 나오는 매커니즘에 그뤼블러 공식을 적용해 보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/9d3a072b-d44a-48c1-bc37-8821200d7569/image.png" alt=""></p>
<p>평맨 매카니즘임으로 $m=4$이다.</p>
<ul>
<li><p>(a)의 경우
$N=4, J=4, f_i = 1$임으로 자유도는 $-3(4-1-4)+4=1$이다.</p>
</li>
<li><p>(b)의 경우 
2개의 방법으로 분석 할 수 있다.
  1). 3개의 회전형 관절과 1개의 선형관절 그리고 4개의 링크
  2). 2개의 회전형 관절과 1개의 RP관절(회전형 관절과 선형 관절을 연결한 것 $f_i=2$)</p>
</li>
</ul>
<p>더 많은 예제는 본 책에서 볼 수 있다.</p>
<h3 id="open-chain-and-closed-chain-mechanisms">open-chain and closed-chain mechanisms</h3>
<p>보통 로봇을 개연쇄 메커니즘(open-chain mechanisms)과 폐연쇄 메커니즘(closed-chain mechanisms)으로 구별할 수 있다.
폐연쇄 메커니즘은 위에 (a)와 같이 닫힌 고리를 포함하는 메커니즘이고
개연쇄 메커니즘은 일반적인 로봇팔과 같이 닫힌고리가 없는 메커니즘이다.</p>
<h1 id="23-configuration-space-topology-and-representation">2.3 Configuration Space: Topology and Representation</h1>
<blockquote>
<p>Topology:위상</p>
</blockquote>
<h2 id="231-configurarion-space-topology">2.3.1 Configurarion Space Topology</h2>
<h4 id="configuration-spacec-space">Configuration Space(C-space)</h4>
<p>로봇의 모든 가능한 컨피규레이션을 포함하는 n차원 공간을 Configuration space(C-space)라고 한다.</p>
<p>configuration space의 형태에 대해 알아보자.</p>
<h3 id="topologically-equivalent-위상-동형">topologically equivalent (위상 동형)</h3>
<p>구의 표면에서 움직이는 점을 생각했을 때 점의 configulation을 위도와 경도로 표현할 수 있으며 이때의 C-Space(configuration space)는 2차원이다. 
이번에는 $x-y$ 평면위에 놓인 점을 생각해보자 이번에는 $(x,y)$로 표현하게 되며 C-Space는 2차원이다.</p>
<p>위에서 불 수 있듯이 2개의 C-Space 모두 2차원이다. 하지만 이들은 같은 모양을 갖지 않는다는 것에 주목해야한다. 평면은 무한히 확장되지만 구는 끝을 감싸는 모양이 된다. 
이런 경우는 <strong>위상 동형</strong>이 아니다.</p>
<p><strong>위상 동형</strong>이려면 하나의 공간을 자르거나 붙이지 않고 다른 공간으로 연속적으로 변형될 수 있어야한다.
구를 자르거나 붙이지 않고 단순하게 늘려 미식 축구공처럼 타원형으로 만들 수 있기 때문에 이 경우에는 두 공간을 위상 동형이라고 한다.</p>
<p>1차원 공간을 위상적으로 구분해 보면</p>
<ul>
<li>직선(line): $\mathbb {E}$ or $\mathbb {E}^1$, $\mathbb {R}$ or $\mathbb {R}^1$ 으로 표현
(종점을 포함하지 않는다. (open interval of the line): $(a,b) \subset \mathbb {R}^1$와 위상 동형)</li>
<li>원(circle): $S$ or $S^1$ ; $S^n$은 $(n-1)$차원에 있는 구의 $n$차원표면이다.</li>
<li>직선의 닫힌 구간(closed interval of the line): $[a,b] \subset \mathbb {R}^1$</li>
</ul>
<p>공간의 위상은 공간 그 자체의 근본적인 특성이며 공간에서 점을 표현하기 위해 선택하는 좌표와 독립적임을 알아야 한다.</p>
<p>일부 상태 공간은 아래와 같이 낮은 차원들의 집교 곱(Cartesian product)으로 나타낼 수 있다</p>
<p><img src="https://velog.velcdn.com/images/woobin_robot/post/609d4487-b81c-45f1-87b7-f1a924d11aae/image.png" alt=""></p>
<p>예를들어 평면상의 강체의 configulation은 위치를 나타내는 $(x,y):\mathbb{R}^2$와 방향을 나타내는 $\theta:\mathbb{S}^1$으로 표현됨으로
C-Space는 $\mathbb{R}^2\times\mathbb{S}^1$으로 나타낼 수 있다.   </p>
<h2 id="232-configuration-space-representation-상태-공간-표현">2.3.2 Configuration Space Representation (상태 공간 표현)</h2>
<h3 id="explicit-parametrization-직접적-매개변수화">explicit parametrization (직접적 매개변수화)</h3>
<p>직접적 매개변수화는 $n$차원 공간을 표현할때 $n$개의 매개변수를 사용하는 것이다. 
이 경우 매개변수의 특정한 범위에서만 유효하다.
예를들어 위도:$[-90\degree,90\degree]$ 경도:$[-180\degree,180\degree)$로 표현된 구를 생각해 보자 </p>
<p>이 경우 북극점, 남극점에서 조금만 움직여도 좌표상에서 큰 변화가 생긴다. 이때의 북극점과 남극점을 이 표현식의 특이점(singularities)라고 한다.
특이점은 좌표의 시간 변화율로 속도를 나타낼 때 특히 문제가 된다. (무한대로 발산 할 수 있다.) 만약 컨피규레이션 표현이 특이점에 절대 도달할 수 없다면 문제가 되지는 않지만 도달할 가능성이 있다면 이 문제를 해결해야 한다.</p>
<h3 id="implicit-representation-간접적-표현식">implicit representation (간접적 표현식)</h3>
<p>직접적 매개변수화의 문제를 해결할 수 있는 방법이다. 
간접적 표현식은 $n$차원 공간을 표현할때 $n$개 보다 더 많은 변수를 사용하고 이에 제약조건을 걸어 자유도를 제한한다. $n$차원보다 높은 차원의 공간에서 $n$차원을 표현한다고 생각할 수 있다.
예를들어 다음에 다룰 회전행렬(rotation matrixes)가 있다. 
회전행렬은 9개의 매개변수와 6개의 제약조건을 사용하여 공간상의 방향을 표현한다.
이 경우 롤-피치-요 각도와 달리 특이점이 없다.</p>
<p>이 외에도 직접적 매개변수화의 문제점을 해결하는 방법이 있다. 이에 대해서는 본책에서 찾아보자</p>
<h1 id="23-configuration-and-velocity-constraints-컨피규레이션과-속도-제약조건">2.3 Configuration and Velocity Constraints (컨피규레이션과 속도 제약조건)</h1>
<h3 id="holonomic-constraints-홀로노믹-제약조건">holonomic constraints (홀로노믹 제약조건)</h3>
<p>하나 이상의 닫힌 고리를 가진 로봇에서는 보통 직접적 보다 간접적 표현식을 더 쉽게 얻을 수 있다. 다음 예제를 살펴보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/d52034f9-5657-44b8-907e-bae236460ced/image.png" alt="">
위 예제는 아래와 같이 4개의 변수와 3개의 식으로(제약조건)으로 표현할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/2c3e1462-83f2-45ac-b199-ad1c81501aaf/image.png" alt="">
이러한 방정식을 종종 <strong>고리 닫힘 방정식(loop-closure equations)</strong>라고 한다.
이 해의 모든 집합은 3차원 공간에서 1차원 곡선을 이루며 상태 공간을 구성한다.
이 고리 닫힘 방정식에서 주어지는 $k$개의 독립방정식을 이용하여 고리 닫힘 방정식을 $g(\theta)=0$을 표현해보자 ($k&lt;=n$)
<img src="https://velog.velcdn.com/images/woobin_robot/post/f57cb2f9-7de9-4669-bb5a-e8cedb49347c/image.png" alt="">
이러한 제약조건을 <strong>홀로노믹 제약조건(holonomic constraints)</strong>이라고 하며 상태공간의 차원을 줄인다. 이 제약조건이 모두 독립일 때 상태공간은 $n$차원에서 표현된 $n-k$차원 표면으로 볼 수 있다. </p>
<h3 id="pafaffian-constraints-파피안-제약조건">Pafaffian constraints (파피안 제약조건)</h3>
<p>위에 로봇이 시간 궤적 $\theta(t)$를 따라 움직인다 가정하고 $g(\theta(t))=0$의 양변을 미분해보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/8f445f96-d240-4855-b0c3-63c5305384d4/image.png" alt="">
행렬에 열벡터를 곱하는 방식으로 표현하면
<img src="https://velog.velcdn.com/images/woobin_robot/post/53b841e6-8ac7-4b4f-9825-2b13628ab419/image.png" alt="">
이를 다음과 같이 쓸 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/9cd230b5-b7f3-4c74-a0b3-5748d2ae6ad3/image.png" alt="">
그리고 이를 다음과 같이 써보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/8ed9168c-6350-4399-908b-d6af2cb10aa8/image.png" alt="">
이러한 속도제약조건을 <strong>파피안 제약조건(Pafaffian constraints)</strong>이라고 한다.</p>
<p>파피안 제약조건에서 $A(\theta)=\frac{\partial g}{\partial \theta} (\theta)$를 만족하는 미분가능한 함수 $g(\theta)$가 존재하는 홀로노믹 제약조건을 <strong>적분 가능한 제약조건</strong>이라고 부른다.</p>
<h3 id="nonholonomic-constraints-비홀로노믹-제약조건">nonholonomic constraints (비홀로노믹 제약조건)</h3>
<p>이번에는 다음과 같이 미끄러짐 없이 평면 위를 구르는 동전을 생각해보자
<img src="https://velog.velcdn.com/images/woobin_robot/post/86a9ffe6-fd3c-475d-8eaa-e3732df74836/image.png" alt="">
이 동전의 configuration은 $(x,y,\theta,\phi)$로 표현된다.
이 동전의 속력은 $r\dot{\theta}$임으로 속력은 $(r\dot{\theta} cos\phi,r\dot{\theta}sin\phi )$이다. 이 것을 다음과 같은 식으로 정리할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/26fcc367-f04d-4212-aced-d5c95efc36a4/image.png" alt="">
상태공간 좌표를 하나에 벡터 $q=(q_1,q_2,q_3,q_4)^T=(x,y,\phi,\theta)^T$로 표현한다면 다음과 같이 정리할 수 있다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/8b6d9953-8a94-49d3-a200-621d81577609/image.png" alt="">
이것은 $A(q)\dot{q}=0$의 형태를 갖는 파피안 제약조건이다. 
여기서 $A(q)=\frac{\partial g}{\partial q} q)$를 만족하는 미분가능한 함수 $g(q)$가 존재할려면 함수 $g$는 다음을 만족해야 한다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/d3a8756d-6bff-4dbb-a3a8-1c8899668eb3/image.png" alt="">
여기서 이런 함수$g$는 존재하지 않는다는 것을 알 수 있다.
즉 이 제약조건은 적분이 불가능하다. 
이렇게 적분이 불가능한 파피안 제약조건을 <strong>비홀로노믹 제약조건(nonholonomic constraints)</strong>이라고 한다.</p>
<p>이 제약조건의 시스템의 속도에는 제한을 주지만 상태 공간의 도달 가능한 차원을 줄이지는 못한다. 이런 비홀로노믹 제약조건은 운동량 보존과 미끄러짐없는 구름에서 볼 수 있다.
이 제약조건은 13장에서 더 자세히 다룬다.</p>
<h1 id="25-task-space-and-workspace">2.5 Task Space and Workspace</h1>
<h3 id="task-space">Task Space</h3>
<blockquote>
<p>The task space is a space in which the robot’s task can be naturally expressed. </p>
</blockquote>
<p>Task Space는 로봇의 작업이 자연스럽게 표현되는 공간이다. 말 그대로 task가 진행되는 공간이라고 할 수 있을거 같다. 여기서 중요한 것은 Task Space는 로봇과 별개라는 것이다. 
예를 들어 로봇의 작업이 평면에 그림을 그리는 것이라면 엔드 이펙터가 어디까지 다을 수 있는 지와는 상관 없이 Task Space는 평면의 실수 2차원 전체가 된다. </p>
<p>여기서 엔드 이펙터란 환경과 상호 작용하도록 설계된 로봇 팔 끝에 있는 장치이며 로봇공학에서 중요한 용어이다.</p>
<h3 id="workspace">Workspace</h3>
<blockquote>
<p>The workspace is a specification of the configurations that the end-effector
of the robot can reach.</p>
</blockquote>
<p>Workspace는 로봇의 엔드 이펙터가 닿을 수 있는 configuration이다.
이는 task space와는 반대로 로봇의 형태에 의존적이며 로봇의 Task와는 별개다. </p>
<h1 id="오늘의-영단어">오늘의 영단어</h1>
<ul>
<li>specify: (구체적으로)명시하다.</li>
<li>specification: (자세한)설명서, 사양</li>
<li>real-valued: 실수의</li>
<li>equality: 등식; 평균, 균등</li>
<li>coordinate frame: 좌표계</li>
<li>apparent: 분명한</li>
<li>noncollinear: 동일선상이 아닌</li>
<li>sptial: 공간</li>
<li>via: ~를 통하여</li>
<li>vary: 다르다</li>
<li>proposition: 명제; 제의</li>
<li>distinct: 분명한, 뚜렷한</li>
<li>concept: 개념</li>
<li>relate to: ~와 관계가 있다.</li>
<li>feasible: 실현 가능한</li>
<li>default representation: 기본 표현식</li>
<li>primarily: 주로</li>
<li>numerical: 수치적인</li>
<li>latitude: 위도</li>
<li>longitude: 경도</li>
<li>subset: 부분집합</li>
<li>deform: 변형시키다</li>
<li>integrable: 적분시키다</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Robotics 1. Preview]]></title>
            <link>https://velog.io/@woobin_robot/Robotics</link>
            <guid>https://velog.io/@woobin_robot/Robotics</guid>
            <pubDate>Mon, 02 Oct 2023 04:11:56 GMT</pubDate>
            <description><![CDATA[<p>군대에서는 로봇을 직접 만들 수 없음으로 로봇 제작을 위해 필요한 이론을 공부해 볼려고한다.
그렇게 집어든 책이 <strong>&quot;Modern Robotics: Mechanics, Planning, and Control&quot;</strong>이다.
<img src="https://velog.velcdn.com/images/woobin_robot/post/31ed67f5-a991-4cf0-af83-9b64e391f66c/image.png" alt=""></p>
<p><a href="http://hades.mech.northwestern.edu/index.php/Modern_Robotics">책 링크</a></p>
<p>이 책은 로봇 메커니즘의 역학, 계획, 제어에 초점을 두고 있는 책이다. 이 책을 3분의 1정도 읽은 내가 느끼기로는 로봇을 어떻게 정확히 움직일 수 있는 지에 대해 다루고 있으며 특히 로봇팔에 대해 설명하고 있다.</p>
<p>로봇의 움직임에 대한 나의 시야를 넓이기 위해 이 Robotics를 공부하며 이 블로그에 내용을 정리해 갈 생각이다. </p>
]]></description>
        </item>
    </channel>
</rss>