본문 바로가기

공부

RTOS 시스템 mbed os - thread 정리 우선 개념부터 잡고 가려고 한다. 나도 착각하고 있던 부분인데, RTOS가 (Real-time)이 들어간다고 해서 막 실시간으로 뿅뿅 되고 하는 그런 개념이 아니다. RTOS는 내가 원하는 시간 내에서 실행을 시키게 하는 것이 목적이다. 당장 뭔가를 자르는 공장이라면, 사람 손가락이 들어갔을 때, 손가락이 톱에 닿기 전에 멈추게 하는 것이 목적일 것이다. 그런데, 내가 여유롭게 안마 의자에 앉아있는 상황에서, 반드시 안마의자를 작동시킴과 동시에 안마를 시작해야 하는 것은 아니다. 조금 늦게 작동하더라도 사용자에게 아주 큰 불이익이 있는 것은 아니다.(오히려, 스무스하게 작동되게 한다면 더 큰 편안함을 느낄 것이다.) 그런데 이 두 상황 모두 임베디드 시스템이고, RTOS를 쓸 것이다. 잠시 정리를 하자면..
mbed os cli 개발 환경 구축 (python3) mbed 워크샵을 다녀 왔다. 이런 시뮬레이션도 제공을 해 주고, 회원 가입을 한다면 아래와 같은 웹 컴파일러도 제공을 해 준다. 그런데, 실제로 이를 사용해 보니, 네트워크 상태에 따라서 시간도 많이 걸렸고, 당연하지만 인터넷이 연결되지 않는 환경에서는 사용할 수 없다는 단점이 있었다. 그래서 개인 노트북에 개발환경을 구축해 보았다. 개발자 페이지에 있는 설치 프로그램을 실행시키면 사실 문제가 없을 것이다.(사실 나는 이렇게 하지 않아서 장담할 수는 없지만...) 그렇지만, 조금 귀찮더라도 직접 하나하나 설치를 하면서 컴파일까지 가는 과정을 수행해 보았다. 이에 그 기록을 남긴다. 나의 개발 환경 : windows10 && python3.6.6 설치해야 할 것 : python && pip (앞서 보이듯..
SLAM 공부했다. 오우~ 대망의 SLAM이다. 그리고 이 강좌 (cs373)의 마지막 챕터이기도 하다. SLAM(Simultaneous Localization And Mapping)은 지금까지 배웠던 모든 개념들이 한 번에 들어가 있는 것이라 해도 무관하다. 로봇을 어떤 장소에 던져 놓았다고 할 때, 이 로봇은 자기가 지금 어디 있는지 확인할 수 있는 방법이 없다.(GPS가 있다면 모르지만 이조차도 오차가 있기에 정확하게 알기는 힘들다.) 계속 움직이며 기준이 되는 어떤 장소의 관찰을 한다면, 자신이 어디에 있는지 대충 알 수 있을 것이다. 이 과정이 Filter에 해당한다. 그럼, 로봇을 어디에 던져주면서, 어떤 임무를 수행하게 하기 위해서는 경로를 지정해 주어야 할 것이고 각 어떠한 움직임을 취하라는 명령도 해 주어야..
백준 - 1009번 123456789101112131415161718192021222324252627282930#include #include int calc_number(int a, int b) { a %= 10; if (a == 0) return 10; else if (b == 1) return a; else if (a == 1 || a == 6 || a == 5) return a; else if (a == 4 || a == 9) { if ((b % 2) == 0) return ((a * a) % 10); else return a; } else { if ((b % 4) == 0) return (int)pow(a, 4) % 10; else return (int)pow(a, b % 4) % 10; }} int main() ..
파이썬 - 리스트 중간 수정 파이썬으로 이러한 리스트를 만들고 싶다고 하자. [0, 1, 4, 5, 6, 7, 8, ......] 중간에 2와 3이 없는 것이 보인다. 이렇게 중간이 빈 리스트를 손쉽게 만드는 방법이다. 1list = [0, 1] + range(4, dim + 2)cs
Control 공부했다. - PID Control 지난 시간 계속해서 Path Planning에 대해서 배웠었는데, 실제로 그렇게 설정된 경로를 로봇이 완벽하게 갈 수는 없다. 아래 그림을 보아도, 파란 경로를 우리가 설정해 주었다고 해서 그대로 갈 수 있는 것이 아니라 실제로는 빨간 경로와 같은 움직임을 보일것이다. (로봇이 갑자기 바퀴의 각도를 90도를 틀 수는 없다.) 그럼 어떻게 이러한 smooth한 Path를 우리가 미리 만들어 줄 수 있을까? 위 사진과 같이, 우리가 만들어줄 smooth path의 요소들을 y_i라고 하였을 때, 원래 경로와의 오차를 최소화함과 동시에, smooth path의 요소들끼리의 오차도 최소화 하는 방식으로 이를 해결할 수 있다고 한다. 그럼 이 두 식을 이용해서 실제로 smoothing을 하는 실습을 해 보자. 그..
Search 공부했다. (2) 이번에는 A*(A-star)알고리즘이라는 것을 배워볼 것이다. 너무나도 중요한 알고리즘이다. 고맙게도 이해하기 쉽기도 하다. 쓰기는 힘들다 ㅠ 그 이유도 이제부터 알아본다. 왼쪽과 같은 지도가 있었다면, 기존의 Expand를 하는 방식으로는 오른쪽의 탁 트인 공간을 모두 살피느라 시간이 오래 걸렸을 것이다. 우리들은 지도를 본다면, 아래에 붙어서 곧장 가기만 하면 목표지점에 바로 도달할 수 있는 것을 알고 있는데, 이렇게 작동하는 알고리즘을 설계할 수는 없을까? 하는 발상에서 시작된 알고리즘이 바로 이 A*알고리즘이다. 이를 위해서는 기존의 지도와 더불어 크기가 같은 또 하나의 지도가 필요하다. 위에서는 이를 목표지점까지 도달하기 위한 Cost로 보이고 있으며, 위에 HEURISTIC FUNCTION이라..
Search - 공부했다. Search부분은 Path Planning과 관련이 깊은 단원이었다. 지도가 주어졌을 때, 어떻게 해야 목적지까지 갈 수 있는지, 길을 계산하는 것이다. 그리고 더불어 최적의 루트를 찾기 위해서는 어떻게 해야 하는지 등등을 배운다. 알고리즘적일 측면이 강한 단원이었다. 그래서 오래 걸리기도 했다. 대부분이 프로그래밍 실습으로 이루어져 있어서 미리 리 마음의 준비를 하기 바란다. 우리가 로봇을 실질적으로 움직이게 하기 위해서는 위와 같이 Motion Planning을 해주어야 한다. (물론 움직이는 로봇이라는 가정 하에) 이는 인간이 보기에는 위와 같이 최단 경로를 찾는 것이 쉽고 당연하게 느껴지겠지만, 로봇을 위해서 알고리즘을 짜는 것은 또다른 문제이다. 위는 운전을 하는 상황을 나타내고 있다. 수많은 ..