본문 바로가기

분류 전체보기

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이라..
C 언어 도서 관리 프로젝트 C언어의 기초 개념들이 들어 있는 프로젝트, 도서 관리 프로젝트이다. 최종적으로 이러한 것을 만들 것이다. 콜솔이라 다소 조잡해 보이지만, 중요한 것은 내용이다!! API는 다 까먹었다!!! (충!성!) 내가 직접 도서관을 만든다고 생각하면서 차근차근 해야 할 것들을 생각해 보자. 우선 도서관에 있는 책들을 전산에 쓸 수 있도록 문서화해야 한다. 이것이 1번, 책을 새로 추가하기이다. 책들의 정보를 하나하나 추가해 주면서 총 몇권이 있는지도 확인해 주어야 할 것이다. 다음, 도서관에는 책들이 많다. 그래서 검색을 할 수가 있어야 한다. 검색을 하는 옵션으로는 1. 책 이름으로 검색2. 저자로 검색3. 출팔사로 검색 등을 생각해 볼 수 있을 것이다. 검색을 했다면, 책을 빌리고 반납할 수 있는 기능이 있어..
Search - 공부했다. Search부분은 Path Planning과 관련이 깊은 단원이었다. 지도가 주어졌을 때, 어떻게 해야 목적지까지 갈 수 있는지, 길을 계산하는 것이다. 그리고 더불어 최적의 루트를 찾기 위해서는 어떻게 해야 하는지 등등을 배운다. 알고리즘적일 측면이 강한 단원이었다. 그래서 오래 걸리기도 했다. 대부분이 프로그래밍 실습으로 이루어져 있어서 미리 리 마음의 준비를 하기 바란다. 우리가 로봇을 실질적으로 움직이게 하기 위해서는 위와 같이 Motion Planning을 해주어야 한다. (물론 움직이는 로봇이라는 가정 하에) 이는 인간이 보기에는 위와 같이 최단 경로를 찾는 것이 쉽고 당연하게 느껴지겠지만, 로봇을 위해서 알고리즘을 짜는 것은 또다른 문제이다. 위는 운전을 하는 상황을 나타내고 있다. 수많은 ..
C 언어 - 두고두고 쓰기 위한 문자열 search 함수 예를 들어서 the biggest theater in our city is there~ 이런 문장이 있다고 하자. 이 문장에서 there이라는 단어의 위치를 알고 싶을 때 사용하는 함수이다. the biggest theater in our city is there~there there there(!!!) the 부분까지는 탐색을 계속하다가, r부분에서 불일치를 발견하고, 다시 다음 단어로 건너갔다. 이러한 기능을 하는 함수이다. 아마도 라이브러리에 더 완벽한 것이 있을 테지만... 1234567891011121314151617181920212223242526char search_str(char * dic, char * word) { int loc = 0; int search_loc = 0; while (..
파이썬 2차원 배열 생성 요즘들어 파이썬을 많이 사용하는데, 기초적인 튜토리얼 업싱 하려다 보니 아무래도 자주 막히는 면이 있다. 특히나 파이썬은 제공하는 기능이 너무나 많다. ㅠㅠ 이러쿵 저러쿵 해서 해결하면 사실 이미 제공하는 함수가 있는 경우가 다반사이다. 자주 잊어버리는 2차원 배열 생성을 정리한다. 우선, 나는 이렇게 실수하는 경우가 잦은데, 123456789101112arr = []list = []count = 0for i in range(3): for j in range(2): count += 1 list.append(count) arr.append(list) list.clear() for i in range(len(arr)): print(arr[i])cs 이렇게 하면 결과는 아무것도 안나온다... list의 생성을..
Particle Filter 공부했다 (2) 지금 까지는 좌표 위의 임의의 점을 로봇이라 칭하면서 이동시키는 상상의(?) 로봇 프로그래밍을 하였었다. 위 사진을 보면 알 수 있겠지만, 이번에는 보다 로봇스러운 시스템을 구축해보려고 한다. 이 로봇 모델은 자전거와 비슷한 구조를 가지고 있다. 앞바퀴만 각도를 바꿀 수 있고, 뒷바퀴는 그저 따라오는 형식이다. 뒷바퀴 사이의 중점 좌표(X, Y) 앞바퀴에서 뒷바퀴 사이의 거리(L) 로봇 전체가 보고 있는 각도(Θ)Θ를 기준으로 기울어진 앞바퀴의 각도() 이렇게 시스템을 구축한다. 다음으로 좀 복잡한 수식이 나오므로 미리 마음의 준비를 하시고, 짜잔... 앞바퀴가 기울어진 상태로 앞으로만 움직인다면, 로봇은 원의 궤도를 그리게 될 것이다. 그래서 그 원의 중심을 구할 수 있고, 움직인 뒤의 로봇의 위치를 ..
Particle Filter 공부했다. 계속해서 배우고 있는 필터 시리즈(?)의 대망의 마지막 Particle Filter이다. 위는 지금까지 배운 각 필터들에 대해서 정리를 함과 동시에 지금부터 배울 Particle Filter에 대한 간략한 설명을 하고 있다. 각각의 필터가 이산적인지(Discrete - 모눈종이처럼 나뉘어져 있는지), 연속적인지(Continuous - 일반적인 좌표 처럼인지) 체크가 되어 있고, 가장 확률이 높은 지점 하나만 알려주는지, 아니면 여러 후보군들을 알려주는지도 체크가 되어 있다. 제일 오른쪽에서 보이듯이, 이 필터들은 모두 Motion과 Measurement의 불확실성을 보완해주기 위해서 생긴 것이다. 애초에 완벽하게 움직이고 완벽한 센서가 있었으면 사실 그게 제일 좋은 것이다. 이렇게 불확실성에 기반하기 때..