๐ ๋ฒ๊ทธ ์ค๋ช
Yaw ์ถ๋ก ์์น๋ก ์ด๋ํ๊ธฐ ์ ์ ๋ก๋ดํ์ด ์๋ ์ ์์น๋ฅผ ๋จผ์ ๊ฒฝ์ ํ ๋ค, yaw ์ถ๋ก ์์น๋ก ์กฐ๊ธ ๋ ์ด๋ํ๋ ๊ณผ์ ์์ ์ด์ ๋ณด๋ค ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
ํด๋น ๊ตฌ๊ฐ์ ์๋์ ownership์ ํ๋จํ๊ธฐ ์ํ searching ๋จ๊ณ๋ก ๋ณด์ด๋ฉฐ, ๊ธฐ์กด์๋ ๋น๊ต์ ์งง์ ์๊ฐ ์์ ์๋ ์ ์์น๋ฅผ ๊ฑฐ์ณ yaw ์ถ๋ก ์์น๋ก ์ด๋ํ์ง๋ง, ์ต๊ทผ์๋ ์ด ์ฌ์ด์ ๋๊ธฐ ์๊ฐ ๋๋ ์ด๋ ์๊ฐ์ด ๊ธธ์ด์ ธ ์ ์ฒด ์์
์ํ ์๊ฐ์ด ์ฆ๊ฐํ๊ณ ์๋ค.
๐ ์ฌํ ๋ฐฉ๋ฒ
-
์ฌ์ฉ์๊ฐ ๊ณต๊ตฌ pick ๋๋ ์๋ ๋ด๋ถ ๊ฐ์ฒด ํ์์ด ํ์ํ ๋ช
๋ น์ ์
๋ ฅํ๋ค.
์: ๋๋ผ์ด๋ฒ ๊ฐ์ ธ๋ค์ค, ๋ง์น ์ฐพ์์ค
-
๋ก๋ดํ์ด yaw ์ถ๋ก ์์น๋ก ์ด๋ํ๊ธฐ ์ ์ ์๋ ์ ์์น๋ก ๋จผ์ ์ด๋ํ๋์ง ํ์ธํ๋ค.
-
์๋ ์ ์์น์ ๋๋ฌํ ์ดํ yaw ์ถ๋ก ์์น๋ก ์ด๋ํ๊ธฐ๊น์ง์ ์๊ฐ์ด ์ด์ ๋ณด๋ค ๊ธธ์ด์ก๋์ง ํ์ธํ๋ค.
โ
๊ธฐ๋ํ ๋์
๋ก๋ดํ์ ์๋ ์ ์์น๋ฅผ ๊ฒฝ์ ํ ๋ค, ๋ถํ์ํ ๋๊ธฐ ์์ด yaw ์ถ๋ก ์์น๋ก ์์ฐ์ค๋ฝ๊ฒ ์ด๋ํด์ผ ํ๋ค.
์๋ ownership ํ๋จ์ ์ํ searching ๋จ๊ณ๊ฐ ํ์ํ๋๋ผ๋, ํด๋น ๋จ๊ณ๋ ์ต์ํ์ ์๊ฐ ์์ ์๋ฃ๋์ด์ผ ํ๋ฉฐ, perception ๊ฒฐ๊ณผ ๋๋ ์ํ ํ๋จ์ด ์๋ฃ๋๋ฉด ๋ฐ๋ก ๋ค์ ์ด๋ ๋จ๊ณ๋ก ๋์ด๊ฐ์ผ ํ๋ค.
๊ธฐ๋ ๋์์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์๋ ์ ์์น ๋๋ฌ
- ownership/searching ์ํ ํ๋จ
- yaw ์ถ๋ก ์์น๋ก ์ฆ์ ์ด๋
- ๋ถํ์ํ sleep, timeout, retry, blocking wait ์์ด ๋ค์ ๋จ๊ณ ์งํ
โ ์ค์ ๋์
๋ก๋ดํ์ด ์๋ ์ ์์น์ ๋๋ฌํ ์ดํ yaw ์ถ๋ก ์์น๋ก ์ด๋ํ๊ธฐ๊น์ง์ ์๊ฐ์ด ์ด์ ๋ณด๋ค ์ค๋ ๊ฑธ๋ฆฐ๋ค.
์ด๋ก ์ธํด ์ ์ฒด pick/searching pipeline์ ์ํ ์๊ฐ์ด ์ฆ๊ฐํ๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋ณด๊ธฐ์๋ ๋ก๋ด์ด ์๋ ์์์ ๋ถํ์ํ๊ฒ ๋ฉ์ถฐ ์๊ฑฐ๋ ๋ฆ๊ฒ ๋ฐ์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
ํ์ฌ ์์ธ์ ๋ช
ํํ์ง ์์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
- searching ๋จ๊ณ์์ timeout ๋๋ retry ์๊ฐ์ด ์ฆ๊ฐํจ
- ownership ํ๋จ ๋ก์ง์์ perception ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ด ๊ธธ์ด์ง
- ์๋ ์ ์์น ๋๋ฌ ํ ๋ค์ state๋ก ์ ํ๋๋ ์กฐ๊ฑด์ด ๋ฆ๊ฒ ๋ง์กฑ๋จ
- ์ด์ ์๋ ์๋ sleep, wait, stabilization delay๊ฐ ์ถ๊ฐ๋จ
- motion ์๋ฃ ํ์ ๋๋ feedback ์์ ์ด ์ง์ฐ๋จ
- yaw ์ถ๋ก ์์น๋ก ์ด๋ํ๊ธฐ ์ ๋ถํ์ํ ์ค๊ฐ ์ํ๊ฐ ์ถ๊ฐ๋จ
๐ฅ๏ธ ์คํ ํ๊ฒฝ
- OS:
Ubuntu 22.04
- ROS 2 ๋ฒ์ :
ROS2 Humble
- Python ๋ฒ์ :
Python 3.10
- ๋ ํฌ์งํ ๋ฆฌ:
- ๋ธ๋์น:
- ์นด๋ฉ๋ผ ์ ๋ณด:
Intelยฎ RealSenseโข Depth Camera D435I
- ๋ก๋ดํ ์ ๋ณด:
Doosan-Robotics-M0609
- ๊ทธ๋ฆฌํผ ์ ๋ณด:
OnRobot RG2
๐ ๋ก๊ทธ ๋๋ ์๋ฌ ๋ฉ์์ง
Yaw inference position ์ด๋ ์ searching ๋จ๊ณ์์ ์ง์ฐ ๋ฐ์.
๊ด์ฐฐ๋ ํ๋ฆ:
1. Move to drawer-top/searching position
2. Wait/search for drawer ownership
3. Move slightly to yaw inference position
๋ฌธ์ :
- 1๋ฒ ์์น ๋๋ฌ ์ดํ 3๋ฒ ์์น๋ก ์ด๋ํ๊ธฐ๊น์ง์ ์๊ฐ์ด ์ด์ ๋ณด๋ค ์ค๋ ๊ฑธ๋ฆผ
- ๋ช
ํํ ์๋ฌ ๋ก๊ทธ๋ ์์ง๋ง, searching/ownership ํ๋จ ๋จ๊ณ ๋๋ state transition์์ ์ง์ฐ์ด ๋ฐ์ํ๋ ๊ฒ์ผ๋ก ์ถ์ ๋จ
๐ฅ ์คํฌ๋ฆฐ์ท/์์
๋ค์ ์๋ฃ๋ฅผ ์ฒจ๋ถํ๋ฉด ์์ธ ๋ถ์์ ๋์์ด ๋จ.
- ์๋ ์ ์์น์ ๋๋ฌํ ์์ ์ ์์
- yaw ์ถ๋ก ์์น๋ก ์ด๋ํ๊ธฐ ์ ๊น์ง ๋ฉ์ถฐ ์๋ ๊ตฌ๊ฐ ์์
- ์ด์ ์ ์ ๋์๊ณผ ํ์ฌ ์ง์ฐ ๋์ ๋น๊ต ์์
- ๊ฐ state ์ง์
/์ข
๋ฃ ์๊ฐ์ด ์ฐํ ROS 2 ๋ก๊ทธ
- motion command ๋ฐํ ์๊ฐ๊ณผ ์๋ฃ feedback ์์ ์๊ฐ ๋ก๊ทธ
๐ ์ถ๊ฐ ์ ๋ณด
์์ธ ํ์
์ ์ํด searching ๋จ๊ณ์ yaw ์ถ๋ก ์์น ์ด๋ ์ ํ์ timestamp ๋ก๊ทธ๋ฅผ ์ถ๊ฐํ ํ์๊ฐ ์๋ค.
ํ์ธํด์ผ ํ ์ง์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์๋ ์ ์์น๋ก ์ด๋ ๋ช
๋ น์ ๋ณด๋ธ ์๊ฐ
- ์๋ ์ ์์น ๋๋ฌ feedback์ ๋ฐ์ ์๊ฐ
- ownership/searching ๋จ๊ณ ์์ ์๊ฐ
- ownership/searching ๋จ๊ณ ์ข
๋ฃ ์๊ฐ
- yaw ์ถ๋ก ์์น ์ด๋ ๋ช
๋ น์ ๋ณด๋ธ ์๊ฐ
- yaw ์ถ๋ก ์์น ๋๋ฌ feedback์ ๋ฐ์ ์๊ฐ
ํนํ ๋ค์ ํญ๋ชฉ์ ์ฐ์ ์ ์ผ๋ก ํ์ธํด์ผ ํ๋ค.
- searching ๋จ๊ณ์ ๊ณ ์ sleep์ด ์ถ๊ฐ๋์๋์ง
- ownership ํ๋จ timeout ๊ฐ์ด ์ฆ๊ฐํ๋์ง
- perception ๊ฒฐ๊ณผ ๋๊ธฐ ๋ก์ง์ด blocking ๋ฐฉ์์ผ๋ก ๋์ํ๋์ง
- motion ์๋ฃ ํ์ ์กฐ๊ฑด์ด ๊ณผ๋ํ๊ฒ ์๊ฒฉํด์ก๋์ง
- ์ด์ ๋ฒ์ ๋๋น state machine ์ ํ ์กฐ๊ฑด์ด ๋ณ๊ฒฝ๋์๋์ง
- yaw ์ถ๋ก ์์น๋ก ์ด๋ํ๊ธฐ ์ ๋ถํ์ํ retry ๋๋ ์์ ํ ๋๊ธฐ ์๊ฐ์ด ์ถ๊ฐ๋์๋์ง
์์ ์์ ๋ฐฉํฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
[drawer_top_arrived] timestamp ๊ธฐ๋ก
[searching_start] timestamp ๊ธฐ๋ก
[searching_done] timestamp ๊ธฐ๋ก
[yaw_pose_command_sent] timestamp ๊ธฐ๋ก
[yaw_pose_arrived] timestamp ๊ธฐ๋ก
์ ๋ก๊ทธ๋ฅผ ํตํด ์ง์ฐ์ด motion ๋จ๊ณ์์ ๋ฐ์ํ๋์ง, searching/ownership ํ๋จ ๋จ๊ณ์์ ๋ฐ์ํ๋์ง, ๋๋ state transition ๋จ๊ณ์์ ๋ฐ์ํ๋์ง ๋ถ๋ฆฌํด์ ํ์ธํด์ผ ํ๋ค.
๐ ๋ฒ๊ทธ ์ค๋ช
Yaw ์ถ๋ก ์์น๋ก ์ด๋ํ๊ธฐ ์ ์ ๋ก๋ดํ์ด ์๋ ์ ์์น๋ฅผ ๋จผ์ ๊ฒฝ์ ํ ๋ค, yaw ์ถ๋ก ์์น๋ก ์กฐ๊ธ ๋ ์ด๋ํ๋ ๊ณผ์ ์์ ์ด์ ๋ณด๋ค ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
ํด๋น ๊ตฌ๊ฐ์ ์๋์ ownership์ ํ๋จํ๊ธฐ ์ํ searching ๋จ๊ณ๋ก ๋ณด์ด๋ฉฐ, ๊ธฐ์กด์๋ ๋น๊ต์ ์งง์ ์๊ฐ ์์ ์๋ ์ ์์น๋ฅผ ๊ฑฐ์ณ yaw ์ถ๋ก ์์น๋ก ์ด๋ํ์ง๋ง, ์ต๊ทผ์๋ ์ด ์ฌ์ด์ ๋๊ธฐ ์๊ฐ ๋๋ ์ด๋ ์๊ฐ์ด ๊ธธ์ด์ ธ ์ ์ฒด ์์ ์ํ ์๊ฐ์ด ์ฆ๊ฐํ๊ณ ์๋ค.
๐ ์ฌํ ๋ฐฉ๋ฒ
์ฌ์ฉ์๊ฐ ๊ณต๊ตฌ pick ๋๋ ์๋ ๋ด๋ถ ๊ฐ์ฒด ํ์์ด ํ์ํ ๋ช ๋ น์ ์ ๋ ฅํ๋ค.
์:
๋๋ผ์ด๋ฒ ๊ฐ์ ธ๋ค์ค,๋ง์น ์ฐพ์์ค๋ก๋ดํ์ด yaw ์ถ๋ก ์์น๋ก ์ด๋ํ๊ธฐ ์ ์ ์๋ ์ ์์น๋ก ๋จผ์ ์ด๋ํ๋์ง ํ์ธํ๋ค.
์๋ ์ ์์น์ ๋๋ฌํ ์ดํ yaw ์ถ๋ก ์์น๋ก ์ด๋ํ๊ธฐ๊น์ง์ ์๊ฐ์ด ์ด์ ๋ณด๋ค ๊ธธ์ด์ก๋์ง ํ์ธํ๋ค.
โ ๊ธฐ๋ํ ๋์
๋ก๋ดํ์ ์๋ ์ ์์น๋ฅผ ๊ฒฝ์ ํ ๋ค, ๋ถํ์ํ ๋๊ธฐ ์์ด yaw ์ถ๋ก ์์น๋ก ์์ฐ์ค๋ฝ๊ฒ ์ด๋ํด์ผ ํ๋ค.
์๋ ownership ํ๋จ์ ์ํ searching ๋จ๊ณ๊ฐ ํ์ํ๋๋ผ๋, ํด๋น ๋จ๊ณ๋ ์ต์ํ์ ์๊ฐ ์์ ์๋ฃ๋์ด์ผ ํ๋ฉฐ, perception ๊ฒฐ๊ณผ ๋๋ ์ํ ํ๋จ์ด ์๋ฃ๋๋ฉด ๋ฐ๋ก ๋ค์ ์ด๋ ๋จ๊ณ๋ก ๋์ด๊ฐ์ผ ํ๋ค.
๊ธฐ๋ ๋์์ ๋ค์๊ณผ ๊ฐ๋ค.
โ ์ค์ ๋์
๋ก๋ดํ์ด ์๋ ์ ์์น์ ๋๋ฌํ ์ดํ yaw ์ถ๋ก ์์น๋ก ์ด๋ํ๊ธฐ๊น์ง์ ์๊ฐ์ด ์ด์ ๋ณด๋ค ์ค๋ ๊ฑธ๋ฆฐ๋ค.
์ด๋ก ์ธํด ์ ์ฒด pick/searching pipeline์ ์ํ ์๊ฐ์ด ์ฆ๊ฐํ๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋ณด๊ธฐ์๋ ๋ก๋ด์ด ์๋ ์์์ ๋ถํ์ํ๊ฒ ๋ฉ์ถฐ ์๊ฑฐ๋ ๋ฆ๊ฒ ๋ฐ์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
ํ์ฌ ์์ธ์ ๋ช ํํ์ง ์์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
๐ฅ๏ธ ์คํ ํ๊ฒฝ
Ubuntu 22.04ROS2 HumblePython 3.10Intelยฎ RealSenseโข Depth Camera D435IDoosan-Robotics-M0609OnRobot RG2๐ ๋ก๊ทธ ๋๋ ์๋ฌ ๋ฉ์์ง
๐ฅ ์คํฌ๋ฆฐ์ท/์์
๋ค์ ์๋ฃ๋ฅผ ์ฒจ๋ถํ๋ฉด ์์ธ ๋ถ์์ ๋์์ด ๋จ.
๐ ์ถ๊ฐ ์ ๋ณด
์์ธ ํ์ ์ ์ํด searching ๋จ๊ณ์ yaw ์ถ๋ก ์์น ์ด๋ ์ ํ์ timestamp ๋ก๊ทธ๋ฅผ ์ถ๊ฐํ ํ์๊ฐ ์๋ค.
ํ์ธํด์ผ ํ ์ง์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
ํนํ ๋ค์ ํญ๋ชฉ์ ์ฐ์ ์ ์ผ๋ก ํ์ธํด์ผ ํ๋ค.
์์ ์์ ๋ฐฉํฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ ๋ก๊ทธ๋ฅผ ํตํด ์ง์ฐ์ด motion ๋จ๊ณ์์ ๋ฐ์ํ๋์ง, searching/ownership ํ๋จ ๋จ๊ณ์์ ๋ฐ์ํ๋์ง, ๋๋ state transition ๋จ๊ณ์์ ๋ฐ์ํ๋์ง ๋ถ๋ฆฌํด์ ํ์ธํด์ผ ํ๋ค.