Frenz AI로봇랩에서 진행한 AI로봇랩 2기 4강 내용입니다.
3강: https://keep-steady.tistory.com/46
내용
- Lidar SLAM at JetsonNano with ROS2 (ROS2를 이용하여 JetsonNano에서 라이다 SLAM)
참고
- 블로그: https://omorobot.com/docs/slam-%ed%95%98%ea%b8%b0-mapping/
- 참고 영상: https://www.youtube.com/watch?v=fYa7R2koXPs&t=13shttps://omorobot.com/docs/ros2-teleop-%eb%aa%85%eb%a0%b9%ec%9c%bc%eb%a1%9c-%ec%a1%b0%ec%a2%85%ed%95%98%ea%b8%b0/
1) SLAM mapping으로 맵 생성
- 로봇을 원격으로 조종하며 지도 그린다.
- 2D YD라이다로 2차원 맵을 생성하고, 만들어진 맵을 가지고 주행하려 한다.
- 우선 주행하며 맵을 생성해 보자.
- R1mini의 ROS2 패키지는 Cartographer ROS 패키지 기반으로 개발되었다.
- Cartographer는 로봇의 Odometry 데이터와 2D 라이다 센서 데이터를 이용하여 맵핑과 내비게이션 수행한다.
2) Cartographer SLAM을 위한 노드 실행
- 4개의 터미널을 열고 2개는 각각 ssh로 r1mini에 (ip가 192.168.0.1인 경우) 접속, 나머지 2개는 PC에서 각각 수행한다
2.1) Terminal 1 (Omorobot)
- 원격PC에서 SSH를 이용해 r1mini(Omorobot)에 접속한 후 실행
- Omorobot을 구동하기 위한 bringup node를 실행
(terminal 1) >> ssh r1mini@<<로봇IP>>
ex) ssh@r1mini@192.168.0.1 # IP가 192.168.0.1인 경우
(terminal 1) >> ros2 launch omo_r1mini_bringup omo_r1mini_bringup.launch.py # bringup node
2.2) Terminal 2 (Omorobot)
- 원격PC에서 SSH를 이용해 r1mini(Omorobot)에 접속한 후 실행
- Omorobot이 Cartographer SLAM을 수행하도록 cartographer 노드를 실행
(terminal 2) >> ssh r1mini@<<로봇IP>>
ex) ssh r1mini@192.168.0.1 # 로봇의 IP가 192.168.0.1인 경우
(terminal 2) >> ros2 launch omo_r1mini_cartographer cartographer.launch.py
2.3) Terminal 3 (원격PC)
- 원격 PC에서 Omorobot을 키보드로 제어(teleop keyboard) 하기 위하여 아래 명령어를 입력한다.
(terminal 3) >> ros2 run omo_r1mini_teleop teleop_keyboard
2.4) Terminal 4 (원격 PC)
- 원격 PC에서 Omorobot의 주행을 실시간 가시화하기 위해 RVIZ 시뮬레이터를 연다
(terminal 4) >> ros2 launch omo_r1mini_cartographer cartographer_rviz.launch.py # rviz를 실행
- PC에서 rviz가 뜨며 아래와 같이 나오는지 확인
- 방화벽은 public/private 모두 허용 체크
3) 로봇을 원격으로 조종하며 지도 그리기
- 2) 과정에서 4개의 터미널을 열고 각각 로봇과 원격 PC의 설정을 마쳤다. 그럼 (terminal 3)에 커서를 눌러서 원격PC의 키보드로 teleop keyboard 명령으로 로봇을 제어할 수 있다
- 이때 키보드로 앞뒤좌우(w, x, a, d)를 눌러 로봇을 천천히 주행한다
- 장애물에 없고, 움직이는 물체가 없는 곳에서 천천히 2~3바퀴 돌며 지도를 그린 후 정지(s)를 눌러 로봇을 멈춘다
- 'Loop closure'를 통해 에러를 잡기 위해 한 바퀴를 돌아 제자리로 돌아오도록 주행한다
- Ctrl-c를 이용하여 terminal 3을 정지한다
- 동영상을 보며 따라 하자, https://youtu.be/fYa7R2koXPs
4) 맵 저장 및 ~.yaml 파일 생성
- 3)의 과정을 수행하면 로봇이 주행한 주변 환경의 지도를 만들 수 있다.
4.1) 지도 생성
- 아래 명령어를 통해 맵을 생성 한다. <<지도 이름>>에는 맵의 저장 이름을 설정한다. 'map'으로 설정하면 map 이름으로 지도와 yaml파일이 생성된다.
1. (terminal 1, r1mini) >> cd ~/ros2_ws # 저장하고자 하는 clear경로로 이동
2. (terminal 1, r1mini) >> ros2 run nav2_map_server map_saver_cli -f <<지도 이름>>> 명령어로 지도를 저장한다. 여기서 <<지도 이름>>은 사용자가 저장하고자 하는 맵의 이름이다.
ex) >> ros2 run nav2_map_server map_saver_cli -f map # map을 지도의 이름으로 하는 경우
4.2) 생성된 맵 확인
아래 명령어를 통해 맵이 원하는 저장 경로에 생성되었는지 확인한다. '~.pgm' 파일과 '~.yaml'파일이 생성되면 성공~!
>> ls # map.pgm 그림파일과 map.yaml이 생성되었는지 확인한다
5) SLAM Navigation 실행
- 앞의 SLAM Mapping 과정을 통해 만들어진 지도를 기반으로 자율주행
- teleop keyboard 노드 대신 navigation의 목표 위치를 지정하여 이동
- 참고
5.1) Terminal 1 (Omorobot)
- Omorobot을 동작시키기 위한 bringup 노드 실행
(terminal 1) >> ssh r1mini@192.168.0.1 # IP가 192.168.0.1인 경우
(terminal 1) >> ros2 launch omo_r1mini_bringup omo_r1mini_bringup.launch.py # bringup node
5.2) Terminal 2 (Omorobot)
내비게이션 수행 노드 실행, 앞서 제작한 지도 경로를 입력한다
navigation2.launch.py파일을 사용. 앞서 제작한 지도(map.yaml)를 사용하도록 지정
(terminal 2) >> ssh r1mini@192.168.144.192
(terminal 2) >> ros2 launch omo_r1mini_navigation2 navigation2.launch.py map:=map.yaml # navigation2.launch.py파일을 사용. 앞서 제작한 지도(map.yaml)를 사용하도록 지정
5.3) Terminal 3 (원격 PC))
PC에서 rviz를 통해 시각화하고 제어
(terminal 3) >> ros2 launch omo_r1mini_navigation2 navigation2_rviz.launch.py
5.4) RVIZ 창 활용법
- 지도 위에 로봇이 있을 것으로 추정되는 위치와 방향에 가져다 놓기 위해 상단의 메뉴 중 2D Pose Estimate 버튼을 눌러 지도에 클릭 후 드래그해준다.
- 그러면 아래 그림과 같이 로봇의 위치와 함께 주변 장애물들이 표시가 된다.
- 로봇의 위치가 조금 어긋나더라도 상관없다.
- 주행을 시작하면서 로봇이 알아서 맞추게 된다.
- 이제 상단 메뉴에서 Navigation Goal 버튼을 눌러 로봇이 이동하고자 하는 목적지를 누르면 로봇이 스스로 길을 찾아 이동한다!
우와. 로봇이 처음 가본 장소에서 지도도 만들고 자율주행도 하네요!
끝~!
'AI로봇 > ROS2+SLAM' 카테고리의 다른 글
AI로봇랩 5강) Xubuntu 부팅에러 시 dtb 수정방법 at JetsonNano (0) | 2022.03.10 |
---|---|
AI로봇랩 2강) ROS2 on Ubuntu20.04 at JetsonNan (1) | 2022.03.10 |
AI로봇랩 3강) ROS2로 원격 로봇 제어하기 (1) | 2022.03.08 |
AI로봇랩 1강) Windows WSL2에 ROS2 설치하기 (11) | 2022.02.18 |