1. 이론 공부
1부 22장 : ROS2파일시스템
1부 23장 : 빌드툴 사용법
1부 24장 : 패키지 작성법(사용할 라이브러리 관련 내용을 추가하는 방법을 공부할것)
2부 3장 : 퍼블리시, 서브스크라이브 노드작성
1부 11~16장 : 토픽, 서비스, 액션, 파라미터 기본개념
2부 12~16장 : 토픽, 서비스, 액션, 파라미터 프로그래밍
라이다(LIDAR/LiDAR, light detection and ranging)
레이저 펄스를 쏘고 반사되어 돌아오는 시간을 측정하여 반사체의 위치좌표를 측정하는 레이다 시스템이다.
https://namu.wiki/w/%EB%9D%BC%EC%9D%B4%EB%8B%A4
RPLIDAR
제조사 홈페이지 :https://www.slamtec.com/en/Lidar/A1
github: https://github.com/Slamtec/rplidar_ros.git
rpLidar ROS wiki : http://wiki.ros.org/rplidar
튜토리얼 : https://github.com/robopeak/rplidar_ros/wiki
레이저 센서가 시계방향으로 회전하면서 일정각도 단위로 장애물까지의 거리를 측정함
각도 theta가 -180~+180도까지 변하면서 각도 theta에서 거리 d를 측정하여 저장한다.
최대 12m까지 측정가능, 초당 2~10 회전 가능하다.
전원은 USB 포트로부터 5V전원을 공급받는다.
인터페이스는 usb2serial 방식을 지원
*주의사항 : 레이저가 눈에 닿지 않도록 조심할것, 파워가 약하여 인체에는 무해하나 눈은 조심할것
2. rplidar 패키지 실습
패키지를 새로 작성하는 방법도 알아야하지만 깃허브에는 이미 수많은 패키지들이 존재한다.
따라서 이번에는 깃허브에 있는 패키지를 내려받아 빌드해서 실행해보고 새로운 기능을 추가하는 방법을 공부해본다.
이번 실습은 리눅스에서 진행한다.
(1) 깃허브에서 rpLidar 패키지 다운로드
master 브랜치는 ROS1용이므로 ROS2용인 ros2 브랜치를 내려받아야 함
git clone 명령어는 현재 작업디렉토리에 다운로드 받은 것을 저장한다.
따라서 ros2_w2/src/ 디렉토리로 이동후 다운로드해야함
$ cd ~/ros2_w2/src/
$ git clone -b ros2 https://github.com/slamtec/rplidar_ros.git
다운로드하면 src 디렉토리아래에 깃파일명과 같은 이름의 rplidar_ros 라는 디렉토리가 생성된다.
ros2 브랜치를 다운로드하면 package.xml 파일안에 패키지명이 rplidar_ros2으로 설정되어 있으므로 패키지 디렉토리명도 rplidar_ros2로 변경해야함 -> 패키지 디렉토리명은 패키지명과 같아야 한다.
$ cd ~/ros2_w2/src/
$ mv rplidar_ros rplidar_ros2 -> 디렉토리명 변경 명령어 mv 사용
기존의 패키지 디렉토리보다 복잡하다. 각 디렉토리의 의미는 나중에 공부하겠다.
빌드설정파일, 패키지설정파일, src디렉토리는 일반 패키지와 동일한다.
(2) 패키지 빌드
$ cd ~/ros2_ws -> 빌드명령어를 실행하는 위치 주의할 것, src 디렉토리가 아님
$ colcon build --symlink-install --packages-select rplidar_ros2
(3) 패키지 실행
Jetson nano의 USB포트에 rpLidar를 연결한다.
라이다센서에 전원이 공급되면 바로 회전한다.
$ ls /dev/ttyUSB* -> 장치인식확인
$ sudo chmod a+rw /dev/ttyUSB0 -> 접근권한 설정
$ source ~/ros2_ws/install/setup.bash -> 실행파일 환경설정
$ ros2 run rplidar_ros2 rplidar_scan_publisher -> 라이다센서의 측정데이터를 /scan 토픽으로 퍼블리시하는 노드 실행
새로운 터미널을 열고 다음을 실행한다.
$ ros2 topic list -> 토픽리스트에서 /scan 확인
$ ros2 topic hz /scan -> 토픽을 전송하는 초당횟수(hz) 확인
$ ros2 topic hz /scan -> 토픽을 전송데이터량 확인
$ ros2 run rviz2 rviz2 -> 라이다의 측정데이터를 서브스크라이브하여 3차원공간에 시각화 해주는 rviz2 실행
Rviz는 PC의 Xserver에서 실행된다. 초기화면에서 좌측하단의 Add 버튼 클릭
By topic 탭클릭하여 /scan-> LaserScan 선택 후 좌측하단 OK버튼 클릭
좌측 Displays -> Global Options -> Fixed Frame -> laser_frame 입력
좌측 Displays -> LaserScan -> Topic -> Reliability Policy -> System Default으로 변경
좌측 Displays -> LaserScan -> Size(m) -> 0.02으로 변경
가운데점이 원점이고 좌하향축이 X축이고 우하향축이 Y축임 그리드 한칸이 1m단위임
원점에 라이다 중심점이 위치한다고 생각하고 화면의 X축,Y축과 라이다센서의 X,Y축을 일치시키고 측정데이터를 해석하라
라이다의 좌표축을 참고하여 거리 측정결과를 검증해볼것
(4) rplidar_scan_subscriber 노드 작성
이번에는 Rviz를 사용하지 않고 토픽데이터를 수신하여 화면에 출력해주는 섭스크라이브 노드를 직접 작성하여보다
소스코드작성
빌드설정파일작성 -> 섭스크라이브 노드 추가
패키지 빌드
$ cd ~/ros2_ws -> 빌드명령어를 실행하는 위치 주의할 것, src 디렉토리가 아님
$ colcon build --symlink-install --packages-select rplidar_ros2
패키지 실행 -> rplidar_scan_publisher 노드가 실행 상태이어야 함
$ source ~/ros2_ws/install/setup.bash -> 실행파일 환경설정
$ ros2 run rplidar_ros2 rplidar_scan_subscriber -> 라이다센서의 /scan 토픽을 섭스크라이브하는 노드 실행
데이터 해석 : [각도, 거리]
각도는 아래 그림처럼 X축방향을 기준으로 반시계방향으로 0~+180도까지 시계방향으로 0~-180도까지 범위를 가짐
거리는 물체와의 거리를 의미하고 단위는 meter임
inf는 거리가 무한대이므로 반사파가 없다는 것을 의미
3. 실습과제
(1) 라이다 스캔 데이터를 전송시 사용하는 토픽 메시지 인터페이스인 sensor_msgs::msg::LaserScan에 대하여 조사하라.
(2) 아래 물음에 답하여라
- 극좌표계와 직교좌표계를 각각 설명하시오.
- 직교좌표계 (x,y)를 극좌표계(theta, r)으로 변환하는 공식을 유도하시오.
- 극좌표계(theta, r)를 직교좌표계 (x,y)로 변환하는 공식을 유도하시오.
(3) 다음 설명대로 패키지를 작성하시오.
Jetson nano
- Lidar 출력데이터를 퍼블리시하는 노드실행, rplidar_ros2 패키지 사용하면됨
- 다이나믹셀 명령을 수신하여 제어하는 섭스크라이브노드작성
PC
- Lidar 출력데이터를 서브스크라이브하여 영상으로 그려주는 노드 작성(Rviz 사용하지 말고 opencv를 이용하여 직접 그릴것),
- 사용자의 키보드로 조정하는 선속도, 각속도 명령을 받아서 전송하는 퍼블리시 노드(이전의 다이나믹셀 패키지 활용할것)
키보드로 로봇을 조정하면서 연구실 실내를 회전하고 라이다 영상을 동영상으로 저장하시오.
지난 과제에서 만든 카메라 패키지를 이용하여 카메라를 영상을 보면서 조종하도록 할것
ROS의 패키지는 모두 독립적으로 실행이 가능하므로 필요한 패키지를 소스코드 수정없이 그냥 실행하면 됨
다이나믹셀제어 패키지는 지난 과제를 그대로 실행만 해주면 됨
라이다와 다이나믹셀은 모두 usb포트를 이용하므로 소스코드의 초기화부분에서 장치명을 수정해줘야한다.
현재는 모두 /dev/ttyUSB0 으로 설정되어 있다.
참고자료 : ROS1용 소스 https://github.com/Slamtec/rplidar_ros/tree/master/src
힌트 : 출력영상의 중앙점을 라이다의 중심으로 보고 라이다의 좌표축과 동일하게 X,Y축을 정의하고 라이다의 scan데이터 [각도,거리]에 원을 그려준다.
위의 설계내용대로 PC에서 필요한 패키지를 작성하시오.(2부 3장의 예제형식으로 작성할것)
실험할때 윈도우즈와 리눅스 컴퓨터가 같은 네트워크에 연결되어 있어야한다.
패키지 코드, 라인단위설명, 실행결과(동영상), 패키지설정파일, 빌드설정파일 첨부
동영상을 저장할때 Rviz출력결과와 패키지의 출력영상을 비교할수 있도록 저장하시오.
패키지 소스코드전체를 깃허브에 올리세요
(4) 한번에 전송되는 라이다센서 데이터의 크기는 얼마인가?
라이다 데이터의 전송주기는 얼마인가?
한번에 전송된느 라이다와 카메라 데이터의 크기와 비교하시오.
첫댓글 https://github.com/Slamtec/sllidar_ros2
rplidar A1 사용시 baudrate 115200으로 변경