외부 라이다를 이용해 로봇의 위치를 파악하기

RPLiDAR S1

 

SLAMTEC RPLIDAR S1, 알피라이다 S1 360도 레이저 스캐너40M

How to build rplidar ros package

  • Clone this project to your catkin's workspace src folder
  • Running catkin_make to build rplidarNode and rplidarNodeClient

How to run rplidar ros package

  • Check the authority of rplidar's serial-port :
  • ls -l /dev |grep ttyUSB
  • Add the authority of write: (such as /dev/ttyUSB0)
  • sudo chmod 666 /dev/ttyUSB0
  • There're two ways to run rplidar ros package

 

Run rplidar node and view in the rviz

roslaunch rplidar_ros view_rplidar_s1.launch

 

 

모터 시스템에 의해 구동될 때 범위 스캐너 코어는 시계 방향으로 회전합니다.
현재 환경에 대한 360도 스캔을 수행합니다.

 

output

Distance : mm

Heading : degree --> Current heading angle of the measurement

rviz axis

lidar raw data

 

같은 물체로 판단되는 것을 같은 색으로 표현하는 clustering을 한 결과입니다.

 

clustering and position

제 책상위에서 라이다를 실행시켜봤는데 위 이미지에서 볼수있듯이 어떤 물체가 인식된건지 알수가 없었습니다. 그래서 아무 장애물이 없는 곳에 작은 물체를 하나 놓고 제대로 인식이 되는지 확인해보려고 합니다.

먼저 최대한 장애물이 없는 도서관 스터디룸에서 큰 상자를 두고 라이다를 인식시켜봤습니다.

 

*  c++ 코드를 수정했다면 catkin_make를 해줘야 바뀐코드가 적용됩니다.

* open source를 사용했고 제 환경에 맞게 frame_id 와 world_frame은 둘다 laser로 바꾸고 rviz에 text를 띄우기 위해 코드를 더 추가했습니다.  또한 rplidar파일과 함께 실행시키기위해 datmo launch file에 rplidar launch 실행파일을 추가했습니다.

 

아래와 같은 error가 발생한다면 pc에 usb port가 할당되지 않았다는 것을 의미합니다.

터미널에 다음 명령을 입력하고 다시 코드를 실행시키면 오류가 발생하지 않을 것입니다.

$ sudo chmod 777 /dev/ttyUSB0

 

/etc/udev/rules.d위치에 usb port위치를 넣으면 chmod를 계속 하지않아도 됩니다.

lsusb 명령어를 이용하여 usb port 숫자를 알수있습니다.

 

아래와 같은 error가 발생한다면 log file disk의 저장 용량을 초과했다는 의미이므로

$ rosclean purge 명령을 이용하여 에러를 제거할수있습니다.

 

원래 상자 크기가 너비 40cm에 길이 50cm 인데 라이다를 이용해 길이를 재본 결과 35cm, 48cm로 오차가 있는것을 확인하였습니다. 2,3 cm정도의 오차가 발생하므로 5cm level에서 정확도를 가집니다.

 

이는 인식한 크기만큼 네모를 그리도록 한 것입니다. 상자의 위치는 주황색 네모입니다.

 

저는 상자의 크기를 알기때문에 width가 0.3~0.45 안에 속하고 length가 0.45~0.55안에 속하는 크기만 보이도록 했습니다.

 

 

하지만 문제점은 상자가 비스듬하게 위치해있다면 width 와 length가 모두 측정되어 정확히 상자크기 조건을 줄수있지만 한쪽길이만 측정이된다면 원하는 상자이외에 다른 물체까지 네모박스를 그리게 됩니다. 이는 어떻게 해결할수 있을까요?

 

제가 생각한 방법은 로봇이 움직일 거니까 다른  raw data들은 가만히 있기때문에 네모 상자를 그리더라도 알아서 배제를 시킬수있습니다. 그래서 저는 L1 또는 L2길이가 0.4~0.5이내로 들어오게 된다면 로봇의 원래 길이인 L1=0.48, L2=0.49를 대입했습니다.

 

그럼 여러개의 네모 상자가 만들어질텐데 이 중 움직이는 것이 로봇(축의 약간 왼쪽에 위치)이라고 생각하는 것입니다.

로봇의 경우 프레임사이 빈 공간때문에 라이다로 측정하기 힘들어 사이사이 폼보드를 부착하여 진행했습니다.

 

 

ros 명령어

1. 파일 이동

mv file1 dir1/

(앞에 파일이 오고 뒤에 디렉토리가 오는 경우)

file1 파일을 dir1 디렉토리로 이동합니다.

mv file1 file2 dir1/

여러개의 파일을 한번에 이동시킬 수 있습니다.

 

연구실에서 로봇의 위치를 측정하였고 로봇의 방향이 나오도록 해봤습니다.

마커아래에 라이다가 있습니다.

 

그 결과 아래와 같이 많은 사각형이 발견되었습니다.

길이 조건을 더 상세하게 주어 로봇만을 감지하도록 하였습니다.

 

blog

https://github.com/robopeak/rplidar_ros

https://github.com/hhayoung/object_detection_gl_ros

https://github.com/LucasWEIchen/lidar_tracking

https://github.com/kostaskonkk/datmo

 

+ Recent posts