Notice
Recent Posts
Recent Comments
Link
ยซ   2024/10   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ’ป ๐Ÿง

๐Ÿ”ฅ ์ž์œจ์ฃผํ–‰์„ ์œ„ํ•œ ROS ์ž…๋ฌธ(1) : ROS ๋ž€ ? (1) ๋ณธ๋ฌธ

Develop/ROS

๐Ÿ”ฅ ์ž์œจ์ฃผํ–‰์„ ์œ„ํ•œ ROS ์ž…๋ฌธ(1) : ROS ๋ž€ ? (1)

proggg 2024. 10. 5. 13:05

0. ๋“ค์–ด๊ฐ€๊ธฐ์ „

[์ž์œจ์ฃผํ–‰ ์ž์ž‘ ์ž๋™์ฐจ / DRIVEN ] ํšŒ๊ณ ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ก

 

[์ž์œจ์ฃผํ–‰ ์ž์ž‘ ์ž๋™์ฐจ / DRIVEN ] ํšŒ๊ณ ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ก

DRIVEN ์€ ์ฒœ์•ˆ์— ์žˆ๋Š” ํ•œ๊ตญ๊ธฐ์ˆ ๊ต์œก๋Œ€ํ•™๊ต์˜ ์ž์ž‘ ์ž๋™์ฐจ ๋™์•„๋ฆฌ์ด๋‹ค. ๋‚ด๊ฐ€ ์ฐธ์—ฌ ํ–ˆ์„ ๋•Œ 19๊ธฐ ๋™์•„๋ฆฌ๋ผ ํ–ˆ์œผ๋‹ˆ ๊ฝค ์œ ์„œ๊ฐ€ ์žˆ๋Š” ๋™์•„๋ฆฌ์ด๋‹ค. ๋‚ด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ฒœ์•ˆ์— ์žˆ๋Š” ๋Œ€ํ•™๊ต ๋™์•„๋ฆฌ์— ์ฐธ์—ฌํ•˜๊ฒŒ

proggg.tistory.com

 

๋‚˜๋Š” ์ž์œจ์ฃผํ–‰ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด๋ณธ์  ์—†๋Š” ๊ตฐ์ธ ๊ฐœ๋ฐœ์ž์ด๋‹ค. ์œ„์˜ ์ด์œ ๋กœ ์ž์œจ์ฃผํ–‰์„ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•˜๊ธด ํ–ˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ์•„๋Š”๊ฑฐ๋ผ๊ณ ๋Š” ์ฅ๋ฟ”๋„ ์—†์—ˆ๋‹ค. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์„œ์นญ์„ ํ•˜๋ฉด์„œ ์•Œ๊ฒŒ ๋œ ๊ฑด A to Z ๋กœ ๊ฐœ๋ฐœํ•ด์•ผํ•œ๋‹ค๋Š”๊ฒƒ์ด๋‹ค. ์ •์„ฑ์ ์ธ ๋งค๋‰ด์–ผ๋”ฐ์œ„๋Š” ์—†๋‹ค. ๊ฐ๊ฐ์˜ ์˜์—ญ์—์„œ๋Š” ๋ ˆํผ๋Ÿฐ์Šค๋“ค์ด ๊ฝค ์žˆ์ง€๋งŒ ์ž์œจ์ฃผํ–‰์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ญ๋ถ€ํ„ฐ ํ•ด๋ผ, ๋ญ˜ ํ•ด๋ผ, ์–ด๋””๊นŒ์ง€ ํ•ด๋ผ ์ด๋Ÿฐ๊ฑด ์—†๋Š”๊ฒƒ์ž„.. ๊ทธ๋ž˜์„œ ์ƒ์ƒ๋ ฅ์„ ๋™์›ํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ROS ๋ผ๋Š”๊ฒŒ ์ž์œจ์ฃผํ–‰ ์‹œ์Šคํ…œ์— ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•จ์€ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ROS ๊ฐ€ ๋ญ”์ง€. ์™œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€ ๋”ฐ์œ„๋Š” ๊ฑฑ์ •ํ• ๊ฒŒ ์•„๋‹ˆ์—ˆ๋˜๊ฒƒ์ด๋‹ค. ์šฐ์„  ๊ธฐ๋Šฅ๋‹จ์œ„๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ–ˆ๊ณ , ์ง€๊ธˆ ๊ธฐ๋Šฅ๋‹จ์œ„๋กœ ์ฝ”๋“œ์ž‘์„ฑ์ด ๊ฑฐ์˜ ๋งˆ๋ฌด๋ฆฌ ๋˜์—ˆ๋‹ค.

https://github.com/Jyuriven/Driven_autonomous_driving

 

GitHub - Jyuriven/Driven_autonomous_driving: [์ฐฝ์ž‘์ž๋™์ฐจ ๊ฒฝ์ง„๋Œ€ํšŒ] ์ž์œจ์ฃผํ–‰ ์ž๋™์ฐจ SWํŒŒํŠธ

[์ฐฝ์ž‘์ž๋™์ฐจ ๊ฒฝ์ง„๋Œ€ํšŒ] ์ž์œจ์ฃผํ–‰ ์ž๋™์ฐจ SWํŒŒํŠธ. Contribute to Jyuriven/Driven_autonomous_driving development by creating an account on GitHub.

github.com

 

์œ„์˜ ์ €์žฅ์†Œ์— ์šฐ๋ฆฌ ์ฝ”๋“œ๋“ค์ด ๋‹ด๊ฒจ์žˆ๋Š”๋ฐ, ๋Œ€ํšŒ๊ฐ€ ๋งˆ๋ฌด๋ฆฌ ๋˜๋Š”๋Œ€๋กœ ์ €์žฅ์†Œ ์ •๋ฆฌ๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค. ์–ด์จŒ๋“ , ์ง€๊ธˆ ์ƒํ™ฉ์€ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ฝ”๋“œ์ž‘์„ฑ์ด ์™„๋ฃŒ๋˜์—ˆ๊ณ , 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> ๐Ÿ’ป

  1. N๊ฐœ์˜ ์„ผ์„œ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ๋ฐ›๋Š”๋‹ค.
  2. ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•ด์„œ ์ฃผ๋ณ€ํ™˜๊ฒฝ๊ณผ ์ž์‹ (๋กœ๋ด‡)์˜ ์ƒํƒœ๋ฅผ ์ธ์ง€ํ•œ๋‹ค. - Perception
  3. Perception ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ์›€์ง์—ฌ์•ผ ํ• ์ง€ ํŒ๋‹จํ•œ๋‹ค. - Decision
  4. 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 ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…์ค‘ ํ•˜๋‚˜์ด๋ฏ€๋กœ ๋‹ค์Œ ์ฑ•ํ„ฐ์—์„œ ๋” ์ž์„ธํ•˜๊ฒŒ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.