작성 예정
read more지난번에 작성했던 간단한 실내 자율주행 로봇 패키지를 조금 발전시킨 형태입니다. 최종적인 목표는 아래 그림과 같은 택배를 가져다주는 실내 배송 로봇입니다.
제가 맡은 부분은 로봇 SLAM 및 네비게이션이었기 때문에 정리할 내용은 다음과 같습니다.
Localization은 자율주행차 또는 모바일 로봇이 자신의 위치를 인지하는 것을 의미합니다. 직역하면 위치 추정입니다. 어떻게 하면 자동차가 자기 위치를 인식 할 수 있을까요? 그것은 바로 센서와 지도를 이용하는 것입니다. 아직은 SLAM이 아닌 지도를 알고 움직이는 자동차로 생각합니다. 이 작업에서 가장 중요한 것은 확률, $bel(x_t)$입니다.
자동차는 확률을 $bel(x_t)$라는 확률함수의 형태로 표현합니다. $x_t$는 자동차의 상태를 의미하는데, 이 강의에서는 position으로 취급합니다. 따라서 $bel(x_t)$는 자동차가 $x_t$라는 지점에 있을 확률이라고 해석할 수 있습니다. 이를 확률함수의 형태로 표현하면 그림과 같이 $bel(x_t)=p(x_t|z_{1:t}, u_{1:t}, m)$이 됩니다. 확률함수의 조건인 $z_{1:t}, u_{1:t}, m$에 대해서 알아보도록 하겠습니다.
$P(H): $사전확률 (가설, Hypothesis)
$P(E|H): $ 가설 $H$를 만족할 때 $E$가 발생할 확률
$P(E): $ 사건 E가 발생할 확률
$P(H|E): $사후확률 (증거, Evidence)
베이즈 정리란 쉽게 말해 확률을 어떻게 갱신할 수 있을지를 사전확률(Prior Probability)과 사후확률(Posterior Probability)의 관계로 나타낸 것입니다. 사전확률은 말 그대로 사건이 발생하기 전의 사건이 발생할 확률을 의미합니다. 사후확률 역시 별반 다르지 않습니다. 물론 사건이 발생한 후의 사건이 발생할 확률입니다.
베이즈 확률을 이해하기 위해 재미있는 예시를 들고 왔습니다. 한 수학자가 여사친에게 발렌타인데이에 초콜릿을 받았습니다. 그런데 이 수학자는 완전한 이과뇌라서 친구가 자신을 좋아할 확률을... read more
이 게시글은 라즈베리파이 카메라로 캘리브레이션을 하는 내용입니다.
순서는 다음과 같습니다.
ROS로 camera calibration을 하려면 우선 /camera/image 토픽과 /camera 토픽이 필요합니다. 따라서 해당 카메라의 토픽을 실행시킬 수 있는 패키지를 설치해야 합니다. 설치방법은 여기에 나와 있지만 정리해보도록 합시다.
git clone
명령어를 통해 catkin_ws/src
폴더에 패키지를 다운받습니다.
$ cd catkin_ws/src $ git clone https://github.com/UbiquityRobotics/raspicam_node.git
ROS에 인식되지 않는 의존성 몇 가지를 위해 다음 명령어를 실행해 줍니다.
$ sudo gedit /etc/ros/rosdep/sources.list.d/30-ubiquity.list
열린... read more
이 부분을 잘못 알아서 한참 헤맸다. 틀림없이 Stereo인줄 알았는데 오른쪽에 렌즈 하나만 달린 Monocular 였던 것이다. 아…. 현타 엄청나게 왔다
Monocular 카메라의 캘리브레이션 방법은 다음 사이트에 나와 있다.
ROS wiki: How to Calibrate a Monocular Camera
intel에서 제공하는 calibration tool을 사용한 캘리브레이션 시도해 보았다. 하지만 내부 파라미터를 빼오기 힘들어 지양하는 방법이란 말을 듣고 바로 포기했다. 사실 issue로서 failed to start calibration 이 떴다. 왜인지는 모르겠다.
-issue: Waiting for service /camera/set_camera_info …
Service not found
rosrun 명령어 끝에... read more
Camera calibration을 하는 이유는 2d 평면을 3d 모델로 해석하기 위해서 필요한 파라미터를 구하는 것이다.
A[R/t] 행렬에서 A행렬이다.
A행렬은 내부 파라미터(intrinsic calibration)라고 하는데 이의 구성은
실제 단위: mm, 카메라 모델 단위: pixel
pixel은 이미지 센서의 셀 크기에 대해 상대적인 값으로 표현
예를 들어 셀 크기: 0.1mm, 초점거리가 500mm면 렌즈 중심에서 이미지 센서까지의 거리는 이미지 센서 셀 크기의 500배, 50mm라는 뜻이다. 실제 단위를 셀 크기와 초점거리로 표현해 놓은 것이다. 왜? 값을 이미지 센서에 종속시킴으로서 영상에서의 기하학적 해석을 용이하게 하기 위해서.
지금까지 우리는 단지 차선을 검출한 방법에 대해서 공부했습니다. 하지만 직선이 아닌 곡선 차선일 경우 어떻게 자동차의 방향을 조절할 수 있을까요? 이번 게시글에서는 그 방법에 대해서 정리합니다. 대략적인 과정은 다음과 같습니다.
방향 조절을 위해서 곡률 반경을 구해야 합니다. 모터 제어값같은 하드웨어적 출력을 주는 코드는 컴퓨터 비전과는 관계가 없으므로, 결론적으로 곡률 반경을 구하는 것이 목적입니다.
이번 강의에서는 위의 이미지를 예시로 사용합니다. 이 이미지는 저번 강의에서 사용했던 조감도(bird’s eye view)와 Gradient 검출 알고리즘으로 차선만을 흰색으로 검출한 결과입니다. 이번 강의는 거의... read more
카메라 캘리브레이션, 왜곡 교정, 원근 변환 등으로 보정된 이미지에서 어떤 개체, 예를 들면 차선 같은 개체를 찾아내는 방법에 대해서 알아보겠습니다. 컴퓨터가 이미지에서 개체를 식별하는 방법의 키워드는 그래디언트(Gradient)입니다. 그래디언트는 경도, 기울기, 변화도 등으로 해석될 수 있습니다. 이전의 색상과 비교하여 다음 색상과의 색상값 차이(RGB)를 계산하여, 변화가 크면 변화도가 큰 것으로, 물체의 경계(edge)라고 판단합니다. 이번 게시글에서는 그래디언트 계산 방법 중 Sobel 필터에 대해서 정리합니다.
소벨 필터는 위에서 언급했듯이 물체의 경계를 찾는 필터입니다. 생김새는 다음과 같습니다.
컴퓨터 비전에서 사용하는 센서 중 가장 중요한 것은 단연코 카메라입니다. 이미지 처리가 주된 내용인 만큼 카메라가 감지하는 정보는 높은 정확도를 요구합니다. 하지만 공장에서 만들어지기만 한 카메라를 바로 사용하기에는 문제가 있습니다. 내부 파라미터 조정이나 렌즈에 의한 왜곡 등이 아직 보정되지 않았기에 왜곡된 이미지가 출력될 수 있습니다. 이러한 상태의 카메라의 이미지를 보정하는 과정은 다음과 같습니다.
사실 원근 변환은 이미지를 보정하는 과정보다는 가공하는 과정에 가깝지만 이번 강의에서 소개해주는 김에 다루도록 하겠습니다.
카메라 캘리브레이션은 간단히 말하면 3차원의 형상을 2차원으로 온전히 옮길... read more
지난 게시글에 이어 CNN의 구성과 LeNet-5를 예시로 파라미터를 계산해 보겠습니다.
input 1 is the X coordinate of the point, Input 2 is the y coordinate of the point,
^^^왜인지 버그가 나서 아무말이나 지껴둔것
CNN의 구성을 공부하는 예시로서 대표적으로 사용되는 LeNet-5 모델으로 정리하겠습니다.
LeNet-5 네트워크는 CNN을 처음으로 개발한 Yann Lecun 연구팀이 개발한 CNN 알고리즘의 이름입니다. 이 알고리즘이 소개된 논문 제목은 Gradient-based learning applied to document recognition”입니다.
LeNet-5 네트워크는 Input-C1-S2-C3-S4-C5-F6-Output으로 이루어져 있고, Convolution layer, Pooling layer 두 쌍(C1-S2-C3-S4)과 Flatten layer(C5), Fully... read more
지금까지 우리는 심층 신경망(Deep Nerual Network)을 구성하기까지의 과정을 살펴보았습니다. 이제 이 심층 신경망으로 구성할 수 있는 네트워크 중 이미지 학습에 최적화된 합성곱 신경망(Convolutional Nerual Network, CNN)에 대해서 알아보겠습니다.
CNN이 고안되기 전에는 이미지를 Fully Connected Nerual Network라는 1차원 벡터 형태의 데이터를 학습하는 형태의 신경망 구조를 사용했습니다. 하지만 FNN은 몇 가지 단점이 있습니다.
첫번째로 이미지 데이터를 평면화 시키는 과정에서 이미지의 인접한 픽셀 간의 정보가 유실된다는 점입니다. FNN은 1차원 벡터 형태의 데이터를 입력받기 때문에 이미지의 인접 픽셀간의 상관관계를 반영할 수 없습니다. 반면 CNN은 이미지의 특징을 보존한 채로 학습을 진행하기 때문에 인접... read more
지금까지 정리한 Nerual Network는 모두 layer가 하나뿐인 단층 신경망(Single-Layer Perceptron)입니다. 하지만 단층 신경망으로는 비선형 모델을 구현할 수 없습니다. 지난 게시글에서 언급한 바와 같이 비선형 모델은 입력층(Input layer), 은닉층(Hidden layer), 출력층(Output layer)으로 이루어진 $^{1)}$심층 신경망(Deep Neural Network)으로 구현할 수 있습니다. 따라서 인공 신경망의 성능 향상을 위해서는 심층 신경망의 사용은 필수적이라고 할 수 있습니다.
심층 신경망에 대해서 정리하기 전에 ReLU 활성화 함수에 대해서 알아보고 넘어가겠습니다. 활성화 함수는 각 층의 신경망의 출력을 결정하는 함수입니다. 또한 활성화 함수가 없다면 심층 신경망은 $y=W_{1}W_{2}W_{3} \cdots x=Wx$가 되므로 비선형 모델이라고 볼 수 없는 결과가 나옵니다. 이러한 문제를 해결하기... read more
지난 게시글에 이어 EKF를 사용한 SLAM 방법을 정리하겠습니다. SLAM은 로봇의 Localization과 Map을 작성하는 것이 목적으로 실시간 결과로서 로봇의 위치가, 최종적인 결과로서 로봇이 작성한 Map을 얻을 수 있습니다. 여기서 Map은 랜드마크의 위치를 기록한 자료로서, 사람이 생각하는 시각적인 지도가 아닌 랜드마크의 위치만을 기록한 txt 파일이 될 수도 있습니다. 이러한 SLAM의 방법으로는 Kalman Filter, Particle Filter, Graph-based 3가지로 나눌 수 있습니다. 이번 게시글에서는 EKF를 사용한 SLAM을 중심으로 설명하도록 하겠습니다.
위 그림은 EKF를 이용한 online SLAM을 표현한 그림입니다. online은 실시간인 만큼 현재 로봇의 위치 state $x_t$만을 저장하는 방식으로 작동합니다. $m$은 랜드마크의... read more
이 게시글에서는 SLAM에서의 KF와 EKF를 기준으로 설명할 예정입니다.
칼만 필터는 현재 상태(state) $\mu$와 공분산(covariance) $\Sigma$를 기반으로 다음 상태를 추정하는 방법입니다. $\mu$와 $\Sigma$만으로 나타낼 수 있는 Gaussian 분포를 따르며, 지난 게시글의 Bayesian Filter와도 관계가 있습니다. 선형 칼만 필터를 설명하기 전에 가우시안 분포에 대해서 조금 설명하도록 하겠습니다.
가우시안 분포는 단일 변수(single variable)과 다변수(multi variable)의 표현 방식이 있으며, SLAM 에서는 로봇의 현재 state를 벡터 $(x,y,\phi)$로 표시하기 때문에 다변수 가우시안 분포를 사용하는 것이 좋습니다.
일반적으로,... read more
지난 게시글에 이어 EKF를 사용한 SLAM 방법을 정리하겠습니다. SLAM은 로봇의 Localization과 Map을 작성하는 것이 목적으로 실시간 결과로서 로봇의 위치가, 최종적인 결과로서 로봇이 작성한 Map을 얻을 수 있습니다. 여기서 Map은 랜드마크의 위치를 기록한 자료로서, 사람이 생각하는 시각적인 지도가 아닌 랜드마크의 위치만을 기록한 txt 파일이 될 수도 있습니다. 이러한 SLAM의 방법으로는 Kalman Filter, Particle Filter, Graph-based 3가지로 나눌 수 있습니다. 이번 게시글에서는 EKF를 사용한 SLAM을 중심으로 설명하도록 하겠습니다.
위 그림은 EKF를 이용한 online SLAM을 표현한 그림입니다. online은 실시간인 만큼 현재 로봇의 위치 state $x_t$만을 저장하는 방식으로 작동합니다. $m$은 랜드마크의... read more
이 게시글에서는 SLAM에서의 KF와 EKF를 기준으로 설명할 예정입니다.
칼만 필터는 현재 상태(state) $\mu$와 공분산(covariance) $\Sigma$를 기반으로 다음 상태를 추정하는 방법입니다. $\mu$와 $\Sigma$만으로 나타낼 수 있는 Gaussian 분포를 따르며, 지난 게시글의 Bayesian Filter와도 관계가 있습니다. 선형 칼만 필터를 설명하기 전에 가우시안 분포에 대해서 조금 설명하도록 하겠습니다.
가우시안 분포는 단일 변수(single variable)과 다변수(multi variable)의 표현 방식이 있으며, SLAM 에서는 로봇의 현재 state를 벡터 $(x,y,\phi)$로 표시하기 때문에 다변수 가우시안 분포를 사용하는 것이 좋습니다.
일반적으로,... read more
잡음이 포함된 선형 시스템에서 대상체의 상태(State)를 추적하는 재귀 필터. 쉽게 말하면 피드백을 통해 대상의 파라미터를 계속해서 수정하는 역할을 하는 것이다.
칼만 필터는 예측 단계와 추정(업데이트) 두개의 시퀀스를 가진다.
Constant Velocity Model
아주 간단하게 상태 모델을 $x = [r, v]$ (거리: r, 속도: v) 라고 한다.... read more
본 프로젝트의 목적은 Kobuki 로봇을 사용하여 대학의 로봇관 건물을 자율주행 할 수 있도록 여러 SLAM 기법이나 Navigation 패키지를 사용해 보고, ROS 패키지를 제작하여 ROS와 우분투 환경에 익숙해지는 것입니다. 차후 있을 3D 라이다를 사용한 실내 자율주행 로봇 과제 등을 수행하기 위해 기본적인 사용법을 익히는 것을 목표로 하고 있습니다.
프로젝트의 진행 계획은 다음과 같습니다. 이 계획은 진행 상황에 따라 수정될 수 있습니다.
Kobuki를 갖고놀다 보니 터틀봇3처럼 원격접속으로 컨트롤하면 편하겠다는 생각이 들었습니다. 매번 컨트롤 할때마다 노트북을 올려놓고 하다 보니 허리를 숙여야 해서 허리에도 뭔가 부담이….
그래서 한번 라즈베리파이에 ROS kinetic과 꼬부기 패키지를 설치해보았습니다. 주말 동안 고생해서 올려 보았지만 뭔가 헛수고한 시간이 태반인듯 합니다..ㅠㅠ 구글링 해봐도 잘 정리된 글이 없어서 한번 정리해 봅니다. 물론 너무 쉬워서 다들 안 남기는거 같긴 하지만… 분명 저처럼 이리저리 헤멜 초보자가 있을 것이라 생각합니다.
사실 순서랄 것까지 없이 단순합니다. 라즈베리파이에 Ubuntu Mate 16.04 설치 - ssh 설정 - ROS kinetic 설치 - 꼬부기 패키지 설치 - 원격 접속 설정 - 구동 순서로... read more
Kobuki 로봇은 유진 로봇에서 제작한 모바일 로봇 플랫폼입니다. ROS 실습용으로 사용하기 좋은 로봇입니다. 이 게시글은 KOBUKI 설치 방법을 다루고 있습니다.
제가 사용하는 ROS 버전은 melodic이기 때문에 유진로봇 github에서 패키지를 다운받았습니다. kinetic 버전을 사용하시는 분은 아래 링크를 참고해 주십시오.
ROS wiki Kobuki Tutorial-Installation
우선 Kobuki를 위한 workspace를 만듭니다.
$ mkdir -p ~/kobuki_ws/src $ cd ~/kobuki_ws/ $ catkin_make
src 폴더에 Kobuki 패키지를 설치합니다.
$ cd src $ git clone https://github.com/yujinrobot/kobuki.git
kobuki_ws로 가서 rosdep으로 의존성을 설치해 줍니다.
$ cd ~/kobuki_ws/... read more
Localization은 자율주행차 또는 모바일 로봇이 자신의 위치를 인지하는 것을 의미합니다. 직역하면 위치 추정입니다. 어떻게 하면 자동차가 자기 위치를 인식 할 수 있을까요? 그것은 바로 센서와 지도를 이용하는 것입니다. 아직은 SLAM이 아닌 지도를 알고 움직이는 자동차로 생각합니다. 이 작업에서 가장 중요한 것은 확률, $bel(x_t)$입니다.
자동차는 확률을 $bel(x_t)$라는 확률함수의 형태로 표현합니다. $x_t$는 자동차의 상태를 의미하는데, 이 강의에서는 position으로 취급합니다. 따라서 $bel(x_t)$는 자동차가 $x_t$라는 지점에 있을 확률이라고 해석할 수 있습니다. 이를 확률함수의 형태로 표현하면 그림과 같이 $bel(x_t)=p(x_t|z_{1:t}, u_{1:t}, m)$이 됩니다. 확률함수의 조건인 $z_{1:t}, u_{1:t}, m$에 대해서 알아보도록 하겠습니다.
노이즈가 있는 환경에서 측정된 데이터를 필터를 사용해 실제 위치를 추정하는 도구이다. 선형 시스템과 가우시안 잡음(Gaussian Noise)가 적용되는 Kalman Filter와는 달리 비선형, 가우시안 분포가 적용되지 않는 환경에서 사용된다. turtlebot에서는 위치 추정에 사용된다. 아직은 크게 와닿지 않는 개념이다. 좀 더 알아보자.
Particle Filter는 이름처럼 Particle을 사용하는 필터 기법이다. 쉽게 설명하기 위해 Youtube 채널 Team Jupeter의 Particle Filter 강의에서 든 예시를 설명하겠다. 위의 링크의 재생목록은 내가 공부하기 편하게 모아놓은 것이다. 게시글은 순전히 내 공부를 위한 것이니 사실 저기에 나온 내용을 정리해 놓은 것이기에 영상을 봐도 문제는 없다.
read more
Probabilistic Robotics
Bayesian Filter (1) Bayes 정리
Bayes 정리란?$P(H): $사전확률 (가설, Hypothesis) 베이즈 정리란 쉽게 말해 확률을 어떻게 갱신할 수 있을지를 사전확률(Prior Probability)과 사후확률(Posterior Probability)의 관계로 나타낸 것입니다. 사전확률은 말 그대로 사건이 발생하기 전의 사건이 발생할 확률을 의미합니다. 사후확률 역시 별반 다르지 않습니다. 물론 사건이 발생한 후의 사건이 발생할 확률입니다. 그녀가 나를 좋아할 확률베이즈 확률을 이해하기 위해 재미있는 예시를 들고 왔습니다. 한 수학자가 여사친에게 발렌타인데이에 초콜릿을 받았습니다. 그런데 이 수학자는 완전한 이과뇌라서 친구가 자신을 좋아할 확률을... read more
Particle Filter (1) 원리 설명
Particle Filter란?노이즈가 있는 환경에서 측정된 데이터를 필터를 사용해 실제 위치를 추정하는 도구이다. 선형 시스템과 가우시안 잡음(Gaussian Noise)가 적용되는 Kalman Filter와는 달리 비선형, 가우시안 분포가 적용되지 않는 환경에서 사용된다. turtlebot에서는 위치 추정에 사용된다. 아직은 크게 와닿지 않는 개념이다. 좀 더 알아보자. Particle Filter의 원리Particle Filter는 이름처럼 Particle을 사용하는 필터 기법이다. 쉽게 설명하기 위해 Youtube 채널 Team Jupeter의 Particle Filter 강의에서 든 예시를 설명하겠다. 위의 링크의 재생목록은 내가 공부하기 편하게 모아놓은 것이다. 게시글은 순전히 내 공부를 위한 것이니 사실 저기에 나온 내용을 정리해 놓은 것이기에 영상을 봐도 문제는 없다. Stage 1
|
---|