본문 바로가기

IT/ROS

[ROS] 11. Lidar Sensor

반응형

☞ 메인보드 : Jetson Nano Developer Kit
운영 체제 : Ubuntu 18.04 - JetPack 4.4.1

☞ ROS 버전 : Melodic




목차

1. 라이다(Lidar) 센서란?
2. YDLIDAR 다운로드 & 빌드
3. 실행 결과







① 라이다(Lidar) 센서란?

라이다(Lidar) 센서는 레이저를 쏴 주위의 물체에 반사되어 돌아왔을 때의 시간을 이용해 물체와의 거리를 측정하고 이를 나타내는 장치이다. LDS(Laser Distance Sensor) 라고도 불리는 라이다 센서는 미니 자율주행차를 만들 때 흔히 사용하는 초음파 센서, PSD(Position Sensing Device) 센서와 비슷한 원리를 갖고 있는데 PSD 센서가 360도 회전하는 것을 라이다 센서라고 생각하면 편하다.

라이다보다는 레이다(Radar, Radio Detecting And Ranging)에 대해 더 많이 들어봤을 텐데 레이다는 전자기파를 물체에 발사시켜 거리측정을 하는 무선 감시장치이고, 이와 같은 원리를 가진 라이다는 빛을 뜻하는 light 와 레이다의 Radar를 합성해서 이름이 만들어졌다고 한다.

현재 라이다는 AI 자율주행이라는 키워드와 함께 필수적인 센서로써 언급되고 있는데 이는 기술의 발달로 높은 해상도의 센싱을 통해 매핑(Mapping)을 수행할 수 있기 때문이다. 매핑이라하면 SLAM(Simultaneous Localization And Mapping) 알고리즘을 떠올릴 수 있는데 구글링만 해봐도 로보티즈 사의 터틀 봇 3 모델로 SLAM을 했다는 글을 볼 수 있으니 참고하면 도움이 될 것 같다. [ + 라이다로 가장 유명한 회사는 벨로다인이다. 몇 백만 원 이상의 가격이며, 센서 자체를 회전시켜 2D가 아닌 3D 데이터를 얻을 수 있는 제품도 있다. 2020 로보월드에 가서 본 자율주행 로봇들은 전부 벨로다인 라이다를 탑재하고 있었다.]

PSD(출처 : 디바이스마트) , 레이다(출처 : 위키피디아)



이번 포스팅에 사용할 Lidar는 YDLIDAR 사의 G2 모델이다. 20만 원 정도의 가격이었던 것으로 기억한다. 심플한 박스에 포장되어 있는 이 친구는 꽤 귀엽게 생겼다. 전원을 연결했을때는 레이저가 발사되는 눈알 부분에서 파란색 빛이 나온다. 라이다 왼쪽에 있는 핀 구멍에는 전원(micro 5pin)과 데이터 케이블(C type)이 들어간다. 전원이 들어오지 않은 상태에도 윗부분을 손으로 잡고 돌리면 360도 회전한다. YDLIDAR 홈페이지의 G2 모델의 스펙을 보면 12cm ~ 12m 의 인식 범위를 갖고 있다고 한다.

라이다 센서에 사용되는 레이저가 망막이나 피부에 손상을 줄 수 있기 때문에 눈 부상을 최소화시키기 위한 안전한 설계가 필요하다. 이 안전한 정도의 기준으로 Laser Safety Class 라 하여 레이저의 출력이나 파장에 따라 등급을 정해 놓는데, G2 모델은 Class 1로 매우 안전한 모델임을 알 수 있었다.



아래에 있는 사이트 링크는 라이다를 제작한 YDLIDAR 사의 깃허브 주소인데 우분투, 윈도우에서 ROS를 설치하는 방법과 라이다 센서 사용을 위한 ROS 빌드, 실행 방법에 대해서 설명한다.

 

GitHub - YDLIDAR/ydlidar_ros: ydlidar ros package

ydlidar ros package. Contribute to YDLIDAR/ydlidar_ros development by creating an account on GitHub.

github.com




 

 


② YDLIDAR 다운로드 & 빌드

 

수정 전 내용

더보기

YDLIDAR 깃허브에 접속하면 모델별 데이터셋 바로 아래 쪽에 빌드 방법을 설명하고 있다. Note라고 적힌 부분은 workspace(작업 공간)을 만드는 부분부터 시작한다. 이전 포스트에서 catkin_ws 를 이미 만들고 진행하는 사람은 catkin_ws의 하위 디렉터리인 src에 들어가 패키지를 복제해주면 된다.






※ ydlidar_ros 패키지 다운로드

 

git clone https://github.com/YDLIDAR/ydlidar_ros

 



작업이 완료되면 이전 디렉터리로 돌아가는 cd .. 명령어를 사용해 catkin_ws 디렉터리로 돌아간 후 master라는 브랜치를 지정하고 catkin_make를 진행해주자.

# 현재 디렉터리 : ~/catkin_ws/src
cd ydlidar_ros/
git checkout master

 





※ catkin_make & 라이다 인식 확인

 

# 현재 디렉터리 : ~/catkin_ws/src/ydlidar_ros
cd ~/catkin_ws/
catkin_make



catkin_make를 완료했으면 라이다를 연결한다. YDLIDAR G2 모델 경우에는 Power(Micro 5 Pin), Data(C type Pin) 로 두 가지 핀이 있는데 Data 핀만 연결해도 사용할 수 있다.

dmesg | grep tty

 



USB를 연결하면 보통 ttyUSB* 포트에 인식된다. 터미널 마지막 줄을 보면 cp210x USB 컨버터 드라이버가 ttyUSB0에 접근했음을 알 수 있다. ttyUSB0에 실행할 수 있는 권한을 부여하자.[ls -l /dev/ttyUSB* 명령으로도 인식을 확인할 수 있다.]


sudo chmod +x /dev/ttyUSB0

 

 

※ 2023.02.15 다운로드 & 빌드 내용 수정

YDLidar사의 Github 주소와 내용이 변경되어 수정하였습니다.

 

 

 

Shenzhen Yuedeng Technology Co.,Ltd.

Shenzhen Yuedeng Technology Co., Ltd. , which is a leading provider of robot lidar sensors and intelligent mobile platforms - Shenzhen Yuedeng Technology Co.,Ltd.

github.com

 

 

 

 

두 가지를 모두 다운로드해야 YDLidar 모델을 사용할 수 있게되었다. 기존에는 YDLidar에서 제공하는 하나의 패키지로 모든 것을 할 수 있지만 SDK 다운로드가 생기면서 패키지 구조를 개편한 듯 보인다.

 

 

☞  YDLidar SDK

 

GitHub - YDLIDAR/YDLidar-SDK: Driver for receiving YD LiDAR data and more...

Driver for receiving YD LiDAR data and more... Contribute to YDLIDAR/YDLidar-SDK development by creating an account on GitHub.

github.com

 

 

 

☞ YDLidar ROS Driver

 

GitHub - YDLIDAR/ydlidar_ros_driver: ydlidar driver package under ros

ydlidar driver package under ros. Contribute to YDLIDAR/ydlidar_ros_driver development by creating an account on GitHub.

github.com

 

 

☞ 필요한 패키지 다운로드

sudo apt install cmake pkg-config python swig python-pip

 

 

ROS 설치에서 swig 빼고는 아마 다 깔려있을 것이다.

 

 

☞ 빌드

# ydlidar SDK 다운로드
git clone https://github.com/YDLIDAR/YDLidar-SDK.git
mkdir -p YDLidar-SDK/build
cd YDLidar-SDK/build
cmake ..
make
sudo make install


# ydlidar_ros_driver 다운로드
cd ../../
git clone https://github.com/YDLIDAR/ydlidar_ros_driver.git
chmod 0777 ydlidar_ros_driver/startup/*
cd ~/catkin_ws && catkin_make

 

 

 

catkin_ws/src 안에 SDK와 ros_driver를 함께 놓아야한다. 

 

 

☞ 포트 설정

https://github.com/YDLIDAR/ydlidar_ros_driver

 

포트는 기본값으로 /dev/ydlidar로 되어있으니 이 부분을 우리 라이다 포트에 맞게 설정해야한다.

 

라이다를 컴퓨터에 꽂고 아래의 명령을 터미널에 입력하여 포트를 확인하자.

 

 

# 터미널 입력
dmesg | grep tty

 

 

 

 

라이다가 /dev/ttyUSB0에 연결됐다는 메세지가 출력된다. 그럼 이제 해당 포트에 접근 권한을 부여해주자.

 

 

sudo chmod a+rw /dev/ttyUSB0

 

 

ydlidar_ros_driver/launch 디렉터리에가면 ydlidar에서 라이다 모델에 맞게 설정 값을 미리 launch 파일로 작성해두었다. 나는 G2 모델을 사용하고 있어서 G2.launch 파일 내용에서 포트 항목을 수정해줄 것이다.

 

 

 

 

# BEFORE
<param name="port"         type="string" value="/dev/ydlidar"/>

# AFTER
<param name="port"         type="string" value="/dev/ttyUSB0"/>

 


③ 실행 결과

 

# 라이다 작동 확인
roslaunch ydlidar_ros_driver G2.launch

# 라이다 뷰 확인
rviz

 

 

 

 

ydlidar에서 제공하는 lidar_view는 아쉽게도 G4, G5 버전만 제공하는 것 같다. rviz를 실행하여 직접 입력해주자. 라이다 작동을 하면 rviz 왼쪽 아랫부분에 Add 버튼을 클릭하여 By topic의 /scan 토픽의 LaserScan을 확인할 수 있다. 이를 클릭하여 추가해주면 라이다 뷰를 확인할 수 있다.

 

 

 

 

갑자기 멀쩡한 라이다 패키지는 왜 수정해서 요래 귀찮게 만들었는지 모르겠지만, 아마 개발자가 최적화를 덜 해서 그렇다고 생각을 하는 것 같다. 요번에 새로 빌드를 하게 되면서 못보던 라이다 모델이 상당히 많이 생긴 것 같은데 모든 모델에 신경을 쓰면서 배포를 하다보니 수정한 것 때문에 SDK와 드라이버를 나눠서 제공하게 된 것 같다.

 

무튼 요새는 웹서비스 공부를 하고 있는데 오랜만에 ROS를 건드려 본 것 같아서 재미있었다. ROS2도 활발하게 사용되고 있는 것 같은데 로봇 관련 개발을 하고 있는 것이 아니라 정보가 적다. 곧 다시 이곳으로 돌아오게 될 것 같긴한데 그 때는 로봇이 얼마나 발전해있고 ROS 플랫폼의 변화가 어디까지 되어있을지도 기대가 된다. 

 

 

 

 

 

☞ IP 에러가 발생했다면?

 



~.bashrc 에 ROS_HOSTNAME 자리에 IP주소가 입력되지 않았기 때문에 이런 에러가 발생한다.[IP가 자주 바뀐다던지...] 현재 내 IP주소를 알아내려면 ifconfig 명령어를 입력해서 이더넷(랜선) 연결은 eth0의 주소를 입력하면 되고 젯슨 모델에 맞는 랜카드를 구매해서 와이파이를 사용하고 있다면 wlan0의 주소를 ROS_HOSTNAME 에 입력해주면 된다.

 

 

ifconfig

 

.bashrc 의 내용

 

 

또는 export ROS_HOSTNAME=localhost 로 입력해주면 다음에 다시 ifconfig로 확인할 필요가 없다.

 

 

sudo gedit ~/.bashrc
source ~/.bashrc



source 작업까지 완료해준다면 IP에 대한 에러는 해결된다.



 

 



라이다는 레이저를 사용하기 때문에 반사율이 적고 투과되거나 회절하는 물체를 대상으로는 제대로 된 측정 값을 얻어낼 수 없다. 대표적으로 유리나 플라스틱, 아크릴과 같은 물체가 그렇다. 이런 물체를 상대로는 레이저 관련 센서가 아닌 초음파 센서?로 거리를 측정하는 것이 옳지 않을까 싶다.

현재 사용한 라이다 센서 G2 모델은 360도 방향이지만 수평면으로만 레이저를 쏘기 때문에 입체적인 3D 데이터를 얻기는 어렵다. 기회가 된다면 라이다에 간단한 장치를 해서 3D 데이터도 얻을 수 있는 장치를 만들어보고 싶다.






반응형