0. ๋ค์ด๊ฐ๊ธฐ์
[์์จ์ฃผํ ์์ ์๋์ฐจ / DRIVEN ] ํ๊ณ ๋ฅผ ์ํ ๊ธฐ๋ก
๋๋ ์์จ์ฃผํ ์์คํ ์ ๋ง๋ค์ด๋ณธ์ ์๋ ๊ตฐ์ธ ๊ฐ๋ฐ์์ด๋ค. ์์ ์ด์ ๋ก ์์จ์ฃผํ์ ๋ง๋ค๊ธฐ ์์ํ๊ธด ํ๋๋ฐ, ๋ด๊ฐ ์๋๊ฑฐ๋ผ๊ณ ๋ ์ฅ๋ฟ๋ ์์๋ค. ์ฌ๋ฌ๊ฐ์ง ์์นญ์ ํ๋ฉด์ ์๊ฒ ๋ ๊ฑด A to Z ๋ก ๊ฐ๋ฐํด์ผํ๋ค๋๊ฒ์ด๋ค. ์ ์ฑ์ ์ธ ๋งค๋ด์ผ๋ฐ์๋ ์๋ค. ๊ฐ๊ฐ์ ์์ญ์์๋ ๋ ํผ๋ฐ์ค๋ค์ด ๊ฝค ์์ง๋ง ์์จ์ฃผํ์ ํ๊ธฐ ์ํด์ ๋ญ๋ถํฐ ํด๋ผ, ๋ญ ํด๋ผ, ์ด๋๊น์ง ํด๋ผ ์ด๋ฐ๊ฑด ์๋๊ฒ์.. ๊ทธ๋์ ์์๋ ฅ์ ๋์ํด ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์์ํ๋ค. ROS ๋ผ๋๊ฒ ์์จ์ฃผํ ์์คํ ์ ์ฌ์ฉ๋์ด์ผ ํจ์ ์๊ณ ์์์ง๋ง ROS ๊ฐ ๋ญ์ง. ์ ์ฌ์ฉํด์ผํ๋์ง, ์ด๋ป๊ฒ ์ฌ์ฉํด์ผํ๋์ง ๋ฐ์๋ ๊ฑฑ์ ํ ๊ฒ ์๋์๋๊ฒ์ด๋ค. ์ฐ์ ๊ธฐ๋ฅ๋จ์๋ก ์ฝ๋๋ฅผ ์์ฑํด์ผํ๊ณ , ์ง๊ธ ๊ธฐ๋ฅ๋จ์๋ก ์ฝ๋์์ฑ์ด ๊ฑฐ์ ๋ง๋ฌด๋ฆฌ ๋์๋ค.
https://github.com/Jyuriven/Driven_autonomous_driving
์์ ์ ์ฅ์์ ์ฐ๋ฆฌ ์ฝ๋๋ค์ด ๋ด๊ฒจ์๋๋ฐ, ๋ํ๊ฐ ๋ง๋ฌด๋ฆฌ ๋๋๋๋ก ์ ์ฅ์ ์ ๋ฆฌ๋ฅผ ํด์ผ๊ฒ ๋ค. ์ด์จ๋ , ์ง๊ธ ์ํฉ์ ๊ธฐ๋ฅ๋ณ๋ก ์ฝ๋์์ฑ์ด ์๋ฃ๋์๊ณ , ROS ๋ฅผ ์ฌ์ฉํด์ผํ๋ค๋๊ฑด๋ฐ, ๋ญ ์ด๋ป๊ฒ ์จ์ผํ ์ง๋ฅผ ๋ชจ๋ฅด๋ ๊ฒ์ด๋ค. ๋์ ๋น์ทํ ์ํฉ์ ์ฌ๋์๊ฒ ์ด ์๋ฃ๊ฐ ๋์์ด ๋์์ผ๋ฉด ํ๋ค.
1. ROS ๋ ?
ROS ๊ณต์ ๋ฌธ์์ ๋์ ์๋ ROS ์ค๋ช ์ด๋ค.
<aside> ๐ป The Robot Operating System (ROS) is a set of software libraries and tools that help you build robot applications. From drivers to state-of-the-art algorithms, and with powerful developer tools, ROS has what you need for your next robotics project. And it's all open source.
</aside>
๋ก๋ดํ๋ก๊ทธ๋จ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๊ณผ ํด๋ค์ ๋ชจ์์ธ๋ฐ, ๊ณต๊ฐ๋ ์๋๊ณ ๋ฌด์จ๋ง์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. ๊ฒ๋ค๊ฐ R-OS(Operation System) ์ด๋ผ๊ณ ๋ ํ์ง๋ง, ์ ๊น ๋ง์ ธ๋ดค๋ ์ฌ๋๋ค์ ์ฌ๊ธฐ์ ์ด์ํจ์ ๋๊ผ์ ๊ฒ์ด๋ค. OS ๊ฐ ์๋๊ณ ๊ทธ๋ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ ํ๋ ์์ํฌ์ด๋ค.
์ฆ ROS ๋ ๋ก๋ด ํ๋ก๊ทธ๋๋ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด์ ์ ๊ณตํด์ฃผ๋ ํ๋ซํผ์ด๋ค.
2. ROS ์๋ ํํ
์ ์ฌ์ง์ ROS ์์ ์ค์ํ๊ฒ ์๊ฐํ๋, Node ๋ฅผ ๊ทธ๋ํ๋ก ํํํ ๊ฒ์ด๋ค.
Node ๋ ์ด๋ค ์ง์ ๋ค์ ์๋ฏธํ๋ค.
์ฆ ROS ๋ Node ๋ค์ ์งํฉ๊ด๊ณ์ด๋ฉฐ, ์ด๋ค๊ฐ Message ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํํ์ด๋ค.
3. ROS ํ๋ก๊ทธ๋๋ฐ
ROS ๋ ๋ ธ๋๋ค๊ฐ์ ์งํฉ์ด๋ฉฐ, ๋ ธ๋๋ ๋ฉ์์ง๋ก ๊ฐ ๋ ธ๋๋ค๊ฐ ๋์ ์ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ROS ํ๋ก๊ทธ๋๋ฐ์ ๋ ธ๋๋ค์ด ํต์ ํ ์ ์๋๋ก ์ฝ๋ฉํ๋๊ฒ์ ์๋ฏธํ ๊ฒ ์ด๋ค.
์์จ์ฃผํ์ ๊ธฐ๋ณธ์ ์ธ ๋ก์ง์ ์๋์ ๊ฐ๋ค.
<aside> ๐ป
- N๊ฐ์ ์ผ์๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ ๋ฐ๋๋ค.
- ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํด์ ์ฃผ๋ณํ๊ฒฝ๊ณผ ์์ (๋ก๋ด)์ ์ํ๋ฅผ ์ธ์งํ๋ค. - Perception
- Perception ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์ด๋ป๊ฒ ์์ง์ฌ์ผ ํ ์ง ํ๋จํ๋ค. - Decision
- Decision ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ์ค์ ๋์(์ฃผํ)์ ํ๋ค. - Control
</aside>
์ด๊ฒ์ ์ฝ๋ฉํ๋ค๋ฉด ๋๊ฐ ์ด๋ฐ ์์ฌ์ฝ๋๋ก ์ง์ฌ์ง๊ฒ์ด๋ค.
def _sensorData(sensor1,sensor2,sensor3...):
--- ์ฌ๋ฌ๊ฐ์ง ์ผ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค. ----
return sensorData
def _pathPlanning(sensordata):
return _path
def _motionPlanning(path):
return motionPlan
def contorlCar(motionPlan):
return
thread1 = thread.Threading(target=_sensorData)
thread1.start()
while True:
motionPlan = _motionPlanning(_pathplanning(_sensorData)))
controlCar(motionPlan)
์ผ์๋ค๋ก ๋ฐ์ดํฐ๋ฅผ ์์ ํ์ฌ, ์ฃผ๋ณ์ ํ๊ฒฝ์ ์ธ์ํ๊ณ ์ด๋ฅผ ํตํด ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์์ฐํด๋ธ๋ค.
๊ฒฝ๋ก๋ฅผ ๋ฐํ์ผ๋ก ์ค์ ์ฐจ๋์ด ์ด๋ป๊ฒ ์์ง์ฌ์ผํ๋์ง MotionPlanning ์ ์ค์ํ๊ณ , ์ด๋ฅผ ์ฐจ๋ ๋ชจํฐ์ ์ด์ ํ์ฉํ๋ค. ์ฐ๋ ๋๋ฅผ ํ์ฉํ๋ค๋ฉด ์ถฉ๋ถํ ์๋๊ฐ๋ฅํ๊ณ ๋ณ๋ก ์ด๋ ต์ง ์๋ค.
ํ์ง๋ง, ๋ง์ฝ์ ์ฐ๋ ๋ฉ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ก๊ทธ๋จ์ ๋น๋ํ๋ค๋ฉด ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค. ์ ์ฒด์ ์ธ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์์ ๋ฌด์ธ๊ฐ ํ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์ ๋๋ก ์๋ํ์ง ์๋๋ค๋ฉด ์ ์ฒด๊ฐ ๋ฉ์ถ๋ค. ๋ํ ์ฐ๋ ๋๋ ํ๋์ ํ๋ก์ธ์ค์์ ์๋ํ๊ธฐ ๋๋ฌธ์ ์ค์ผ์ฅด๋ง์๋ ๋ฌด์ธ๊ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฌผ๋ก ์ด๋ฅผ ์๋ฐฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ง๋ง ROS ๋ ์ฐ๋ ๋๋ก ์ฐจ๋์ ์์ง์ด๋๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๊ฐ๋จํ๊ฒ ์์๋๋ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ ์ ์๋ค.
๋ง์คํฐ ๋ ธ๋์์ ๋๋จธ์ง ๋ ธ๋๋ค( ํ๋ก์ธ์ค ) ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ค์ผ์ฅด๋ง ๋ํ ROS ์์ฒด์ ์ผ๋ก ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฌด์ธ๊ฐ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ ์ฐจ๋์ด ๋ฉ์ถ๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํ์ง ์๋๋ค.
๋ฌผ๋ก ์์ธ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๊ฐ ์๋๊ฒฝ์ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง๋ ์ฝ๋ ์ ์์ฑ์ ํด์ฃผ์ด์ผ ํ๋ค.
์ด๋ฐ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ๋ํ ๊ตฌ์กฐ๋ฅผ ๋ฐํ์(Publisher) ์ ์์ ์ ( Subscriber) ๋ก ํํํ๋ค. ์ผ์์์ ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ํ์ฉํ๊ธฐ ์ํ๋ค๋ฉด ์ด๋ฅผ ์ํด์ ์๋ก์ด ์ฐ๋ ๋๋ฅผ ๋ง๋๋๊ฒ์ด ์๋๋ผ, Subscriber ๋ฅผ ์ถ๊ฐํ๋ฉด ๋ ์ผ์ด๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ํ์ฅ์ฑ๊ณผ ํ๋ก๊ทธ๋จ ์์ ์ฑ์ ์์ด ์ฐ๋ ๋๋ก ์ง์ ์ฒ๋ฆฌํ๋๊ฒ๋ณด๋ค ํจ์ฌ ํธํด์ง๋ค๋ ๊ฒ์ด๋ค.
๋ฐํ์์ ์์ ์๋ ROS ์์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋ ์ค ํ๋์ด๋ฏ๋ก ๋ค์ ์ฑํฐ์์ ๋ ์์ธํ๊ฒ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.
'Develop > ROS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ค ROS Custom Message (0) | 2024.10.05 |
---|---|
๐ค ROS package ์์กด์ฑ ์ถ๊ฐ (0) | 2024.10.05 |
๐ฅ์์จ์ฃผํ์ ์ํ ROS ์ ๋ฌธ(3) : Transform, TF (1) | 2024.10.05 |
๐ฅ ์์จ์ฃผํ์ ์ํ ROS ์ ๋ฌธ(2) : Publisher ์ Subscriber (1) | 2024.10.05 |