2D Lidar (Slamtec rplidar A1M8)
이 글을 읽기 전 읽어야하는 글
라이다
라이다 : 적외선 레이저를 쏘아 반사되어 돌아오는 시간을 측량하여 거리를 잴 수 있는 센서 2D 라이다 : 2차원 평면을 바탕으로 360 도를 스캔하는 라이다2D Lidar3D 라이다 : 3차원 평면을 측정하는
dawon-project.tistory.com
이 글에서는 A1M8을 어떻게 코드를 짜는지 배선 어떻게하는지 등을 다뤄 볼 것입니다.
Slamtec rplidar A1M8
- 해당 제품은 UART 통신을 통해서 명령 프로토콜을 전달하면 라이다 내부에 있는 cpu가 그 명령을 분석해서 레지스터에 등록되어있는 명령어 체계에 따라서 동작을 하게 된다.
< Spec 및 요구사항 >
< 제품 배선>
<하드웨어 결선도>
< 프로그램 동작 흐름도 >
<작동 방법>
위의 그림은 A1M8 Lidar User Manual에서 가져온 일부분으로 UART 통신을 통해서 사용자가 A5,20을 배열에 담아 요청 패킷을 보내면
RPLidar는 응답 패킷으로서 응답 설명자에 나온 배열처럼 길이가 7(7 Byte)인 배열에 담아서 응답을 주게 되며, 응답 설명자가 보내는 배열에 담긴 값은 고정된 값이므로 올바르게 왔는지 체크해줘야한다.
그리고 Data Response라는 배열이 위의 그림과 같은 형태로 실제 측정된 데이터들을 담아서 계속해서 전송이 된다.
아래의 그림처럼 보통 라이다 데이터 값은 1바이트에 다 담기지 않고, 2바이트 또는 3바이트 단위로 한 개의 데이터를 구성하게 된다.
이렇게 기본적으로 구성될 수 있는데 이것을 아래 그림처럼 0 ~ 90도 / 90 ~ 180도 / 180 ~ 270도 / 270 ~ 360도 로 구간을 나눠서 각각의 배열에 나눠서 데이터를 담아 줄 수도 있다.
그리고 받은 데이터를 아래의 각각의 라이다마다의 CheckSum 검사 공식에 맞게 검사를 한 최종 결과 값이 맨 마지막에 들어오는 CheckSum 바이트에 담긴 값과 일치해야지 제대로 측정된 데이터라는 것을 알 수 있다.
RPLidar의 경우 CheckSum 공식이 아래 그림과 같으므로 담겨서 온 배열의 마지막 인덱스를 제외하고 XOR 연산을 한 결과 값이 Checksum 인덱스의 값과 일치 해야 제대로 측정된 데이터이다.
<구동 영상>
=> 동아리 방에서 남아있는 라이다를 가지고 코드를 짜서 실행으나 관리가 잘 안된 상태여서 거리, 각도 값을 받기는 했지만 연결 불량 등 기기에 문제가 생겨서 값이 잘 들어올때가 있고, 안 들어 올때가 있었다.
=> 그리고 이 파일을 실행시킬때 10으로 나눠서 cm의 형태로 데이터를 받고 있었다. => 기본 단위는 mm이다.