• Home
  • All Posts
  • Tags
  • About
  • Atom feed
Refstop의 연구일지

2021 여름 프로젝트

2021 여름 프로젝트 - Aruco Marker EKF Localization August 23, 2021

작성 예정

read more
2021 여름 프로젝트 - 실내 자율 주행 로봇 August 22, 2021

지난번에 작성했던 간단한 실내 자율주행 로봇 패키지를 조금 발전시킨 형태입니다. 최종적인 목표는 아래 그림과 같은 택배를 가져다주는 실내 배송 로봇입니다.
제가 맡은 부분은 로봇 SLAM 및 네비게이션이었기 때문에 정리할 내용은 다음과 같습니다.

  • Cartographer 사용
    • 파라미터 사용 방법
  • Waypoint Navigation
    • move_base Action 사용 방법
    • 소스코드
  • Aruco Marker를 사용한 EKF Localization
    • Fiducial Package 사용 방법
    • 소스코드
read more

Bayesian Filter

[Udacity] Markov Localization January 16, 2021 8 minute read

Localization이란 무엇?

Localization은 자율주행차 또는 모바일 로봇이 자신의 위치를 인지하는 것을 의미합니다. 직역하면 위치 추정입니다. 어떻게 하면 자동차가 자기 위치를 인식 할 수 있을까요? 그것은 바로 센서와 지도를 이용하는 것입니다. 아직은 SLAM이 아닌 지도를 알고 움직이는 자동차로 생각합니다. 이 작업에서 가장 중요한 것은 확률, $bel(x_t)$입니다.

자율주행차의 확률 $bel(x_t)$

bel
자동차는 확률을 $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$에 대해서 알아보도록 하겠습니다.

read more
Bayesian Filter (1) Bayes 정리 December 22, 2020 2 minute read

Bayes 정리란?

$\large{ P(H|E)=\frac{P(E|H)P(H)}{P(E)} }$

$P(H): $사전확률 (가설, Hypothesis)
$P(E|H): $ 가설 $H$를 만족할 때 $E$가 발생할 확률
$P(E): $ 사건 E가 발생할 확률
$P(H|E): $사후확률 (증거, Evidence)

베이즈 정리란 쉽게 말해 확률을 어떻게 갱신할 수 있을지를 사전확률(Prior Probability)과 사후확률(Posterior Probability)의 관계로 나타낸 것입니다. 사전확률은 말 그대로 사건이 발생하기 전의 사건이 발생할 확률을 의미합니다. 사후확률 역시 별반 다르지 않습니다. 물론 사건이 발생한 후의 사건이 발생할 확률입니다.

그녀가 나를 좋아할 확률

베이즈 확률을 이해하기 위해 재미있는 예시를 들고 왔습니다. 한 수학자가 여사친에게 발렌타인데이에 초콜릿을 받았습니다. 그런데 이 수학자는 완전한 이과뇌라서 친구가 자신을 좋아할 확률을... read more

Camera Calibration

Raspberry Pi Camera Calibration January 10, 2021 2 minute read

raspi camera로 camera calibration하기

이 게시글은 라즈베리파이 카메라로 캘리브레이션을 하는 내용입니다.
순서는 다음과 같습니다.

  1. raspicam_node 설치
  2. camera calibration
  3. Troubleshooting

1. raspicam_node 설치

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

Camera_calibration 실습 November 4, 2020 1 minute read

realsense d435i의 카메라는 Monocular 인가? Stereo 인가?

이 부분을 잘못 알아서 한참 헤맸다. 틀림없이 Stereo인줄 알았는데 오른쪽에 렌즈 하나만 달린 Monocular 였던 것이다. 아…. 현타 엄청나게 왔다
Monocular 카메라의 캘리브레이션 방법은 다음 사이트에 나와 있다.
ROS wiki: How to Calibrate a Monocular Camera

Intel이 제공하는 Calibration SDK 사용

intel에서 제공하는 calibration tool을 사용한 캘리브레이션 시도해 보았다. 하지만 내부 파라미터를 빼오기 힘들어 지양하는 방법이란 말을 듣고 바로 포기했다. 사실 issue로서 failed to start calibration 이 떴다. 왜인지는 모르겠다.

Monocular Camera Calibration

-issue: Waiting for service /camera/set_camera_info …
Service not found
rosrun 명령어 끝에... read more

Camera_calibration(1) 내부 파라미터의 구성요소 November 3, 2020 1 minute read

Camera_calibration

Camera calibration을 하는 이유는 2d 평면을 3d 모델로 해석하기 위해서 필요한 파라미터를 구하는 것이다.
핀홀 카메라 모델
A[R/t] 행렬에서 A행렬이다.
A행렬은 내부 파라미터(intrinsic calibration)라고 하는데 이의 구성은

1. 초점거리 fx, fy

실제 단위: mm, 카메라 모델 단위: pixel
pixel은 이미지 센서의 셀 크기에 대해 상대적인 값으로 표현
예를 들어 셀 크기: 0.1mm, 초점거리가 500mm면 렌즈 중심에서 이미지 센서까지의 거리는 이미지 센서 셀 크기의 500배, 50mm라는 뜻이다. 실제 단위를 셀 크기와 초점거리로 표현해 놓은 것이다. 왜? 값을 이미지 센서에 종속시킴으로서 영상에서의 기하학적 해석을 용이하게 하기 위해서.

... read more

Computer Vision

[Udacity] Computer Vision (4) - Advanced CV February 4, 2021 12 minute read

곡선 차선 검출

지금까지 우리는 단지 차선을 검출한 방법에 대해서 공부했습니다. 하지만 직선이 아닌 곡선 차선일 경우 어떻게 자동차의 방향을 조절할 수 있을까요? 이번 게시글에서는 그 방법에 대해서 정리합니다. 대략적인 과정은 다음과 같습니다.

  1. 히스토그램 구하기
  2. 슬라이드 윈도우 생성 (시각화)
  3. 곡률 반경 구하기

방향 조절을 위해서 곡률 반경을 구해야 합니다. 모터 제어값같은 하드웨어적 출력을 주는 코드는 컴퓨터 비전과는 관계가 없으므로, 결론적으로 곡률 반경을 구하는 것이 목적입니다.
warped_example
이번 강의에서는 위의 이미지를 예시로 사용합니다. 이 이미지는 저번 강의에서 사용했던 조감도(bird’s eye view)와 Gradient 검출 알고리즘으로 차선만을 흰색으로 검출한 결과입니다. 이번 강의는 거의... read more

[Udacity] Computer Vision (3) - Gradient and Color Spaces January 24, 2021 7 minute read

이미지의 개체 식별법

카메라 캘리브레이션, 왜곡 교정, 원근 변환 등으로 보정된 이미지에서 어떤 개체, 예를 들면 차선 같은 개체를 찾아내는 방법에 대해서 알아보겠습니다. 컴퓨터가 이미지에서 개체를 식별하는 방법의 키워드는 그래디언트(Gradient)입니다. 그래디언트는 경도, 기울기, 변화도 등으로 해석될 수 있습니다. 이전의 색상과 비교하여 다음 색상과의 색상값 차이(RGB)를 계산하여, 변화가 크면 변화도가 큰 것으로, 물체의 경계(edge)라고 판단합니다. 이번 게시글에서는 그래디언트 계산 방법 중 Sobel 필터에 대해서 정리합니다.

Sobel Filter(Sobel Mask)

소벨 필터는 위에서 언급했듯이 물체의 경계를 찾는 필터입니다. 생김새는 다음과 같습니다.

$\large{ sobel_x=\begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix}\;\;\;\;\;\;\;\;\;... read more
[Udacity] Computer Vision (2) - Camera Calibration January 23, 2021 9 minute read

제대로 된 이미지로 보정하기

컴퓨터 비전에서 사용하는 센서 중 가장 중요한 것은 단연코 카메라입니다. 이미지 처리가 주된 내용인 만큼 카메라가 감지하는 정보는 높은 정확도를 요구합니다. 하지만 공장에서 만들어지기만 한 카메라를 바로 사용하기에는 문제가 있습니다. 내부 파라미터 조정이나 렌즈에 의한 왜곡 등이 아직 보정되지 않았기에 왜곡된 이미지가 출력될 수 있습니다. 이러한 상태의 카메라의 이미지를 보정하는 과정은 다음과 같습니다.

  1. 카메라 캘리브레이션(Camera Calibration)
  2. 왜곡 교정 (Distortion Correction)
  3. 원근 변환 (Perspective Transform)

사실 원근 변환은 이미지를 보정하는 과정보다는 가공하는 과정에 가깝지만 이번 강의에서 소개해주는 김에 다루도록 하겠습니다.

카메라 캘리브레이션 (Camera Calibration)

카메라 캘리브레이션은 간단히 말하면 3차원의 형상을 2차원으로 온전히 옮길... read more

Deep Learning

[Udacity] Deep Learning (7) - CNN 구성과 LeNet-5 July 5, 2021 4 minute read

지난 게시글에 이어 CNN의 구성과 LeNet-5를 예시로 파라미터를 계산해 보겠습니다.

input 1 is the X coordinate of the point, Input 2 is the y coordinate of the point, 

^^^왜인지 버그가 나서 아무말이나 지껴둔것

1. CNN의 구성

CNN의 구성을 공부하는 예시로서 대표적으로 사용되는 LeNet-5 모델으로 정리하겠습니다.

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

[Udacity] Deep Learning (6) - Convolutional Nerual Network July 4, 2021 3 minute read

지금까지 우리는 심층 신경망(Deep Nerual Network)을 구성하기까지의 과정을 살펴보았습니다. 이제 이 심층 신경망으로 구성할 수 있는 네트워크 중 이미지 학습에 최적화된 합성곱 신경망(Convolutional Nerual Network, CNN)에 대해서 알아보겠습니다.

CNN이 되기까지

CNN이 고안되기 전에는 이미지를 Fully Connected Nerual Network라는 1차원 벡터 형태의 데이터를 학습하는 형태의 신경망 구조를 사용했습니다. 하지만 FNN은 몇 가지 단점이 있습니다.
첫번째로 이미지 데이터를 평면화 시키는 과정에서 이미지의 인접한 픽셀 간의 정보가 유실된다는 점입니다. FNN은 1차원 벡터 형태의 데이터를 입력받기 때문에 이미지의 인접 픽셀간의 상관관계를 반영할 수 없습니다. 반면 CNN은 이미지의 특징을 보존한 채로 학습을 진행하기 때문에 인접... read more

[Udacity] Deep Learning (5) - Deep Nerual Network March 2, 2021 4 minute read

Deep Nerual Network

지금까지 정리한 Nerual Network는 모두 layer가 하나뿐인 단층 신경망(Single-Layer Perceptron)입니다. 하지만 단층 신경망으로는 비선형 모델을 구현할 수 없습니다. 지난 게시글에서 언급한 바와 같이 비선형 모델은 입력층(Input layer), 은닉층(Hidden layer), 출력층(Output layer)으로 이루어진 $^{1)}$심층 신경망(Deep Neural Network)으로 구현할 수 있습니다. 따라서 인공 신경망의 성능 향상을 위해서는 심층 신경망의 사용은 필수적이라고 할 수 있습니다.

ReLU Activation Function

심층 신경망에 대해서 정리하기 전에 ReLU 활성화 함수에 대해서 알아보고 넘어가겠습니다. 활성화 함수는 각 층의 신경망의 출력을 결정하는 함수입니다. 또한 활성화 함수가 없다면 심층 신경망은 $y=W_{1}W_{2}W_{3} \cdots x=Wx$가 되므로 비선형 모델이라고 볼 수 없는 결과가 나옵니다. 이러한 문제를 해결하기... read more

EKF

Kalman Filter와 EKF(2) - EKF SLAM August 22, 2021

지난 게시글에 이어 EKF를 사용한 SLAM 방법을 정리하겠습니다. SLAM은 로봇의 Localization과 Map을 작성하는 것이 목적으로 실시간 결과로서 로봇의 위치가, 최종적인 결과로서 로봇이 작성한 Map을 얻을 수 있습니다. 여기서 Map은 랜드마크의 위치를 기록한 자료로서, 사람이 생각하는 시각적인 지도가 아닌 랜드마크의 위치만을 기록한 txt 파일이 될 수도 있습니다. 이러한 SLAM의 방법으로는 Kalman Filter, Particle Filter, Graph-based 3가지로 나눌 수 있습니다. 이번 게시글에서는 EKF를 사용한 SLAM을 중심으로 설명하도록 하겠습니다.

EKF for online SLAM


위 그림은 EKF를 이용한 online SLAM을 표현한 그림입니다. online은 실시간인 만큼 현재 로봇의 위치 state $x_t$만을 저장하는 방식으로 작동합니다. $m$은 랜드마크의... read more

Kalman Filter와 EKF(1) - 선형 KF와 EKF August 5, 2021

이 게시글에서는 SLAM에서의 KF와 EKF를 기준으로 설명할 예정입니다.

Kalman Filter란?

칼만 필터는 현재 상태(state) $\mu$와 공분산(covariance) $\Sigma$를 기반으로 다음 상태를 추정하는 방법입니다. $\mu$와 $\Sigma$만으로 나타낼 수 있는 Gaussian 분포를 따르며, 지난 게시글의 Bayesian Filter와도 관계가 있습니다. 선형 칼만 필터를 설명하기 전에 가우시안 분포에 대해서 조금 설명하도록 하겠습니다.

Gaussian 분포

  • 단일 변수 가우시안 분포
$p(x)=\frac{1}{ \sqrt{2 \sigma^2 \pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$
  • 다변수 가우시안 분포
$p(x)=\frac{1}{ \sqrt{det(2\pi\Sigma)}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}$

가우시안 분포는 단일 변수(single variable)과 다변수(multi variable)의 표현 방식이 있으며, SLAM 에서는 로봇의 현재 state를 벡터 $(x,y,\phi)$로 표시하기 때문에 다변수 가우시안 분포를 사용하는 것이 좋습니다.

선형 모델의 가우시안 분포

일반적으로,... read more

Kalman Filter

Kalman Filter와 EKF(2) - EKF SLAM August 22, 2021

지난 게시글에 이어 EKF를 사용한 SLAM 방법을 정리하겠습니다. SLAM은 로봇의 Localization과 Map을 작성하는 것이 목적으로 실시간 결과로서 로봇의 위치가, 최종적인 결과로서 로봇이 작성한 Map을 얻을 수 있습니다. 여기서 Map은 랜드마크의 위치를 기록한 자료로서, 사람이 생각하는 시각적인 지도가 아닌 랜드마크의 위치만을 기록한 txt 파일이 될 수도 있습니다. 이러한 SLAM의 방법으로는 Kalman Filter, Particle Filter, Graph-based 3가지로 나눌 수 있습니다. 이번 게시글에서는 EKF를 사용한 SLAM을 중심으로 설명하도록 하겠습니다.

EKF for online SLAM


위 그림은 EKF를 이용한 online SLAM을 표현한 그림입니다. online은 실시간인 만큼 현재 로봇의 위치 state $x_t$만을 저장하는 방식으로 작동합니다. $m$은 랜드마크의... read more

Kalman Filter와 EKF(1) - 선형 KF와 EKF August 5, 2021

이 게시글에서는 SLAM에서의 KF와 EKF를 기준으로 설명할 예정입니다.

Kalman Filter란?

칼만 필터는 현재 상태(state) $\mu$와 공분산(covariance) $\Sigma$를 기반으로 다음 상태를 추정하는 방법입니다. $\mu$와 $\Sigma$만으로 나타낼 수 있는 Gaussian 분포를 따르며, 지난 게시글의 Bayesian Filter와도 관계가 있습니다. 선형 칼만 필터를 설명하기 전에 가우시안 분포에 대해서 조금 설명하도록 하겠습니다.

Gaussian 분포

  • 단일 변수 가우시안 분포
$p(x)=\frac{1}{ \sqrt{2 \sigma^2 \pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$
  • 다변수 가우시안 분포
$p(x)=\frac{1}{ \sqrt{det(2\pi\Sigma)}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}$

가우시안 분포는 단일 변수(single variable)과 다변수(multi variable)의 표현 방식이 있으며, SLAM 에서는 로봇의 현재 state를 벡터 $(x,y,\phi)$로 표시하기 때문에 다변수 가우시안 분포를 사용하는 것이 좋습니다.

선형 모델의 가우시안 분포

일반적으로,... read more

Kalman Filter 외전 - 선형 칼만 필터의 기초 December 15, 2020 4 minute read

Kalman filter란??

잡음이 포함된 선형 시스템에서 대상체의 상태(State)를 추적하는 재귀 필터. 쉽게 말하면 피드백을 통해 대상의 파라미터를 계속해서 수정하는 역할을 하는 것이다.

선형 칼만 필터

칼만 필터는 예측 단계와 추정(업데이트) 두개의 시퀀스를 가진다.

  1. 이전의 데이터를 가지고 대강 다음에 들어올 입력값을 예상. (예측 단계)
  2. 입력값이 들어온다. (입력 단계)
  3. 입력값과 예측값을 비교해서 최적의 출력값을 추정(업데이트 단계)
    이때 나온 출력값은 다시 1번에서의 ‘이전의 데이터’가 된다.

1. 이전의 데이터를 가지고 다음에 들어올 입력값을 예상. (예측 단계)

칼만 필터의 예시

Constant Velocity Model
아주 간단하게 상태 모델을 $x = [r, v]$ (거리: r, 속도: v) 라고 한다.... read more

Kobuki

Indoor 2D Navigation - 개요 & 좌표범위내 신호 출력 노드 March 2, 2021 2 minute read

프로젝트의 목적

본 프로젝트의 목적은 Kobuki 로봇을 사용하여 대학의 로봇관 건물을 자율주행 할 수 있도록 여러 SLAM 기법이나 Navigation 패키지를 사용해 보고, ROS 패키지를 제작하여 ROS와 우분투 환경에 익숙해지는 것입니다. 차후 있을 3D 라이다를 사용한 실내 자율주행 로봇 과제 등을 수행하기 위해 기본적인 사용법을 익히는 것을 목표로 하고 있습니다.

프로젝트 계획

프로젝트의 진행 계획은 다음과 같습니다. 이 계획은 진행 상황에 따라 수정될 수 있습니다.

  1. Kobuki 패키지 작성
  2. map에서 특정 좌표를 기준으로 일정 범위 내에 위치하면 신호 출력 노드
  3. 좌표를 파라미터화(yaml, dynamic_reconfigure)
  4. gmapping, cartographer mapping 실습
  5. amcl, cartographer pure localization을 사용한 localization
  6. move_base를 사용한 자율주행

패키지... read more

Kobuki 길들이기 (2) - Raspberry Pi로 Kobuki 제어 January 10, 2021 3 minute read

Kobuki를 Turtlebot3처럼

Kobuki를 갖고놀다 보니 터틀봇3처럼 원격접속으로 컨트롤하면 편하겠다는 생각이 들었습니다. 매번 컨트롤 할때마다 노트북을 올려놓고 하다 보니 허리를 숙여야 해서 허리에도 뭔가 부담이….
그래서 한번 라즈베리파이에 ROS kinetic과 꼬부기 패키지를 설치해보았습니다. 주말 동안 고생해서 올려 보았지만 뭔가 헛수고한 시간이 태반인듯 합니다..ㅠㅠ 구글링 해봐도 잘 정리된 글이 없어서 한번 정리해 봅니다. 물론 너무 쉬워서 다들 안 남기는거 같긴 하지만… 분명 저처럼 이리저리 헤멜 초보자가 있을 것이라 생각합니다.

전체적인 순서

사실 순서랄 것까지 없이 단순합니다. 라즈베리파이에 Ubuntu Mate 16.04 설치 - ssh 설정 - ROS kinetic 설치 - 꼬부기 패키지 설치 - 원격 접속 설정 - 구동 순서로... read more

Kobuki 길들이기 (1) - 설치 및 setup January 6, 2021 less than 1 minute read

Introducing KOBUKI

Kobuki 로봇은 유진 로봇에서 제작한 모바일 로봇 플랫폼입니다. ROS 실습용으로 사용하기 좋은 로봇입니다. 이 게시글은 KOBUKI 설치 방법을 다루고 있습니다.

Kobuki package 설치

제가 사용하는 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
					

Markov Localization

[Udacity] Markov Localization January 16, 2021 8 minute read

Localization이란 무엇?

Localization은 자율주행차 또는 모바일 로봇이 자신의 위치를 인지하는 것을 의미합니다. 직역하면 위치 추정입니다. 어떻게 하면 자동차가 자기 위치를 인식 할 수 있을까요? 그것은 바로 센서와 지도를 이용하는 것입니다. 아직은 SLAM이 아닌 지도를 알고 움직이는 자동차로 생각합니다. 이 작업에서 가장 중요한 것은 확률, $bel(x_t)$입니다.

자율주행차의 확률 $bel(x_t)$

bel
자동차는 확률을 $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$에 대해서 알아보도록 하겠습니다.

read more

Navigation

ROS SLAM & NAVIGATION 강의 정리 November 18, 2020 less than 1 minute read

SLAM이란?

SLAM이란 위치 추정과 맵핑을 동시에 하는 기법.
2차원, 3차원 지도를 그리는 방법이다.
방법: Gmapping, Katographer 등
OpenSLAM에 공개된 SLAM의 한 종류, ros에서 패키지로 제공.
Occupancy Grid Mapping: 2차원 점유 격자 지도

직접 만든 로봇관 2층 빈방의 occupancy grid map.
흰색: 자유 영역(이동 가능)
흑색: 점유 영역(이동 불가)
회색: 미지 영역(확인 안됨)

Gmapping은 개발이 거의 되고 있지 않는데다가 2d이다.
구글 cartographer는 개발도 잘되고 있고, 3d이다.
카토그래퍼쪽이 비전이 있다고 한다.

Q. 사실상 SLAM과 컴퓨터 비전은 다른 분야인거네요??
맞다. 본질적으로는 다르다. 하지만 교집합이 매우... read more

Particle Filter

Particle Filter (1) 원리 설명 December 17, 2020 5 minute read

Particle Filter란?

노이즈가 있는 환경에서 측정된 데이터를 필터를 사용해 실제 위치를 추정하는 도구이다. 선형 시스템과 가우시안 잡음(Gaussian Noise)가 적용되는 Kalman Filter와는 달리 비선형, 가우시안 분포가 적용되지 않는 환경에서 사용된다. turtlebot에서는 위치 추정에 사용된다. 아직은 크게 와닿지 않는 개념이다. 좀 더 알아보자.

Particle Filter의 원리

Particle Filter는 이름처럼 Particle을 사용하는 필터 기법이다. 쉽게 설명하기 위해 Youtube 채널 Team Jupeter의 Particle Filter 강의에서 든 예시를 설명하겠다. 위의 링크의 재생목록은 내가 공부하기 편하게 모아놓은 것이다. 게시글은 순전히 내 공부를 위한 것이니 사실 저기에 나온 내용을 정리해 놓은 것이기에 영상을 봐도 문제는 없다.

Stage 1

read more

Probabilistic Robotics

Bayesian Filter (1) Bayes 정리 December 22, 2020 2 minute read

Bayes 정리란?

$\large{ P(H|E)=\frac{P(E|H)P(H)}{P(E)} }$

$P(H): $사전확률 (가설, Hypothesis)
$P(E|H): $ 가설 $H$를 만족할 때 $E$가 발생할 확률
$P(E): $ 사건 E가 발생할 확률
$P(H|E): $사후확률 (증거, Evidence)

베이즈 정리란 쉽게 말해 확률을 어떻게 갱신할 수 있을지를 사전확률(Prior Probability)과 사후확률(Posterior Probability)의 관계로 나타낸 것입니다. 사전확률은 말 그대로 사건이 발생하기 전의 사건이 발생할 확률을 의미합니다. 사후확률 역시 별반 다르지 않습니다. 물론 사건이 발생한 후의 사건이 발생할 확률입니다.

그녀가 나를 좋아할 확률

베이즈 확률을 이해하기 위해 재미있는 예시를 들고 왔습니다. 한 수학자가 여사친에게 발렌타인데이에 초콜릿을 받았습니다. 그런데 이 수학자는 완전한 이과뇌라서 친구가 자신을 좋아할 확률을... read more

Particle Filter (1) 원리 설명 December 17, 2020 5 minute read

Particle Filter란?

노이즈가 있는 환경에서 측정된 데이터를 필터를 사용해 실제 위치를 추정하는 도구이다. 선형 시스템과 가우시안 잡음(Gaussian Noise)가 적용되는 Kalman Filter와는 달리 비선형, 가우시안 분포가 적용되지 않는 환경에서 사용된다. turtlebot에서는 위치 추정에 사용된다. 아직은 크게 와닿지 않는 개념이다. 좀 더 알아보자.

Particle Filter의 원리

Particle Filter는 이름처럼 Particle을 사용하는 필터 기법이다. 쉽게 설명하기 위해 Youtube 채널 Team Jupeter의 Particle Filter 강의에서 든 예시를 설명하겠다. 위의 링크의 재생목록은 내가 공부하기 편하게 모아놓은 것이다. 게시글은 순전히 내 공부를 위한 것이니 사실 저기에 나온 내용을 정리해 놓은 것이기에 영상을 봐도 문제는 없다.

Stage 1

read more
Kalman Filter 외전 - 선형 칼만 필터의 기초 December 15, 2020 4 minute read

Kalman filter란??

잡음이 포함된 선형 시스템에서 대상체의 상태(State)를 추적하는 재귀 필터. 쉽게 말하면 피드백을 통해 대상의 파라미터를 계속해서 수정하는 역할을 하는 것이다.

선형 칼만 필터

칼만 필터는 예측 단계와 추정(업데이트) 두개의 시퀀스를 가진다.

  1. 이전의 데이터를 가지고 대강 다음에 들어올 입력값을 예상. (예측 단계)
  2. 입력값이 들어온다. (입력 단계)
  3. 입력값과 예측값을 비교해서 최적의 출력값을 추정(업데이트 단계)
    이때 나온 출력값은 다시 1번에서의 ‘이전의 데이터’가 된다.

1. 이전의 데이터를 가지고 다음에 들어올 입력값을 예상. (예측 단계)

칼만 필터의 예시

Constant Velocity Model
아주 간단하게 상태 모델을 $x = [r, v]$ (거리: r, 속도: v) 라고 한다.... read more

Quaternions Rotation

쿼터니안(Quaternions) 회전 December 18, 2020 3 minute read

쿼터니안이란?

오일러 공식에 의해 복소수를 삼각함수로 표현할 수 있다는 점에 착안하여 삼각함수 없이도 회전변환 할 수 있게 해주는 방법. (수정)

$\large{e^{i \theta}=cos \theta +i \; sin\theta \; \; \; (Eulear's formula)}$

오일러 공식을 허수 평면에서 나타내면 다음과 같다.
허수평면 좌표계의 모양

$\large{e^{i \varphi} \cdot (1, 0)=e^{i \varphi} \cdot (1 +i \cdot 0)=(cos \varphi +i \; sin\varphi) \cdot (1 +i \cdot 0)=cos \varphi +i \; sin\varphi}$

즉, 오일러 공식을 통해 좌표 $(x, y)$를 각도 $\theta$만큼 회전시킬 수 있는 것이다.
실제로 $e^{i \theta} \cdot (x+iy)$를 하면 2차원 유클리디언 공간에서 각도 $\theta$만큼 회전한... read more

ROS2

ROS2 첫걸음 (14) - 파라미터 사용(Python) February 13, 2021 3 minute read

시작하며

이 게시글은 Python 노드에서 파라미터를 사용하는 방법을 정리합니다. 파라미터는 지난번에 turtlesim으로 한번 찍먹해본 적이 있습니다. 간단히 말하자면 노드 내에서 사용되는 변수이고, 이 값을 노드 내 또는 ros2 param 명령어를 통해 확인하거나 수정할 수 있습니다. 이번 게시글에서는 직접 생성, 수정을 해보도록 하겠습니다.

1. parameter 전용 패키지 생성

우선 파라미터 예제를 실습할 패키지를 생성합니다. 패키지의 위치는 ~/dev_ws/src 폴더 안입니다.

$ ros2 pkg create --build-type ament_python python_parameters --dependencies rclpy 

--dependencies 명령어를 통해 rclpy 의존성 패키지를 추가합니다. 이렇게 추가한 의존성은 자동으로 package.xml 파일과 read more

ROS2 첫걸음 (13) - 나만의 msg와 srv 파일(Python) January 26, 2021 6 minute read

커스텀 메시지와 서비스 파일

메시지와 서비스 파일이 무엇인지는 이전 강의들에서 설명했습니다. 이번 게시글에서는 나만의 msg와 srv 파일을 만들어 사용하는 방식을 익혀보도록 합시다. 과정은 다음과 같습니다.

  1. msg & srv 전용 패키지 생성
  2. msg & srv 파일 작성
  3. 이전에 사용했던 publisher & subscriber 수정
  4. 이전에 사용했던 server & client 수정
  5. 빌드 & 소스(적용), 실행 조금 길어 보이지만, 각각 짧은 과정들이니 빠르게 해 봅시다.

1. msg & srv 패키지 생성

msg와 srv파일을 관리하는 패키지를 만들겠습니다. ~/dev_ws/src 디렉토리에 패키지를 생성합니다.

$ ros2 pkg create --build-type ament_cmake tutorial_interfaces 

그 다음, 패키지 폴더 안으로 이동하여... read more

ROS2 첫걸음 (12) - 서비스와 클라이언트(Python) January 18, 2021 3 minute read

서비스와 클라이언트

서비스와 클라이언트는 ROS의 pub/sub와는 다른 통신방식입니다. 이들에 대한 설명은 다음 게시글에 정리되어 있습니다. 이번 게시글은 사용방법에 대해서 알아보기로 합시다.

서비스-클라이언트 작성의 단계

srv-cli 작성은 약 단계로 진행됩니다.

  1. 패키지 작성
  2. 서비스, 클라이언트 노드 작성
  3. setup.py 편집
  4. build & 실행 차례대로 살펴봅시다.

1. 패키지 작성

패키지 작성은 지금까지와 비슷합니다. ros2 pkg create 명령어를 사용합니다.

ros2 pkg create --build-type ament_python py_srvcli --dependencies rclpy example_interfaces 

이번 ros2 pkg create 명령어에서는 --dependencies rclpy example_interfaces라는 구문을 추가하였습니다. 이 구문은 package.xml에 의존성을 자동으로(?) 추가시켜 줍니다. 그래서... read more

Raspberry Pi

Raspberry Pi Camera Calibration January 10, 2021 2 minute read

raspi camera로 camera calibration하기

이 게시글은 라즈베리파이 카메라로 캘리브레이션을 하는 내용입니다.
순서는 다음과 같습니다.

  1. raspicam_node 설치
  2. camera calibration
  3. Troubleshooting

1. raspicam_node 설치

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

라즈베리파이 초기 설정하기 January 9, 2021 1 minute read

라즈베리파이 초기 설정

라즈베리파이에 라즈비안을 설치했을 때 몇 가지 해줘야 할 초기 설정에 대해서 정리합니다. 개인적으로 깔 때마다 찾아서 해주는 설정이기에 한번에 보고자 이곳에 정리합니다.

와이파이 설정

wpa_supplicant.conf 파일을 엽니다. 아직 gedit이 설치가 안되어있으니 nano 편집기를 사용합니다.
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
와이파이 사용국가를 US로 바꿉니다.

# country=KR country=US 

그 후 라즈베리파이를 재부팅하면 와이파이가 잡힙니다.

한글 폰트 설치

와이파이를 잡았다면 한글 폰트를 설치해 줍시다.

$ sudo apt-get update $ sudo apt-get install fonts-nanum 

재부팅하면 깨져 보이던 한글이 다시 보일것입니다.

gedit 설치

window 메모장과... read more

RealSense

Camera_calibration 실습 November 4, 2020 1 minute read

realsense d435i의 카메라는 Monocular 인가? Stereo 인가?

이 부분을 잘못 알아서 한참 헤맸다. 틀림없이 Stereo인줄 알았는데 오른쪽에 렌즈 하나만 달린 Monocular 였던 것이다. 아…. 현타 엄청나게 왔다
Monocular 카메라의 캘리브레이션 방법은 다음 사이트에 나와 있다.
ROS wiki: How to Calibrate a Monocular Camera

Intel이 제공하는 Calibration SDK 사용

intel에서 제공하는 calibration tool을 사용한 캘리브레이션 시도해 보았다. 하지만 내부 파라미터를 빼오기 힘들어 지양하는 방법이란 말을 듣고 바로 포기했다. 사실 issue로서 failed to start calibration 이 떴다. 왜인지는 모르겠다.

Monocular Camera Calibration

-issue: Waiting for service /camera/set_camera_info …
Service not found
rosrun 명령어 끝에... read more

Camera_calibration(1) 내부 파라미터의 구성요소 November 3, 2020 1 minute read

Camera_calibration

Camera calibration을 하는 이유는 2d 평면을 3d 모델로 해석하기 위해서 필요한 파라미터를 구하는 것이다.
핀홀 카메라 모델
A[R/t] 행렬에서 A행렬이다.
A행렬은 내부 파라미터(intrinsic calibration)라고 하는데 이의 구성은

1. 초점거리 fx, fy

실제 단위: mm, 카메라 모델 단위: pixel
pixel은 이미지 센서의 셀 크기에 대해 상대적인 값으로 표현
예를 들어 셀 크기: 0.1mm, 초점거리가 500mm면 렌즈 중심에서 이미지 센서까지의 거리는 이미지 센서 셀 크기의 500배, 50mm라는 뜻이다. 실제 단위를 셀 크기와 초점거리로 표현해 놓은 것이다. 왜? 값을 이미지 센서에 종속시킴으로서 영상에서의 기하학적 해석을 용이하게 하기 위해서.

... read more

Realsense

이전의 RealSense D435i 진행 요약 October 31, 2020 less than 1 minute read

지금까지의 진행상황 요약

RealSense D435i를 교수님께 받고 SDK 툴을 설치했다. ROS wiki의 RealSense 항목을 참조했다.
ROS wiki RealSense 항목
그 후 Rviz를 설치하여 Depth Camera의 PointCloud와 rgb camera를 볼 수 있었다.
(rviz 사진 첨부 필요)
realsense d435i와 rviz 연동해봄.
필요한것은 *roslaunch realsense2_camera rs_rgbd.launch, rviz
이를 위해서 rgbd가 설치되어 있어야 한다.
안되어 있으면 Resource not found: rgbd_launch 오류 발생.
sudo apt install ros-<ros_version>-rgbd-launch 커맨드를 실행해 설치.
이후 rviz에서 map->camara_link로 변경, Add->Pointcloud2를 선택하여 realsense 작동을 확인할 수 있다.

read more

SLAM

Bayesian Filter (1) Bayes 정리 December 22, 2020 2 minute read

Bayes 정리란?

$\large{ P(H|E)=\frac{P(E|H)P(H)}{P(E)} }$

$P(H): $사전확률 (가설, Hypothesis)
$P(E|H): $ 가설 $H$를 만족할 때 $E$가 발생할 확률
$P(E): $ 사건 E가 발생할 확률
$P(H|E): $사후확률 (증거, Evidence)

베이즈 정리란 쉽게 말해 확률을 어떻게 갱신할 수 있을지를 사전확률(Prior Probability)과 사후확률(Posterior Probability)의 관계로 나타낸 것입니다. 사전확률은 말 그대로 사건이 발생하기 전의 사건이 발생할 확률을 의미합니다. 사후확률 역시 별반 다르지 않습니다. 물론 사건이 발생한 후의 사건이 발생할 확률입니다.

그녀가 나를 좋아할 확률

베이즈 확률을 이해하기 위해 재미있는 예시를 들고 왔습니다. 한 수학자가 여사친에게 발렌타인데이에 초콜릿을 받았습니다. 그런데 이 수학자는 완전한 이과뇌라서 친구가 자신을 좋아할 확률을... read more

Particle Filter (1) 원리 설명 December 17, 2020 5 minute read

Particle Filter란?

노이즈가 있는 환경에서 측정된 데이터를 필터를 사용해 실제 위치를 추정하는 도구이다. 선형 시스템과 가우시안 잡음(Gaussian Noise)가 적용되는 Kalman Filter와는 달리 비선형, 가우시안 분포가 적용되지 않는 환경에서 사용된다. turtlebot에서는 위치 추정에 사용된다. 아직은 크게 와닿지 않는 개념이다. 좀 더 알아보자.

Particle Filter의 원리

Particle Filter는 이름처럼 Particle을 사용하는 필터 기법이다. 쉽게 설명하기 위해 Youtube 채널 Team Jupeter의 Particle Filter 강의에서 든 예시를 설명하겠다. 위의 링크의 재생목록은 내가 공부하기 편하게 모아놓은 것이다. 게시글은 순전히 내 공부를 위한 것이니 사실 저기에 나온 내용을 정리해 놓은 것이기에 영상을 봐도 문제는 없다.

Stage 1

read more
Kalman Filter 외전 - 선형 칼만 필터의 기초 December 15, 2020 4 minute read

Kalman filter란??

잡음이 포함된 선형 시스템에서 대상체의 상태(State)를 추적하는 재귀 필터. 쉽게 말하면 피드백을 통해 대상의 파라미터를 계속해서 수정하는 역할을 하는 것이다.

선형 칼만 필터

칼만 필터는 예측 단계와 추정(업데이트) 두개의 시퀀스를 가진다.

  1. 이전의 데이터를 가지고 대강 다음에 들어올 입력값을 예상. (예측 단계)
  2. 입력값이 들어온다. (입력 단계)
  3. 입력값과 예측값을 비교해서 최적의 출력값을 추정(업데이트 단계)
    이때 나온 출력값은 다시 1번에서의 ‘이전의 데이터’가 된다.

1. 이전의 데이터를 가지고 다음에 들어올 입력값을 예상. (예측 단계)

칼만 필터의 예시

Constant Velocity Model
아주 간단하게 상태 모델을 $x = [r, v]$ (거리: r, 속도: v) 라고 한다.... read more

Tensorflow

[Udacity] Deep Learning (4) - Tensorflow March 1, 2021 7 minute read

왜 Tensowflow 인가

Tensorflow란?

지난 시간까지 신경망을 쌓으면서 모델을 학습, 즉 적절한 가중치와 바이어스를 구하는 방법을 이론적으로 알아보았습니다. 이번 게시글에선 이 방법들을 물리적인 코드로 구현해 보겠습니다. 하지만 코드로 구현한다고 하여 덧셈 뺄셈 연산자를 이용하여 밑바닥부터 구현한다는 의미는 아닙니다. 이미 시중에는 딥러닝을 초보자도 쉽게(?) 구현할 수 있도록 제작해 놓은 여러 라이브러리들이 있습니다. 이 중 우리는 가장 많은 사람들이 사용하는 Tensorflow를 사용할 것입니다. tensor flow
Tensorflow는 구글에서 만든 딥러닝을 쉽게 구현할 수 있도록 기능을 제공하는 라이브러리입니다. 위 그림과 같이 딥러닝을 할 사용되는 텐서 형태의 데이터들이 모델을 구성하는 연산들의 그래프를 따라 흐르면서 연산이 일어납니다.... read more

Tensorflow 공부 (1) - Tensorflow 설치 December 1, 2020 less than 1 minute read

Tensorflow 설치

일반적으로 Terminal에서 pip install tensorflow 명령어를 통해 설치할 수 있다.
특정한 버전이 필요하다면 pip install tensorflow -v '<필요한 버전>' 명령어를 사용하면 된다.

anaconda 가상환경 설치

  1. anaconda를 설치
    • 다음 블로그를 참고하여 acaconda를 설치한다.
      [Ubuntu 18.04] Anaconda 설치 및 가상환경 구축
  2. anaconda 가상 환경 설치 후 PATH 환경변수 설정
    • bashrc에 export PATH=~/anaconda3/bin:~/anaconda3/condabin:$PATH 추가
  3. Terminal에서 conda activate base 실행, anaconda 가상환경을 실행
    • conda activate base에서 base는 가상환경 이름이기에 임의로 설정이 가능하다.
    • conda activate base 실행에서 다음의... read more

Turtlebot3

Turtlebot SLAM 실습 - SLAM과 내비게이션 December 14, 2020 1 minute read

SLAM과 내비게이션

사실상 모바일 로봇(turtlebot 같은)의 최종적인 목적은 내비게이션이다. 여기서 말하는 내비게이션이란 정해진 목적지까지 이동하는 것이다. 스스로 목적지까지 이동하기 위해서는 무엇이 필요할까? 내비게이션 알고리즘에 따라 다르겠지만 보통 다음 기능들이 필수적으로 갖춰져 있어야 한다.

  1. 지도
  2. 로봇 자세 계측/추정 기능
  3. 벽, 물체 등 장애물 계측 기능
  4. 최적 경로를 계산하고 주행하는 기능

1. 지도

로봇 스스로 지도를 만드는 기법이 바로 SLAM이다. SLAM은 Simultaneous localization and mapping의 줄임말로, 동시적 위치 추정 및 지도 작성이라고 할 수 있겠다. 쉽게 말해 지금 내가 어디 있는지, 그리고 어떤 장소에 있는지를 계속해서 인지하면서 지도를 만드는 것이다.

2. 로봇 자세 계측/추정 기능

로봇이 자신의... read more

Udacity

[Udacity] Deep Learning (7) - CNN 구성과 LeNet-5 July 5, 2021 4 minute read

지난 게시글에 이어 CNN의 구성과 LeNet-5를 예시로 파라미터를 계산해 보겠습니다.

input 1 is the X coordinate of the point, Input 2 is the y coordinate of the point, 

^^^왜인지 버그가 나서 아무말이나 지껴둔것

1. CNN의 구성

CNN의 구성을 공부하는 예시로서 대표적으로 사용되는 LeNet-5 모델으로 정리하겠습니다.

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

[Udacity] Deep Learning (6) - Convolutional Nerual Network July 4, 2021 3 minute read

지금까지 우리는 심층 신경망(Deep Nerual Network)을 구성하기까지의 과정을 살펴보았습니다. 이제 이 심층 신경망으로 구성할 수 있는 네트워크 중 이미지 학습에 최적화된 합성곱 신경망(Convolutional Nerual Network, CNN)에 대해서 알아보겠습니다.

CNN이 되기까지

CNN이 고안되기 전에는 이미지를 Fully Connected Nerual Network라는 1차원 벡터 형태의 데이터를 학습하는 형태의 신경망 구조를 사용했습니다. 하지만 FNN은 몇 가지 단점이 있습니다.
첫번째로 이미지 데이터를 평면화 시키는 과정에서 이미지의 인접한 픽셀 간의 정보가 유실된다는 점입니다. FNN은 1차원 벡터 형태의 데이터를 입력받기 때문에 이미지의 인접 픽셀간의 상관관계를 반영할 수 없습니다. 반면 CNN은 이미지의 특징을 보존한 채로 학습을 진행하기 때문에 인접... read more

[Udacity] Deep Learning (5) - Deep Nerual Network March 2, 2021 4 minute read

Deep Nerual Network

지금까지 정리한 Nerual Network는 모두 layer가 하나뿐인 단층 신경망(Single-Layer Perceptron)입니다. 하지만 단층 신경망으로는 비선형 모델을 구현할 수 없습니다. 지난 게시글에서 언급한 바와 같이 비선형 모델은 입력층(Input layer), 은닉층(Hidden layer), 출력층(Output layer)으로 이루어진 $^{1)}$심층 신경망(Deep Neural Network)으로 구현할 수 있습니다. 따라서 인공 신경망의 성능 향상을 위해서는 심층 신경망의 사용은 필수적이라고 할 수 있습니다.

ReLU Activation Function

심층 신경망에 대해서 정리하기 전에 ReLU 활성화 함수에 대해서 알아보고 넘어가겠습니다. 활성화 함수는 각 층의 신경망의 출력을 결정하는 함수입니다. 또한 활성화 함수가 없다면 심층 신경망은 $y=W_{1}W_{2}W_{3} \cdots x=Wx$가 되므로 비선형 모델이라고 볼 수 없는 결과가 나옵니다. 이러한 문제를 해결하기... read more

github

C++ 코딩 테스트 입출력 시간을 좀 더 줄이는 방법 October 7, 2021

ios_base::sync_with_stdio(false)

ios_base::sync_with_stdio(false)의 의미는 C에서의 입출력 라이브러리 stdio와 C++에서의 입출력 라이브러리 iostream의 버퍼 동기화를 분리하는 역할입니다.

장점

cin과 cout은 C의 stdio의 입출력함수 printf, scanf와 버퍼를 동기화하고 있어 ios_base::sync_with_stdio(false) 함수를 통해서 버퍼를 분리하여 C++만의 버퍼를 사용합니다. 검사할 버퍼의 크기가 줄어듦으로서 속도 향상의 이점을 누릴 수 있습니다.

단점

stdio와 iostream의 버퍼를 분리하였으므로 C언어에서의 입출력 함수(printf, scanf, getchar, puts, putchar 등)들을 사용하지 못합니다.

cin.tie(NULL)

cin.tie(NULL)은 cin과 cout의 tie를 풀어준다는 의미입니다. cin과 cout은 기본적으로 tie되어 있어 cin을 사용하기 전에 cout에서 출력할 값을 내보내서 “Enter name:” 을 출력합니다. 이때 출력할 값을 버퍼에서 내보내는 것을 플러시(flush)라고 합니다. cin과 cout 둘 중 한쪽만 untie해도... read more

자주쓰는 git 명령어 정리 September 29, 2021

사용해본 git 명령어 정리

git init : git 공간 만들기
git clone : git repository로부터 다운로드(깃 공간까지)
git add . : 깃 공간의 변경사항 전부 추가(저장후보) (잘몰겟음)
git commit -m ‘(커밋 메시지)’ : git add로 추가한 내용들 local에 업로드
git push : local -> remote로 업로드
git status : 깃 공간의 현재상태(커밋내용, 현재 브랜치 등)
git branch : 현재 깃 공간(local)의 브랜치 보기
git log : 현재 브랜치의 커밋 목록들 보기(q 누르면 종료, enter 누르면 계속 보여줌)
-v : 브랜치 상세정보, 마지막 커밋 메시지 확인
-r : 리모트 공간의 브랜치... read more

모두를 위한 딥러닝

Tensorflow 공부 (1) - Tensorflow 설치 December 1, 2020 less than 1 minute read

Tensorflow 설치

일반적으로 Terminal에서 pip install tensorflow 명령어를 통해 설치할 수 있다.
특정한 버전이 필요하다면 pip install tensorflow -v '<필요한 버전>' 명령어를 사용하면 된다.

anaconda 가상환경 설치

  1. anaconda를 설치
    • 다음 블로그를 참고하여 acaconda를 설치한다.
      [Ubuntu 18.04] Anaconda 설치 및 가상환경 구축
  2. anaconda 가상 환경 설치 후 PATH 환경변수 설정
    • bashrc에 export PATH=~/anaconda3/bin:~/anaconda3/condabin:$PATH 추가
  3. Terminal에서 conda activate base 실행, anaconda 가상환경을 실행
    • conda activate base에서 base는 가상환경 이름이기에 임의로 설정이 가능하다.
    • conda activate base 실행에서 다음의... read more
모두를 위한 딥러닝 정리(3) - Cross Entropy November 27, 2020 less than 1 minute read

CROSS-ENTROPY 비용 함수

Cross entropy는 Softmax 함수를 이용한 다중 분류의 비용, 즉 오차에 대한 평가를 나타내기 위한 용도입니다. 기본적인 공식은 다음과 같습니다.

$\large{ D(S, L)=-\sum_{i} \; L_{i} \; log(S_{i}) }$

$S_{i}:$ Softmax 함수의 출력값, $S(\overline{y})=\overline{Y}$
$L_{i}:$ Label값. 실제값이다. $L=Y, \; A,B,C$ 범주 중 $A$가 정답일때, $\begin{bmatrix} 1\0\0 \end{bmatrix}$

이제 이 식이 어째서 비용함수인지 알아봅시다. 위의 식을 다시 나타내면 다음과 같습니다.

$\large{ -\sum_{i} \; L_{i} \; log(S_{i})=\sum_{i} \; (L_{i}) \cdot \; (-log(S_{i})) }$

$\sum$ 안으로, $log$ 앞으로 마이너스 부호가 이동했습니다. 여기서 우리는 $-log$함수를 알아볼 필요가 있습니다. 먼저 그래프부터 봅시다.
-log 그래프 read more

모두를 위한 딥러닝 정리(2) - Softmax Regression November 27, 2020 2 minute read

Logistic 회귀 - 이진 분류

Logistic 회귀는 데이터를 0과 1로 나누기 위해 사용되는 모델이다. 다른 이름으로 이진 분류(Binary Classification)이 있다. Softmax는 데이터를 2개 이상의 그룹으로 나누기 위해서 이진 분류를 확장한 모델이다. Logistic 회귀를 나타낸 그림은 다음과 같다.

$\large{H_{L}(X)=WX}$
$\large{z=H_{L}(X), \; \; \; Logistic Regression: g(z)}$

로지스틱 함수
일반적으로 Logistic 회귀를 사용할 때 Sigmoid 함수를 사용한다. 결과가 항상 0 또는 1로 수렴되기 때문이다.

Multinomial Classification

그렇다면 다중 분류는 어떻게 할 수 있을까? 이진 분류는 Sigmoid 함수에 넣으면 뚝딱 나오지만 다중 분류는 아직 감이 잡히지 않는다.
다음 표를 토대로... read more

실내 자율 주행

2021 여름 프로젝트 - Aruco Marker EKF Localization August 23, 2021

작성 예정

read more
2021 여름 프로젝트 - 실내 자율 주행 로봇 August 22, 2021

지난번에 작성했던 간단한 실내 자율주행 로봇 패키지를 조금 발전시킨 형태입니다. 최종적인 목표는 아래 그림과 같은 택배를 가져다주는 실내 배송 로봇입니다.
제가 맡은 부분은 로봇 SLAM 및 네비게이션이었기 때문에 정리할 내용은 다음과 같습니다.

  • Cartographer 사용
    • 파라미터 사용 방법
  • Waypoint Navigation
    • move_base Action 사용 방법
    • 소스코드
  • Aruco Marker를 사용한 EKF Localization
    • Fiducial Package 사용 방법
    • 소스코드
read more
Indoor 2D Navigation - 개요 & 좌표범위내 신호 출력 노드 March 2, 2021 2 minute read

프로젝트의 목적

본 프로젝트의 목적은 Kobuki 로봇을 사용하여 대학의 로봇관 건물을 자율주행 할 수 있도록 여러 SLAM 기법이나 Navigation 패키지를 사용해 보고, ROS 패키지를 제작하여 ROS와 우분투 환경에 익숙해지는 것입니다. 차후 있을 3D 라이다를 사용한 실내 자율주행 로봇 과제 등을 수행하기 위해 기본적인 사용법을 익히는 것을 목표로 하고 있습니다.

프로젝트 계획

프로젝트의 진행 계획은 다음과 같습니다. 이 계획은 진행 상황에 따라 수정될 수 있습니다.

  1. Kobuki 패키지 작성
  2. map에서 특정 좌표를 기준으로 일정 범위 내에 위치하면 신호 출력 노드
  3. 좌표를 파라미터화(yaml, dynamic_reconfigure)
  4. gmapping, cartographer mapping 실습
  5. amcl, cartographer pure localization을 사용한 localization
  6. move_base를 사용한 자율주행

패키지... read more

코딩 테스트

[코딩 테스트] 재귀함수 October 9, 2021

1. 팩토리얼

팩토리얼은 n!으로 1부터 특정 숫자까지의 수를 모두 곱하는 것입니다. 예를 들어 5!은 1x2x3x4x5=120으로 나타냅니다.

수식으로 표현하면 다음과 같습니다.

$$ F_{n}=n*F_{n-1} $$

따라서 재귀함수로 나타내기 위해서 다음과 같은 규칙을 지정합니다.

  • 종료조건: 1이 되었을 때 1을 return
  • 반복수식: $F_{n}=n*F_{n-1}$
int factorial(int num) { if(num <= 1) { return 1; } return num*factorial(n-1); } 

처음 코드를 짰을 때 조건식을 num ==... read more

회사 견학 후기

YJ Link 회사 견학 후기 November 19, 2020 1 minute read

YJ Link는 어떤 기업인가?

YJ Link는 SMT 공정 과정에 사용되는 기계를 만드는 회사입니다.
SMT(Surface Mounting Technology)란 표면실장기술을 뜻하는 것으로 전자기기 조립을 자동으로 실행하는 장치를 총칭합니다.
인쇄회로기판(PCB) 위에 반도체나 다이오드, 칩 등을 다수의 장비로 실장하고 이를 경화시키는 기능을 수행하는 기술로 표면 실장형 부품을 PWB 표면에 장착하고 납땜하는 기술을 의미합니다.
[출처] SMT 공정과정 * SMT장점&단점|작성자 쎄크

회사 견학 내용

반도체 공정 중에 사용되는 모바일 로봇을 견학하고 왔다. 독일 로봇 회사 OMRON에서 제작한 로봇에 yj link의 모듈을 추가한 모바일 로봇이었는데 youtube ros 강의에서 실습했던 터틀봇 시뮬레이션과 거의 비슷한 시뮬레이터를 구현하고 있었다. 사실상 성능 엄청 좋은 터틀봇이다…라고도 할 수... read more

  • 2021 여름 프로젝트 (2)
  • Bayesian Filter (2)
  • Camera Calibration (3)
  • Computer Vision (4)
  • Deep Learning (11)
  • EKF (2)
  • Kalman Filter (3)
  • Kobuki (3)
  • Markov Localization (1)
  • Navigation (1)
  • Particle Filter (1)
  • Probabilistic Robotics (3)
  • Quaternions Rotation (1)
  • ROS2 (14)
  • Raspberry Pi (2)
  • RealSense (2)
  • Realsense (1)
  • SLAM (5)
  • Tensorflow (2)
  • Turtlebot3 (1)
  • Udacity (11)
  • github (2)
  • 모두를 위한 딥러닝 (4)
  • 실내 자율 주행 (3)
  • 코딩 테스트 (1)
  • 회사 견학 후기 (1)

    2021 © Refstop

    Posts
    Tags
    About