본문 바로가기

Projects/실내 자율 주행 로봇

프로젝트 일지 1. 실내 자율 주행에 대한 이해.

하지만 이 게시글은 단순 일지 이며, 일지에 작성된 내용이 정확하지 않을 수도 있습니다.

 

실내 자율 주행 로봇을 개발할 때는 전반적인 시스템 구성 및 동작 원리를 이해하는 것이 중요합니다. 따라서 아래와 같은 순서로 개발을 시작하는 것이 좋을 것입니다.

  1. 시스템 구성: 우선적으로 실내 자율 주행 로봇의 구성 요소와 구성 방법을 결정해야 합니다. 로봇의 크기, 모양, 기능 등을 정하고, 사용할 센서와 모터, 컴퓨팅 시스템 등의 하드웨어를 선택합니다.
  2. 소프트웨어 개발: 실내 자율 주행 로봇을 개발하기 위해서는 ROS와 같은 소프트웨어 플랫폼에 대한 이해가 필요합니다. ROS는 로봇의 하드웨어와 소프트웨어 간의 통신을 가능하게 하며, 로봇의 각종 센서와 모터를 제어하는데 필요한 다양한 라이브러리를 제공합니다.
  3. 하드웨어 구성: 센서와 모터, 컴퓨팅 시스템 등의 하드웨어를 구성합니다. 구성한 하드웨어를 ROS와 연결하여 테스트해보고, 문제점이나 개선할 점을 파악합니다.
  4. 로봇 제어: 개발한 하드웨어와 소프트웨어를 연결하고, 제어 프로그램을 개발합니다. 제어 프로그램은 로봇의 센서 데이터를 처리하고, 모터를 제어하여 로봇이 움직이도록 합니다.
  5. 로봇 주행 테스트: 로봇 주행을 위한 환경을 구성하고, 로봇 주행 테스트를 수행합니다. 로봇이 지정한 목표 지점까지 정확하게 이동하는지 확인하고, 필요한 경우에는 로봇의 위치 보정 알고리즘을 개선합니다.
  6. 성능 개선: 로봇의 성능을 개선하기 위해 다양한 실험과 테스트를 수행합니다. 센서의 정확도 개선, 제어 알고리즘 최적화 등의 방법을 사용하여 로봇의 성능을 향상시킬 수 있습니다.

 

1. 주행 모델 정하기

 

- 바퀴로 굴러가는 로봇 제어의 방식에는 크게 3가지가 있다.

1) 자전거 모델(bicycle model)
- 일반적인 자동차 처럼 핸들을 조향하는 방식
- 바퀴의 각도를 조절하여 로봇의 회전 운동을 제어하는 모델
- 제자리 회전이 불가능하여 좁은 지형에서의 주행이 어려움.
2) 차동 구동 방식(differential drive model)
- 양쪽 바퀴의 속도를 다르게 하여 로봇의 회전 운동을 제어하는 방식
- 회전시 미끄러짐이 크기 때문에 아스팔트 도로와 같이 마찰이 높은 환경에서는 회전이 불가능할 수 있다.
3) 전방향 구동 방식(omni directional model)
- 메카넘 휠(Mecanum wheel)이라고 불리는 전방향 바퀴를 사용하는데, 이 바퀴는 구조적인 형태 때문에 순간적으로 모든 방향으로의 움직임이 가능한 홀로노믹(holonomic) 특성을 갖는다.
- 2차원 평면 공간에서 유연한 3자유도 운동(전후/좌우/회전)이 가능하여 직관적인 조작을 할 수 있으므로 제어 시스템을 단순하게 구현할 수 있다.
- 반면 바퀴의 기구적 설계가 다소 복잡하다는 단점이 있다.

- 이번 프로젝트에서는 전방향 구동 방식을 채택할 예정이다.

 

2. 모터 선정하기

 

- 먼저, 로봇의 주행 환경을 고려해야 한다. 

- 모터의 힘은 로봇이 주행하는 오르막길의 경사도와 로봇의 무게와 비례해야 한다.

1. 제작할 로봇의 무게가 어느정도 일지
2. 주행할 오르막길의 경사도는 어느정도 일지

- 위 두가지를  고려한 다음 충분한 출력을 가진 모터를 선정해야 한다.

출처 : https://cafe.naver.com/openrt/25450

- 위와 같은 노면에서 주행할 때, 아래 그래프와 같은 속도록 주행한다고 가정해 보겠다.

$a$ : 가속도
$g$ : 중력에 의한 힘
$f_w$ : 가속도에 의한 힘

 

 

- DC 모터의 카타로그를 보면 엄청나게 많은 수치들이 나와 있는데, 도대체 어떤 값을 참조해서 모터를 선정해야 하는지 헷갈린다.

- 우선 첫번째로 고려해야 할 사항은 전원이다.

- 그 다음으로 고려할 사항은 사용자가 원하는 속도와 힘이 충분히 나올 것인가 이다. 이 때 사용하는 항목이 바로 토크이다.

 


토크란


모터의 회전력으로 쉽게 설명하면, 모터로 어떤 물체를 움직이고자 했을때 모터가 내어 주어야 하는 힘을 말한다.
필요한 토크보다 모터가 낼 수 있는 토크가 작다면 물체를 움직일 수 없을 것이다.
그런데 이상하게도 같은 물체를 움직일지라도 가속 구간과 등속 구간에서의 필요한 토크가 다르다.
(가속 구간에서 더 많은 토크를 필요로 할 것.)

로봇의 중량 : W [kg]
바퀴의 지름 : D [cm]
모터의 등속 회전 속도 : f [turn/s]
가속 구간 : t [s]

위 네 가지 인자들이 우리가 쉽게 직접 알아낼 수 있는 값이며, 이를 이용해 다음과 같은 세 개의 인자를 계산한다.

부하 관성 모멘트 : J[$kg*cm^2$] = $W * \frac{D^2}{8}$
가속 토크 : $ Tm+Ta$ , g 는 중력 가속도 $

$Ta = \frac{J}{g} * \frac{2 \pi f}{t} [kg cm] 980$cm/s^2$

등속 토크 : $ Tm = \frac{u*W*D}{4}[kg cm]$ 단, u는 마찰 계수

 

- 마찰 계수의 경우 이를 측정하기 많이 어렵기 때문에 일반적으로 사용하는 계수가 0.1이다.

- 그렇기에 계산할 때에는 0.1을 대입해서 계산한다.

 

* 가속시에 필요한 토크는 가속 토크와 등속 토크를 더한 값이며, 등속 구간에서 필요한 토크는 등속 토크 만이다.

 

* 모터 카타로그를 보면 대부분 단위가 mNm으로 나와 있다. 위에서 계산한 [kg cm]를 [mNm]로 바꾸는 식은 다음과 같다.

$$1kgcm ==> 9.8Ncm = 98mNm$$

 

 

솔직히 서버랑 인공지능만 다루다가 하드웨어를 갑자기 다루려고 하니 무슨 말인지 하나도 모르겠다.