SLAM์ด๋?
- Simultaneous localization and mapping์ ์ฝ์๋ก, ๋ก๋ด์ด ์ค์ค๋ก ์์น ์ถ์ (localization)๊ณผ ์ฃผ๋ณ ํ๊ฒฝ์ ๋ํ ์ง๋ ์์ฑ(Mapping)์ ๋์์ ํ๋ ๊ธฐ์ ์ด๋ค.
- ๋ก๋ด์ด ๋ค์ํ ์ผ์๋ฅผ ํตํด์ ์ฃผ๋ณ ๊ณต๊ฐ์ ์ง๋ํ์ํจ ํ, ์์ฑ๋ ์ง๋์ ์ผ์๋ก ์ป์ด ๋ธ ๊ณต๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์ค์ค๋ก ๋ก๋ด์ ์ด๋ ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- SLAM์ ํ์ํ ์ผ์ ์ ๋ณด์ ๋ก๋ด์ ์์น ์ ๋ณด์ธ ์ค๋๋ฉํธ๋ฆฌ ์ ๋ณด๊ฐ ํ์ํ๋ค.
omo_r1mini ํจํค์ง ์ค์นํ๊ธฐ
- omo_r1mini์ read.md๋ฅผ ํตํด์ ๊ด๋ จ ํจํค์ง๋ฅผ ์ค์นํ ์ ์๋ค.
- omorobot ๊ณต์ ํํ์ด์ง์์๋ ์ค์น ๋ฐฉ๋ฒ์ ์๋ดํด์ฃผ๊ณ ์๋ค.
- ์ค์น ์ดํ์ ๊ด๋ จ ํจํค์ง๋ฅผ ํ๊ฒฝ๋ณ์์ ๋ฑ๋กํ๋ ๊ฒ์ด ๋ฐ๋ชจ ์คํํ๋๋ฐ ํธ๋ฆฌํ๋ค.
omo_r1mini ํจํค์ง ์คํํ๊ธฐ
- SLAM์ Mapping ์ดํ์ Navigation์ ์งํํ๋๋ฐ, ์ด๋ Cartographer๋ฅผ ํ์ฉํ๊ณ ์๋ค.
- Cartographer๋ ๋ก๋ด์ odemetry(์ฃผํ ๊ฑฐ๋ฆฌ) ๋ฐ์ดํฐ์ 2D ๋ผ์ด๋ ์ผ์ ๋ฐ์ดํฐ๋ก ๋งคํ๊ณผ ๋ค๋น๊ฒ์ด์ ์ ํ ์ ์๋ ํจํค์ง์ด๋ค.
- Mapping ์์
์ ์ํ ๋ช
๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค. ํฐ๋ฏธ๋์ 4๊ฐ์ ์ฐฝ์ ์ด์ด์, ๋ค์์ ์์๋๋ก ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ค.
ros2 launch omo_r1mini_gazebo omo_r1mini.launch.py # ์๊ฒฉ ๋ก๋ด ์คํ ros2 launch omo_r1mini_cartographer cartographer.launch.py # Cartographer ์คํ ros2 launch omo_r1mini_cartographer cartographer_rviz.launch.py # rviz ์คํ ros2 run omo_r1mini_teleop teleop_keyboard # ์๊ฒฉ ๋ก๋ด ์ ์ด๋ฅผ ์ํ ํค๋ณด๋ ์ ๋ ฅ
- Mapping ์์ ์์ rqt_graph๋ ๋ค์๊ณผ ๊ฐ์ด ํ์๋๋ค.
- Mapping์ด ์๋ฃ๋๋ฉด ๋ค์์ ๋ช
๋ น์ด๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
ros2 run nav2_map_server map_saver_cli -f map
- Navigation์ ์ํ ๋
ธ๋๋ฅผ ์คํํ๋ค. ์ด ์ญ์๋ ํฐ๋ฏธ๋์ 2๊ฐ์ ์ฐฝ์ ์ด์ด์, ๋ค์์ ์์๋๋ก ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ค.
ros2 launch omo_r1mini_navigation2 navigation2.launch.py map:=$HOME/map.yaml ros2 launch omo_r1mini_navigation2 navigation2_rviz.launch.py
- Navigation ์์ ์์ rqt_graph๋ ๋ค์๊ณผ ๊ฐ์ด ํ์๋๋ค.
์คํ ๊ณผ์
- ๋ค์๊ณผ ๊ฐ์ด 4๊ฐ์ ํฐ๋ฏธ๋๋ก ๋๋ ์ ์คํํ์๋ค.
- ์๊ฒฉ ๋ก๋ด์ ์๋์ ์ด๋ฏธ์ง์ ๊ฐ์ด ํ์ธํ ์ ์๋ค.
- Mapping์ ์งํํ๋ ๊ณผ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํ๋๋ค.
- Mapping์ด ์๋ฃ๋ ์ง๋ ๋ฐ์ดํฐ๋ ๋ค์์ ํํ๋ก ์ ์ฅ๋๋ค.
- Navigationํ ๋ 2D Pose Estimate๋ก ์๊ฒฉ ๋ก๋ด์ด ์๋ ์์น๋ฅผ ์ง์ ํ๊ณ Navigation2 Goal๋ก ์ํ๋ ๊ณณ์ ์ง์ ํ๋ฉด, ๋นจ๊ฐ ์ ๊ณผ ๊ฐ์ด ์ค์ค๋ก ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํ์ฌ ์ด๋ํ๋ค.
๊ฒฐ๊ณผ๋ฌผ
- SLAM ์ ์ฒด ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ด ๋ นํํ์๋ค.