본문 바로가기

전체 글

Gridmap building - Fiber optic Gyro센서의 위력 실외환경에서 골프카트 자율주행 실험을 하려면 먼저 주변환경에 대한 맵 빌딩이 필요합니다. 처음 2D 맵빌딩을 할 때 골프카트 전방에 2D 레이저 스캐너를 설치하고 이 데이터를 이어붙여 주변 환경에 대한 2D 맵빌딩을 시도하였습니다. 이전과 같이 ICP 알고리즘으로 데이터를 이어붙여 나가면 맵빌딩이 수월하게 될 것이라고 생각했었는데, 실외환경이란게 실내처럼 바닥, 벽, 천정같은 수평 혹은 수직인 구조물들이 아닌 자연 그대로의 언덕과 경사면, 나무 등에 의해 차량의 롤과 피치가 조금만 바뀌어도 맵의 모양이 많이 일그러지는 문제가 있었습니다. 결국 ICP 알고리즘으로 맵을 이어붙이는 것을 포기하고 Dead-reckoning 만으로 맵빌딩을 수행했지만, 차량 헤딩의 부정확성을 보상할 방법이 없었습니다. 그래서 .. 더보기
무인운전차량의 자율주행 실외에서 탑승가능한 자율주행 플랫폼으로 골프카트를 선택하게 된 것은, 일단 전기 모터로 구동되며 일부 모델은 이미 유도선을 따라 무인주행이 가능한지라 조향축에도 이미 모터가 장착되어 있어 개조가 쉽다는 판단이었습니다. 그래서 개조에 적당한 골프카트 모델을 찾아 구매한 후 조향부에 절대엔코더를 장착하여 앞바퀴 조향각을 측정할 수 있도록 하고 뒤쪽 모터에도 정밀한 인크리멘탈 엔코더를 장착하여 뒷바퀴가 굴러간 양을 측정할 수 있도록 하였으며, 이 두 모터를 제어할 수 있는 제어기를 달아 기본적인 움직임을 제어할 수 있을 정도로 개조하였습니다. 또한 자율주행을 하려면 로봇의 위치를 알아야 하기에 위치인식 방법으로는 도로에 자석을 매립하고 차량에 장착된 지자기 센서나 홀센서가 자석을 감지함으로 차량의 위치를 계산.. 더보기
Velodyne HDL-32E를 사용한 숲속 데이터 획득과 분할(Segmentation) - Flood fill 이전 글에서 Bezier Surface를 사용하여 지면을 분리해 냈습니다. 지면이 없어지니 나무나 사람, 풀, 구조물들이 잘 구분되었습니다. 이제 각각의 객체들을 서로 분리해 내야하는데, 2D 이미지 처리에서도 많이 사용하고 있는 flood fill 알고리즘을 사용하였습니다. Flood fill 알고리즘은 위키피디아에서 잘 설명하고 있습니다: http://en.wikipedia.org/wiki/Flood_fill. 여기서는 위키피디아에 소개된 여러 방법들 중 첫번째로 소개된 스택 기반 재귀적 실행 구조를 가지는 방법을 사용하였습니다. 다른 방법들보다 구현도 아주 쉽게 할 수 있었으나, 스택이 많이 필요하고 느리다는 단점이 있습니다. 이제 구분된 객체들에 바운딩 박스를 표시하고 크기가 너무 적거나 일그러진.. 더보기
Velodyne HDL-32E를 사용한 숲속 데이터 획득과 지면 분리 (Bezier Surface) 이전 글에서 지면을 분리해 내기위해 RANSAC과 plane fitting을 사용하였습니다. 숲속은 지면이 평평하지 않기때문에 평면으로 지면 데이터를 잘라내게 되면 제거되지 않는 부분도 생기며 어떤 부분은 너무 많이 잘려나가는 부분도 생깁니다. 숲속 지형은 굴곡이 있기때문에 지면을 곡면으로 고려한다면 좀 더 좋은 효과를 볼 수 있을것 같습니다. 그래서 곡면을 나타내는 방법 중 Bezier Surface(위키피디아 참조: http://en.wikipedia.org/wiki/B%C3%A9zier_surface)를 사용하기로 했습니다. 지면에 가장 잘 피팅 되는 Bezier Surface의 5x5개의 컨트롤 포인트를 찾고, 이 Bezier Surface로부터 거리가 7.5cm 내의 점들을 제거한 것이 다음 영.. 더보기
Velodyne HDL-32E를 사용한 숲속 데이터 획득과 지면 분리 (RANSAC, plane fitting) PCL이야기 블로그를 쓰는 조국 연구원과 같이 PCD(Point Cloud Data)를 처리할 일이 생겨 그 내용을 간단히 정리해 봅니다. 우리의 최종 목표는 Velodyne 센서로 숲속에서 취득한 PCD에서 사람과 나무 그리고 나머지 알 수 없는 것들을 분리하는 것입니다. 사람은 추적하는 용도로 사용할 것이고, 나무는 지도를 작성하는 feature로 최종적으로 사용될 예정입니다. 우선, 다음과 같은 환경에서 Velodyne HDL-32E 센서를 장착한 차량을 운행하여 데이터를 취득하였습니다. 우리가 선택한 환경은 바닥이 도심과 같이 평탄하지 않고 굴곡이 있으며 주로 나무가 많이 심어져 있는 환경입니다. 차량의 전면에 장착된 Velodyne HDL-32E 센서 입니다. 센서가 차량의 전방에 낮게 설치되어.. 더보기
CARLA: 자이로 센서의 scale factor와 bias 탐색 이전 글()에서 자이로 센서의 드리프트를 최소화 하기위한 HDR 알고리즘을 소개하였습니다. 다음 문서에서는 자이로 센서의 최적의 파라미터를 CARLA(continuous action reinforcement learning automata) 알고리즘으로 찾는 방법에 대해 소개합니다. 이 방법은 on-line으로는 수행이 불가능 하고 off-line으로 이미 자이로 센서로부터 측정된 데이터 셋이 존재해야합니다. 아직 이 알고리즘을 구현하여 실험해보지 않았기에 소스코드는 없습니다. ^^ * 다음 논문을 참조하였습니다: - M. N. Howell의 “’Continuous action reinforcement learning automata and their application to adaptive digit.. 더보기
HSR: 가속도 센서의 스케일 펙터 조절 알고리즘 가속도 센서(accelerometer)는 가속도를 출력합니다. 보통 이 가속도에는 중력이 포함되어 있기 때문에 중력을 제거한 후 적분하여 속도와 위치를 계산하는데, 이때 미소한 scale factor의 변화로 인해 중력 성분이 제대로 제거되지 않고 적분으로 누적되면 결국 큰 오차가 발생합니다. 다음 첨부 문서에서는 이러한 scale factor를 조절하기 위한 HSR 알고리즘의 사용에 대하여 소개합니다. 이 알고리즘은 이전에 소개한 HDR 알고리즘()을 응용해서 제가 간단히 만들어 본 것입니다. 실제로 다른 좋은 가속도 센서의 scale factor를 측정하는 좋은 알고리즘들이 많이 있을 것으로 생각합니다. HSR 알고리즘을 C++코드로 다음과 같이 간단하게 구현할 수 있습니다. void Filter::.. 더보기
HDR: 자이로 센서의 드리프트 최소화 알고리즘 자이로 센서는 각속도를 출력합니다. 보통 이 각속도를 적분하여 회전각을 계산하는데, 이때 미소한 bias drift도 적분으로 누적되면 결국 큰 오차가 발생합니다. 다음 첨부 문서에서는 이러한 bias drift를 최소화 하기위한 HDR(Heuristic drift reduction) 알고리즘의 사용에 대하여 다루고 있습니다. HDR 알고리즘을 C++코드로 다음과 같이 간단하게 구현할 수 있습니다. void Filter::HDR (double v[3], double threshold, double ic) { v[0] += _HDR_I[0]; v[1] += _HDR_I[1]; v[2] += _HDR_I[2]; //const double ic = 0.001; //const double threshold = .. 더보기