๐ก ๋ณธ ๋ฌธ์๋ ROS2 Navigation Stack์ธ 'Nav2'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
๋ณธ๊ฒฉ์ ์ผ๋ก Nav2์ ๊ตฌ์ฑ์ ๋ํด์ ํ๋์ฉ ์ดํด๋ณด๊ธฐ ์์ Nav2์ ์ฃผ์ ๊ฐ๋ ๋ค์ ๋ํด์ ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
ROS1 Navigation (Move Base)
ROS2 Navigation (Nav2)
ROS2
Action Server(์ก์ ์๋ฒ)
์ก์ ์๋ฒ๋ ๋ค๋น๊ฒ์ด์ (Navigation)๊ณผ ๊ฐ์ด ๊ธด ์์ ์ ์ํํ๋ ๋ก๋ด ๋์์ ์ ์ดํ๋ ํต์ฌ ๊ฐ๋ ์ ๋๋ค. ์ฅ์๊ฐ ์์ ์ํฉ์์ ์ก์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ค๋ ๋์์ ์ฅ๊ธฐ๊ฐ ์คํ๋๋ ์์ ์์ฒญ์ ์๋ฝํ๊ณ ์คํ์ด ์๋ฃ๋๋ฉด ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ฉฐ ํด๋น ์ํ๋ฅผ ์ข ๋ฃํฉ๋๋ค.
์์ ์ด ์๋ฃ๋ ๋๊น์ง ์์ ์ฑ์ ์ํด ์ก์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ feedback์ ์ ๊ณตํ๋๋ฐ, ์ด๋ ๋ชฉํ ์ง์ ๊น์ง์ ๊ฐ๋, ์ฑ๊ณต ์ฌ๋ถ ๋ฑ์ด ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ํผ๋๋ฐฑ๊ณผ ์ต์ข ๊ฒฐ๊ณผ๋ ํด๋ผ์ด์ธํธ์ callback์ ๋ฑ๋กํจ์ผ๋ก์จ ๋์์ ์ป์ ์ ์์ต๋๋ค.
Nav2์์ ์ก์ ์๋ฒ๋ NavigateToPose ์ก์ ๋ฉ์์ง๋ฅผ ํตํด ์ต์์ BT(ํ๋ ํธ๋ฆฌ) ๋ด๋น๊ฒ์ดํฐ์ ํต์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ BT Navigator๊ฐ ์ฐจํ ์์ ์ก์ ์๋ฒ๋ค๊ณผ ํต์ ํ์ฌ, plan์ ๊ณ์ฐํ๊ณ , ๋์์ ์ด ๋ฐ ๋ณต๊ตฌ๋ฅผ ์ํํ๋๋ฐ๋ ์ฌ์ฉ๋ฉ๋๋ค.
๋ค๋น๊ฒ์ด์ ์์ ์ ์ํํ๋ ์ก์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ ์๋ก ์ก์ ๋ฉ์์ง ํ์ ์ ํตํด ํจ์จ์ ์ผ๋ก ์์ ์ ์์ฒญํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ฐ ์ด๋ ์ฌ์ฉ๋๋ ์ฌ๋ฌ๊ฐ์ง ์ก์ ํ์ ์ nav2_msgs/action ๋ค์์คํ์ด์ค ์๋์ ์ ์๋์ด ์์ผ๋ฉฐ, ๋ค๋น๊ฒ์ด์ ์์ ์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ๋ค์ํ ์ก์ ํ์ ์ด ์กด์ฌํฉ๋๋ค.
์๋ฅผ ๋ค์ด "NavigateToPose" ์ก์ ์ ๋ก๋ด์ ํน์ ์์น๋ก ์ด๋์ํค๋ ์์ ์ ์ํํ๋ ์ก์ ์ธ๋ฐ, ํด๋น ์ก์ ์ nav2_msgs/action/NavigateToPose ๋ฉ์์ง ํ์ ์ ์ฌ์ฉํ๋ฉฐ, ์ด ์ก์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ ์ด ๋ฉ์์ง ํ์ ์ ํตํด ์์ ์ ์์ฒญํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฃผ๊ณ ๋ฐ์ต๋๋ค.
Lifecycle nodes and bond(์๋ช ์ฃผ๊ธฐ ๋ ธ๋์ ๋ณธ๋)
Lifecycle node๋ ROS 2์์ ๋ ธ๋(Node)์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฐ๋ ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ ธ๋์ ์ด๊ธฐํ, ํ์ฑํ, ์ผ์ ์ค์ง, ์ข ๋ฃ ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ์ํ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค.
๋ ธ๋๊ฐ ์ฒ์ ์์๋๋ฉด unconfigured ์ํ์ด๋ฉฐ, ROS ๋คํธ์ํฌ ์ค์ ์ด๋ parameter๋ฅผ ์ฝ๋ ๊ฒ์ ํฌํจํ์ง ์๋ ๋จ์ node ์์ฑ์๋ง ์ฒ๋ฆฌํฉ๋๋ค. ์ดํ launch ์์คํ ์ด๋ ์ ๊ณต๋ lifecycle manager์ ์ํด ๋ ธ๋๋ค์ configuration์ ํตํด inactive ์ํ๋ก ์ ํํด์ผ ํฉ๋๋ค. ๊ทธ ํ activing ๋จ๊ณ๋ก ์ ํํ๋ฉด์ node๊ฐ ๋น๋ก์ activate ๋ ์ ์์ต๋๋ค.
์ด ๋ configure(๋ ธ๋๋ฅผ ์์ฑํ ๋ ํ์ํ ์ํ), activate(๋ ธ๋๊ฐ ์คํ๋ ๋ ํ์ํ ์ํ), deactive(๋ ธ๋๊ฐ ์ค์ง ๋ ๋ ํ์ํ ์ํ) ๋ฑ๊ณผ ๊ฐ์ ๋ ธ๋์ ์ํ๋ฅผ Lifecycle์ด ๊ด๋ฆฌํ๋ ๊ฒ์ด์ฃ .
configuration ๋จ๊ณ์์๋ on_configure() ํจ์๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ฌ ๋ชจ๋ ํ๋ผ๋ฏธํฐ, ROS ๋คํธ์ํน ์ธํฐํ์ด์ค, ์์ ์์คํ
์ ๊ฒฝ์ฐ ๋์ ์ผ๋ก ํ ๋น๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค. ํ์ฑํ ๋จ๊ณ์์๋ on_activate() ํจ์๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ฌ ROS ๋คํธ์ํน ์ธํฐํ์ด์ค๋ฅผ ํ์ฑํํ๊ณ ํ๋ก๊ทธ๋จ์์ ์ ๋ณด ์ฒ๋ฆฌ๋ฅผ ์์ํ๋๋ก ๋ชจ๋ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.
๋
ธ๋๊ฐ ์ข
๋ฃ๋ ๋๋ ์ต์ข
์ํ์์ deactivating, cleaning up, shutting down ๊ทธ๋ฆฌ๊ณ end ์ํ๋ก ๊ฐ๊ฐ ์ ํ๋ฉ๋๋ค. ๊ฐ ๋จ๊ณ์์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ๋นํ์ฑํ๋๊ณ , ํ๋ก์ธ์ค ์ข
๋ฃ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํด์ ๊ฐ ์คํ๋ฉ๋๋ค.
์ด๋ ๊ฒ Lifecycle node๋ ์ ์๋ lifecycle ์ํ์ ๋ฐ๋ผ ์ ์ ํ ๋์์ ์ํํ ์ ์๋๋ก ์ค๊ณ๋๋ฉฐ, ๋ก๋ด ๋ฐ ์์คํ ์ ์ ์ด ๋ฐ ์ด์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค.
๋ชจ๋ ROS ์์คํ ์ ๊ฐ๋ฅํ๋ฉด ์ด lifecycle ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ฉฐ Nav2๋ ๋ชจ๋ ์๋ฒ์์ lifecycle node framework์ ํ์ฉํ ๋งํผ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
Nav2์์๋ LifecycleNodes์ wrapper์ธ nav2_util LifecycleNode๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด wrapper๋ ์ผ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด LifecycleNodes์ ๋ณต์กํ ๋ถ๋ถ์ ๋๋ถ๋ถ ๋ํํฉ๋๋ค. ๋ํ ์๋ฒ๊ฐ ์ ํ๋ ํ์๋ active ์ํ๋ฅผ ์ ์งํ ์ ์๋๋ก lifecycle manager๋ฅผ ์ํ bond ์ฐ๊ฒฐ๋ ํฌํจ๋์ด ์์ต๋๋ค. ๋ง์ฝ ์๋ฒ๊ฐ ์ถฉ๋ํ๋ ๊ฒฝ์ฐ lifecycle manager์๊ฒ ์ด๋ฅผ ์๋ฆฌ๊ณ ์์คํ ์ ๋ค์ด์์ผ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
Nav2์ lifecycle manager๋ navigation stack์ startup, shutdown, reset, pause, resume์ ์ ์ดํ๊ธฐ ์ํด lifecycle node์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํน์ navigation stack์์ ์์ฒญ๋ ์ ์ด๋ฅผ ์ํํ๊ธฐ ์ํด์ lifecycle manager๊ฐ lifecycle์ด ํ์ฑํ๋ ๋ ธ๋(lifecycle์ ์ด์ฉํด ๊ด๋ฆฌํ ์ ์๋ ๋ ธ๋)๋ค์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด์ฃ . Lifecycle manager๋ ํด๋ผ์ด์ธํธ๊ฐ startup, shutdown, reset, pause, resume ๊ธฐ๋ฅ์ ํธ์ถํ ์ ์๋ lifecycle_manager/manage_nodes ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด RVIZ์ ์ํด lifecycle manager์ manage_nodes service๋ก๋ถํฐ startup์ด ์์ฒญ๋๋ฉด lifecycle managers๋ ๋ ธ๋ ๋ชฉ๋ก์์ lifecycle์ด ํ์ฑํ๋ ๋ ธ๋๋ค(Node A, Node B, Node C)์ ๋ํด configure()๊ณผ activate() ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋ฉ๋๋ค.
Behavior Tree(ํ๋ ํธ๋ฆฌ)
์ด์ ROS1์์์ move base์ ๋น๊ตํด ๊ฐ์ฅ ํฌ๊ฒ ๋ฌ๋ผ์ง ์ ์ด ๋ฐ๋ก Behavior Tree ๋ถ๋ถ์ ๋๋ค. ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด Behavior Tree๋ Tree ๊ตฌ์กฐ๋ก ์ฌ๋ฌ Node๋ค์ด ๋๋ฌด ๊ฐ์ง์ฒ๋ผ ์ฐ๊ฒฐ๋ ๊ณ์ธต์ ์๋ฃ ๊ตฌ์กฐ์ ๋๋ค.
ํธ๋ฆฌ์ ์ผ์ชฝ๋ถํฐ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ํ๋ฉฐ ์๋ก ์์กด์ฑ์ด ์๋ ๋ ธ๋๋ค์ด ์คํ๋๋ ํํ์ ๋๋ค. ์ด๋ ์์ญ ๊ฐ์ state์ ์๋ฐฑ ๊ฐ์ transition์ ๊ฐ์ง ์ ์๋ FSM๊ณผ๋ ๋ฐ๋๋๋ ๊ฐ๋ ์ ๋๋ค.
์ถ๊ตฌ๋ฅผ ํ๋ ๋ก๋ด์ ๋ง๋ ๋ค๊ณ ํ ๋ Behavior Tree๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ์ด ์์์ ๊ฐ์ 'ํฅ', '๊ฑท๊ธฐ', '๊ณต์ผ๋ก ์ด๋'๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ์์๋ฅผ ์์ฑํ์ฌ ๋ค์ํ ๋์์ ์ฌ์ฌ์ฉํ๋ฉด์ ๋ณต์กํ ์์คํ ์ ๋ณด๋ค ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
Nav2์์๋ Behavior Tree library๋ก BehaviorTree CPP V3๋ฅผ ์ฌ์ฉํฉ๋๋ค. Nav2๋ ์ด library์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ node๋ค๋ ์ฌ์ฉํ์ง๋ง ๋๋ถ๋ถ ์์ฒด์ ์ผ๋ก ๋ง๋ ์ ์ฉ custom node๋ฅผ ์ฌ์ฉํด Behavior Tree๋ฅผ ๊ตฌ์ถํ์ต๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด ์ง์ custom node plugin์ ๋ง๋ค์ด ์๋ก์ด Behavior Tree ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์๋ ์์ต๋๋ค. ๋ง๋ค์ด์ค node plugin์ bt_factory์ nav2_tree_node.xml์ ๋ฑ๋ก๋ง ํด์ฃผ๋ฉด Behavior Tree ๊ตฌ์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Navigation Servers
Planner, Controller, Smoother and Recovery Servers
Nav2์ ๋ค ๊ฐ์ง ์ก์ ์๋ฒ๋ Planner, Controller, Smoother ๊ทธ๋ฆฌ๊ณ Recovery Server์ ๋๋ค. ์ด๋ฌํ ์ก์ ์๋ฒ๋ ๋ค์ํ ์์ ์ ์๋ฃํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ ํ๋ฌ๊ทธ์ธ์ ๋งต ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ๊ณตํ๋๋ฐ ์ฌ์ฉ๋๋ฉฐ, ์๊ณ ๋ฆฌ์ฆ ํ๋ฌ๊ทธ์ธ์ด ์ถ๋ ฅ์ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉํ๋ ํ๊ฒฝ ์ ๋ณด(๋งต ๋ฐ์ดํฐ, ์ฅ์ ๋ฌผ ์์น, ๋ชฉํ ์ง์ , ๋ก๋ด์ ์ํ ๋ฑ)๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
Planner, Controller ๊ทธ๋ฆฌ๊ณ Smoother ์๋ฒ๋ ๋ฐํ์์ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ names๊ณผ types๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. types๋ ๋ฑ๋ก๋ ํ๋ฌ๊ทธ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ ๋งํ๋ฉฐ names๋ ์์
์ ๋ณ์นญ์ ๋ปํฉ๋๋ค. ์ค์ ๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ FollowPath๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ๋๋ DWB ์ปจํธ๋กค๋ฌ๋ฅผ ์๋ก ๋ค ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ DWB์ ๋ํ ๋ชจ๋ ๋งค๊ฐ๋ณ์(parameter)๋ ํด๋น ๋ค์์คํ์ด์ค์ ๋ฐฐ์น๋ฉ๋๋ค(์: FollowPath.<param>).
Behavior Tree๊ฐ ํด๋น BT ๋
ธ๋๋ฅผ ์ ํํ๋ฉด action server๋ฅผ ํธ์ถํ์ฌ ํด๋น ์์
์ ์ฒ๋ฆฌํฉ๋๋ค. ์๋ฒ ๋ด๋ถ์ action server callback์ ํน์ ์๊ณ ๋ฆฌ์ฆ์ ๋งคํ๋๋ ์ด๋ฆ(์: FollowPath)์ผ๋ก ์ ํํ ์๊ณ ๋ฆฌ์ฆ(DWB๋ RPP ๋ฑ)์ ํธ์ถํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ Behavior Tree์์ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ณ ๋ฆฌ์ฆ ํด๋์ค๋ก ์ถ์ํํ ์ ์๋ ๊ฒ์ด์ฃ .
Planner
Planner์ ์ญํ ์ objective ํจ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ ๋๋ค. Planner๋ ์ด๋ฅผ ์ํด global environmental representation(์ ์ญ ํ๊ฒฝ ํํ - ๋ก๋ด์ด ์ ์ฒด ํ๊ฒฝ์ ํฌ๊ด์ ์ผ๋ก ํํํ ๊ฒ) ๋ฐ ๋ฒํผ์ ์ ์ฅ๋ ์ผ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
Planner๋ ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค:
- ๋ชฉ์ ์ง๊น์ง์ ์ต๋จ ๊ฒฝ๋ก ๊ณ์ฐ
- ์์ ํ coverage path(์ปค๋ฒ๋ฆฌ์ง ๊ฒฝ๋ก - ์ง์ ๋ ์์ญ์ ๋ก๋ด์ด ํจ์จ์ ์ผ๋ก ํ์ํ๊ณ ๋ชจ๋ ์ง์ ์ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ๋ก) ๊ณ์ฐ
- sparse path(ํฌ์ ๊ฒฝ๋ก - ๋ก๋ด์ ์ด๋ ๊ฒฝ๋ก ์ค ๋ฏธ๋ฆฌ ์ ์๋ ๋ช ๊ฐ์ง ์ค์ํ ์ง์ ๋ง์ ํฌํจํ๋ ๊ฒฝ๋ก) ๋๋ predefined routes(๋ฏธ๋ฆฌ ์ ์๋ ๊ฒฝ๋ก)๋ฅผ ๋ฐ๋ผ ๊ฒฝ๋ก ๊ณ์ฐ
Nav2์์ Planner์ ์ผ๋ฐ์ ์ธ ์ญํ ์ ํ์ฌ ์์น์์ ๋ชฉํ ์์น๊น์ง ์ ํจํ๊ณ ์ ์ฌ์ ์ผ๋ก ์ต์ ์ผ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง Planner๋ ์ต์ ๊ฒฝ๋ก ๋ฟ๋ง ์๋๋ผ ๋ก๋ด์ ์์ ์ด๋ ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๋ ๋ค์ํ ๊ณํ๊ณผ ๊ฒฝ๋ก๋ ์ง์ํฉ๋๋ค.
Controller
ROS 1์์ local planner๋ผ๊ณ ๋ถ๋ ธ๋ Controller๋ ์ ์ญ์ ์ผ๋ก ๊ณ์ฐ๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ฅด๊ฑฐ๋ ๋ก์ปฌ ์์ ์ ์๋ฃํ๋ ์ญํ ์ ํฉ๋๋ค. Controller๋ local environmental representation(๋ก์ปฌ ํ๊ฒฝ ํํ - ๋ก๋ด์ด ํ์ฌ ์์น ์ฃผ๋ณ์ ์์ ์์ญ์ ํฌํํ ๊ฒ)์ ์ ๊ทผํ์ฌ ๊ธฐ์ง(base)๊ฐ ๋ฐ๋ผ์ผ ํ ์คํ ๊ฐ๋ฅํ ์ ์ด ํ๋์ ๊ณ์ฐํ๋ ค๊ณ ์๋ํฉ๋๋ค. ๋ง์ Controller๋ ๋ก๋ด์ ๊ณต๊ฐ ์์ผ๋ก ํฌ์ํ๊ณ ๊ฐ ์ ๋ฐ์ดํธ๋ง๋ค ๋ก์ปฌ์์ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํฉ๋๋ค.
Controller๋ ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค:
- ๊ฒฝ๋ก ๋ฐ๋ผ๊ฐ๊ธฐ
- Odometric frame(์ขํ๊ณ)์์์ ๊ฐ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ถฉ์ ์คํ ์ด์ ์ ๋ํนํ๋ ์์
- ์๋ฆฌ๋ฒ ์ดํฐ ํ์น
- ๋๊ตฌ์ ์ํธ์์ฉํ๊ธฐ
Nav2์์ Controller์ ์ผ๋ฐ์ ์ธ ์ญํ ์ global plan์ ๋ฐ๋ฅด๊ธฐ ์ํ ์ ํจํ control ํ๋์ ๊ณ์ฐํ๋ ๊ฒ์ ๋๋ค. ํ์ฌ Nav2์๋ ๋ง์ ์ข ๋ฅ์ Controller์ Local Planner๊ฐ ์กด์ฌํ๊ณ ์ ๋ง๋ค์ ๋ชฉ์ ์ ๋ฐ๋ผ plugin์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
Behaviors
Recovery Behaviors(๋ณต๊ตฌ ๋์)์ ํ๋ ์ด์์ ๊ตฌ์ฑ ์์๊ฐ ๊ณ ์ฅ๋๋ ์์คํ ์ด ์ค๋จ ์์ด ๊ณ์ ์๋ํ ์ ์๋๋ก ํ๋(๋ด๊ฒฐํจ์ฑ ์์คํ ) ์ฃผ์ ์์์ ๋๋ค. Recovery์ ๋ชฉํ๋ ์์คํ ์ ์ ์ ์๊ฑฐ๋ ์๋ชป๋ ์ํ๋ฅผ ๋ค๋ฃจ๊ณ ์ด๋ฌํ ์ํฉ์ ์์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ธ์ ์์คํ ์ ๊ฒฐํจ์ด ๋ฐ์ํ์ฌ ํ๊ฒฝ ํํ์ด ๊ฐ์ง ์ฅ์ ๋ฌผ๋ก ๊ฐ๋ ์ฐจ๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ด ๋ ๋ก๋ด์ Clear Costmap Recovery(์ฝ์คํธ๋งต ๋ณต๊ตฌ)๋ฅผ ํ์ฑํํ์ฌ ๋ก๋ด์ด ์ด๋ํ ์ ์๊ฒ ํด์ค๋๋ค.
๋ ๋ค๋ฅธ ์๋ก๋ ๋์ ์ฅ์ ๋ฌผ์ด๋ ์ ์ด ๋ถ๋์ผ๋ก ์ธํด ๋ก๋ด์ด ๋ฉ์ถ ๊ฒฝ์ฐ๋ฅผ ๋ค ์ ์์ต๋๋ค. ์ด ๋ ๋ก๋ด์ด ํ์งํ๊ฑฐ๋ ์ ์๋ฆฌ์์ ํ์ ํ๋ ๊ฒ์ด ํ์ฉ๋๋ ๊ฒฝ์ฐ, ๋ก๋ด์ด ์ด์ ํ ์์น์์ ์์ ๊ณต๊ฐ์ผ๋ก ์ด๋ํ์ฌ ์ฑ๊ณต์ ์ผ๋ก ํ์ํ ์ ์๋๋ก ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์์ ํ ์คํจํ ๊ฒฝ์ฐ ์ด์์์๊ฒ ๋์์ ์์ฒญํ๊ธฐ ์ํด Recovery Behaviors(๋ณต๊ตฌ ๋์)์ด ๊ตฌํ๋ ์ ์์ต๋๋ค. ์ด ์์ ์ ์ด๋ฉ์ผ, SMS, Slack, Matrix ๋ฑ์ ํตํด ์ด๋ฃจ์ด์ง ์ ์์ต๋๋ค.
Behavior server๋ ๋จ์ํ Recovery Behaviors(๋ณต๊ตฌ ๋์)์ ์คํํ๋ ์ญํ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์ฌ๋ฌ Behavior๋ค์ด ๊ณต์ ํ๋ ๋น์ฉ์ด ํฐ ์์(costmap์ด๋ tf buffer)์ ์ ๊ทผํ๊ณ ํ์ฉํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ก์จ Behavior๋ค์ Recovery ๋ฟ๋ง ์๋๋ผ ๋ค์ํ ์์ ์ ์ํํ๋ฉด์ ํ์ํ ์์์ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
Smoothers
Planner๊ฐ ํ์ํ ๊ฒฝ๋ก์ ์ต์ ์ฑ ๊ธฐ์ค์ด ์ผ๋ฐ์ ์ผ๋ก ํ์ค์ ๋นํด ๋ฎ์ต๋๋ค. ๋ฐ๋ผ์ ๊ฒฝ๋ก์ ์ถ๊ฐ์ ์ธ ๊ฐ์ ์ด ๋์์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ๋ชฉ์ ์ผ๋ก ๋์
๋ Smoother(์ค๋ฌด๋)๋ ์ฃผ๋ก ๊ฒฝ๋ก์ ์ธํ๋ถํํจ์ ๊ฐ์์ํค๊ณ ๊ธ๊ฒฉํ ํ์ ์ ๋ถ๋๋ฝ๊ฒ ํ๋ฉฐ, ๋ํ ์ ์ญ ํ๊ฒฝ ํํ์ ์ก์ธ์คํ์ฌ ์ฅ์ ๋ฌผ ๋ฐ high-cost area(๊ณ ๋น์ฉ ์์ญ)์์ ๋ ๋ฉ๋ฆฌ ์ด๋ํ๋๋ก ํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
Nav2์์ Smoother์ ์ผ๋ฐ์ ์ธ ์ญํ ์ ๊ฒฝ๋ก๋ฅผ ๋ฐ์์ ๊ฐ์ ๋ ๋ฒ์ ์ ๋ฐํํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์
๋ ฅ ๊ฒฝ๋ก๋ง๋ค ๊ฐ์ ๊ธฐ์ค๊ณผ ํด๋น ๊ฐ์ ๋ฐฉ๋ฒ์ด ๋ค์ํ๊ธฐ ๋๋ฌธ์ ์ด ์๋ฒ์ ๋ฑ๋กํ ์ ์๋ ์๋ง์ ์ค๋ฌด๋๋ฅผ ์ํ ๊ณต๊ฐ์ด ์์ฑ๋ฉ๋๋ค.
State Estimation(์ํ ์ถ์ )
Navigation project์๋ community standards์ ๋ฐ๋ผ ์ ๊ณต๋์ด์ผ ํ๋ 2๊ฐ์ง ์ฃผ์ ๋ณํ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ map -> odom ๋ณํ์ positioning system(localization, mapping, SLAM)์ ์ํด ์ ๊ณต๋๋ฉฐ, ๋ ๋ฒ์งธ odom -> base link ๋ณํ์ odometry system์ ์ํด ์ ๊ณต๋ฉ๋๋ค.
โป ์ฐธ๊ณ
Navigation system์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ก๋ด์ ๋ผ์ด๋ค๋ฅผ ์ฌ์ฉํ ํ์๋ ์์ง๋ง Nav2๋ ๋ผ์ด๋ค๋ฅผ ์ด์ฉํ ์ถฉ๋ ํํผ, localization, SLAM์ ์คํํ๊ธฐ ์ํ ์ง์นจ์ ์ ๊ณตํ๋ฉฐ, ์ค์ ๋ก ๊ฒ์ฆ๋ ๊ตฌํ ๋ฐฉ๋ฒ์ ์ง์ํฉ๋๋ค. ๋ฌผ๋ก ์๋์์ ์ค๋ช
ํ Standard๋ง์ ์ค์ํ๋ค๋ฉด vision์ด๋ depth ๊ธฐ๋ฐ ์์น ๊ฒฐ์ ์์คํ
์ ์ฌ์ฉํ๊ณ ์ถฉ๋ ํํผ๋ฅผ ์ํด ๋ค๋ฅธ ์ผ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ์ฑ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
Standards
REP 105๋ Navigation๊ณผ ๋ ํฐ ROS ์์ฝ์์คํ
์ ํ์ํ frame๊ณผ ๊ท์ฝ์ ์ ์ํฉ๋๋ค. ์ด๋ฌํ ๊ท์ฝ์ ์ปค๋ฎค๋ํฐ์์ ์ ๊ณต๋๋ ํ๋ถํ positioning, odometry ๋ฐ SLAM ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ํญ์ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
REP-105๋ฅผ ๊ฐ๋ตํ ์ค๋ช
ํ๋ฉด ์ต์ํ ๋ก๋ด์ ๋ํ ์ ์ฒด map -> odom -> base link -> [sensor frames]์ ํฌํจํ๋ TF ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. TF2๋ ์๊ฐ ๋ณํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ROS 2์์ time synchronized transformations(์๊ฐ๊ณผ ๋๊ธฐํ๋ ๋ณํ)์ ํํํ๊ณ ์ป๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. Global positioning system(์ ์ญ ์์น ๊ฒฐ์ ์์คํ
- ์) GPS, SLAM, Motion Capture)์ ์ต์ํ map -> odom ๋ณํ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ญํ ์ด๋ฉฐ, ๊ทธ๋ฐ ๋ค์ odometry system์ odom -> base_link ๋ณํ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ญํ ์
๋๋ค. base_link์ ๊ด๋ จ๋ ๋๋จธ์ง ๋ณํ์ ์ ์ ์ด์ด์ผ ํ๋ฉฐ URDF์ ์ ์๋์ด์ผ ํฉ๋๋ค.
Global Positioning: Localization and SLAM
์์์ ์ธ๊ธํ๋ฏ์ด ์ต์ํ map -> odom ๋ณํ์ ์ ๊ณตํ๋ ๊ฒ์ด Global positioning system(GPS, SLAM, Motion Capture)์ ์ญํ ์ ๋๋ค. Nav2๋ static map(์ ์ ์ง๋)์์์ localization๋ฅผ ์ํด ํํฐํด ํํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Adaptive Monte-Carlo Localization(์ ์ํ ๋ชฌํ ์นด๋ฅผ๋ก) ๊ธฐ๋ฒ์ธ amcl์ ์ ๊ณตํฉ๋๋ค. ๋ํ ์์น ๊ฒฐ์ ๋ฐ static map(์ ์ ์ง๋)์ ์์ฑ์ ์ํด SLAM Toolbox๋ฅผ ๊ธฐ๋ณธ SLAM ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ๊ณตํฉ๋๋ค.
Odometry
Odometry system์ ์ญํ ์ odom -> base_link ๋ณํ์ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค. Odometry๋ ๋ผ์ด๋(LIDAR), ๋ ์ด๋(RADAR), ๋ฐํด ์์ฝ๋, ์๊ฐ ๊ธฐ๋ฐ ์์น ์ถ์ (VIO), ๊ด์ฑ ์ธก์ ์ฅ์น(IMU) ๋ฑ ๋ค์ํ ๊ณณ์ผ๋ก๋ถํฐ ์ป์ ์ ์์ต๋๋ค. Odometry์ ๋ชฉํ๋ ๋ก๋ด์ ์์ง์์ ๊ธฐ๋ฐ์ผ๋ก ๋ถ๋๋ฝ๊ณ ์ฐ์์ ์ธ ๋ก์ปฌ ํ๋ ์์ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค. Global positioning system์ odometry drift(์ ์ฐจ์ ์ผ๋ก ๋ฐ์ํ๋ ์ค์ฐจ)๋ฅผ ๊ณ ๋ คํ์ฌ global frame(๊ณ ์ ๋ ์ขํ๊ณ)์ ๊ธฐ์ค์ผ๋ก ๋ณํ์ ์
๋ฐ์ดํธํฉ๋๋ค.
Robot Localization์ ์ด๋ฌํ ํจ์ ์ ์ํด ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๋ค์ํ ์ ํ์ N๊ฐ์ ์ผ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์์ ์ด๊ณ ์ํํ odometry๋ฅผ TF์ topic์ผ๋ก ์ ๊ณตํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๋ชจ๋ฐ์ผ ๋ก๋ด ์ค์ ์์๋ ๋ฐํด ์ธ์ฝ๋, IMU ๋ฐ ๋น์ ์ odometry๋ฅผ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ฒฐํฉํ์ฌ ์ฌ์ฉํฉ๋๋ค. ๋ถ๋๋ฌ์ด odometry ์ถ๋ ฅ์ global position updates(์ ์ญ ์์น ์
๋ฐ์ดํธ) ๊ฐ ๋ก๋ด์ ์์น๋ฅผ ์ ํํ๊ฒ ์
๋ฐ์ดํธํ๊ธฐ ์ํด ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
Environmental Representation(ํ๊ฒฝ ํํ)
Environmetal representation์ ๋ก๋ด์ด ์์ ์ ์ฃผ๋ณ ํ๊ฒฝ์ ์ธ์ํ๋ ๋ฐฉ์์ ์๋ฏธํฉ๋๋ค. ์ด๊ฒ์ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฐ์ดํฐ๋ค์ ์ ๋ณด๋ฅผ ๋จ์ผ ๊ณต๊ฐ์ผ๋ก ๊ฒฐํฉํ๊ธฐ ์ํ central localization(์ค์ ๋ก์ปฌ๋ผ์ด์ ์ด์ ) ์ญํ ๋ ํฉ๋๋ค. ์ด ๊ณต๊ฐ์ Controller, Planner, Recovery ๋ฑ์ด ์์ ์ ์์ ํ๊ณ ํจ์จ์ ์ผ๋ก ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Costmaps and Layers(์ฝ์คํธ๋งต๊ณผ ๋ ์ด์ด)
ํ์ฌ ์ฌ์ฉ๋๋ ํ๊ฒฝ ํํ์ Costmap(์ฝ์คํธ๋งต)์
๋๋ค. Costmap์ ์๋ ค์ง์ง ์์ ์์ญ, ์์ ๋กญ๊ฒ ์ด๋ ๊ฐ๋ฅํ ์์ญ, ์ ์ ๋ ์์ญ, ํฝ์ฐฝ๋ ์ฝ์คํธ๋ก ๊ตฌ์ฑ๋ ์ผ์ ํ 2D ๊ฒฉ์ ๊ทธ๋ฆฌ๋์
๋๋ค. ์ด ์ฝ์คํธ๋งต์ global plan(์ ์ญ ๊ฒฝ๋ก ๊ณํ)์ ์ํด ํ์๋๊ฑฐ๋, local control efforts(๋ก์ปฌ ์ ์ด ๋
ธ๋ ฅ)์ ๊ณ์ฐํ๊ธฐ ์ํด ์ํ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๋ค์ํ Costmap Layers(์ฝ์คํธ๋งต ๋ ์ด์ด)๋ ํ๋ฌ๊ทธ์ธ ํํ๋ก ๊ตฌํ๋์ด ์ฝ์คํธ๋งต์ ์ ๋ณด๋ฅผ ๋ฒํผ๋ง(์ ์ฅ)ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ผ์ด๋ค, ๋ ์ด๋, ์ํ, ๊น์ด, ์ด๋ฏธ์ง ๋ฑ์ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค. Costmap Layers๋ ์นด๋ฉ๋ผ๋ ๊น์ด ์ผ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ํ ์ฅ์ ๋ฌผ์ ๊ฐ์งํ๊ณ ์ถ์ ํ์ฌ ์ถฉ๋์ ํผํ ์ ์์ต๋๋ค. ๋ํ ์ด๋ค ๊ท์น์ด๋ ํด๋ฆฌ์คํฑ์ ๊ธฐ๋ฐํ์ฌ ๊ธฐ๋ณธ ์ฝ์คํธ๋งต์ ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ก ๋ณ๊ฒฝํ๋ ๋ฐ ์ฌ์ฉ๋ ์๋ ์์ต๋๋ค.
map์ ํํ๋ global costmap๊ณผ local costmap
Costmap FIlters(์ฝ์คํธ๋งต ํํฐ)
์ง๋ ํ์ผ์ ์ฃผ์์ ๋ฌ์ ์ด๋ค ์์น์์ ํน์ ๋์์ด ๋ฐ์ํ๋๋ก ํ๋ ์ํฉ์ ์๊ฐํด๋ด
์๋ค. ์ฃผ์/ํ์ ์์๋ก๋ ๋ด๋ถ์์ ํผํด์ผ ํ ์์ญ์ ๋ํ๋ด๊ฑฐ๋ ํ์๋ ํฝ์
์์ญ์์ ์ต๋ ์๋ ์ ํํ๋ ๊ฒ์ ์๋ก ๋ค ์ ์์ต๋๋ค. ์ด ์ฃผ์์ด ๋ฌ๋ฆฐ ์์ญ์ "Filter Mask(ํํฐ ๋ง์คํฌ)"๋ผ๊ณ ํฉ๋๋ค. ํํฐ ๋ง์คํฌ์ ์ฃผ์ ๋ชฉํ๋ ์ง๋์ ํน์ ์์ญ์ ์ผ๋ถ ์ถ๊ฐ ๊ธฐ๋ฅ์ด๋ ํ๋ ๋ณํ๋ฅผ ํ์ํ ์ ์๋๋ก ํ๋ ๊ฒ์
๋๋ค.
Costmap Filters(์ฝ์คํธ๋งต ํํฐ)๋ ํํฐ ๋ง์คํฌ์ ์ฃผ์์ด ๋ฌ๋ฆฐ spatial-dependent behavioral changes(๊ณต๊ฐ์ ์์กดํ๋ ๋์ ๋ณ๊ฒฝ ์ฌํญ ์) ํน์ ๊ณต๊ฐ์์ ์ต๋ ์๋ ์ ํ)์ Nav2 ์คํ์ ์ ์ฉํ๋ costmap layer-based approach(์ฝ์คํธ๋งต ๋ ์ด์ด ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์)์
๋๋ค. ์ฝ์คํธ๋งต ํํฐ๋ ์ฝ์คํธ๋งต ํ๋ฌ๊ทธ์ธ์ผ๋ก ๊ตฌํ๋ฉ๋๋ค. ์ด๋ฌํ ํ๋ฌ๊ทธ์ธ์ ํํฐ ๋ง์คํฌ์ ํ์๋ ๊ณต๊ฐ ์ฃผ์์ ๋ฐ๋ผ ์ฝ์คํธ๋งต์ ํํฐ๋งํ๊ธฐ ๋๋ฌธ์ 'ํํฐ'๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. ํํฐ๋ง๋ ์ฝ์คํธ๋งต์ ๋ง๋ค๊ณ ์ฃผ์์ด ๋ฌ๋ฆฐ ์์ญ์์ ๋ก๋ด์ ๋์์ ๋ณ๊ฒฝํ๊ธฐ ์ํด ํํฐ ํ๋ฌ๊ทธ์ธ์ ํํฐ ๋ง์คํฌ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ ํํฐ ๊ณต๊ฐ์์ ํผ์ฒ ๋งต์ผ๋ก ์ ํ์ ์ผ๋ก ๋ณํ๋ฉ๋๋ค. ์ด๋ ๊ฒ ๋ณํ๋ ํผ์ฒ ๋งต์ map/costmap(์ง๋/์ฝ์คํธ๋งต)๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ชจ๋ ์ผ์ ๋ฐ์ดํฐ์ robot coordinate filters(ํ์ฌ ๋ก๋ด ์ขํ ํํฐ)๊ฐ ๊ธฐ๋ณธ ์ฝ์คํธ๋งต์ ์
๋ฐ์ดํธํ๊ณ ๋ก๋ด์ ์์น์ ๋ฐ๋ผ ๋ก๋ด์ ๋์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ฝ์คํธ๋งต ํํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๋ง๋ค ์ ์์ต๋๋ค:
- ๋ก๋ด์ด ์ ๋ ๋ค์ด๊ฐ ์ ์๋ ์ ๊ทผ ๊ธ์ง/์์ ๊ตฌ์ญ
- ์๋ ์ ํ ๊ตฌ์ญ, ํด๋น ์์ญ์ ์ง์ ํ๋ ๋ก๋ด์ ์ต๋ ์๋๊ฐ ์ ํ๋จ
- ์ฐ์ ํ๊ฒฝ ๋ฐ ์ฐฝ๊ณ ์์ ์ด๋ํ๋ ๋ก๋ด๋ค์ ์ํ ์ ํธ ๋ ์ธ