๐Ÿฃ 0. ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

 

ROS (Robot Operating System)๋ฅผ ํ†ตํ•ด 3D ์žฌ๊ตฌ์„ฑ / ๊ฐ์ฒด ์ธ์‹ ๋“ฑ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์ฒซ๊ฑธ์Œ์œผ๋กœ
Ubuntu 20.04 + ROS Noetic + Realsense ์นด๋ฉ”๋ผ + YOLO๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๊ฐ์ฒด ์ธ์‹๊นŒ์ง€ ๊ฐ€๋Š” ๊ณผ์ •์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ 1. ์ค€๋น„๋œ ํ™˜๊ฒฝ

 

  • Ubuntu 20.04
  • ROS Noetic ์„ค์น˜
  • ์‚ฌ์šฉ ์นด๋ฉ”๋ผ: Realsense
  • CUDA + cuDNN ์„ค์น˜

 

๐Ÿงฉ 2. ์นด๋ฉ”๋ผ ์บ˜๋ฆฌ๋ธŒ๋ ˆ์ด์…˜

 

โœ… ๋ชฉํ‘œ

 

์นด๋ฉ”๋ผ์˜ ๋ Œ์ฆˆ ์™œ๊ณก ๋ณด์ •ํ•˜๊ธฐ โžก๏ธ ์ •ํ™•ํ•œ 3D ์žฌ๊ตฌ์„ฑ or ๋ฌผ์ฒด ํƒ์ง€๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•จ.

 

๐Ÿ“ ์ง„ํ–‰ ์ˆœ์„œ

 

1. ์ฒด์ปค๋ณด๋“œ ์ถœ๋ ฅ

  • [์ฒด์ปค๋ณด๋“œ PDF ๋งํฌ]
  • A4 ์šฉ์ง€์— ์ฒด์ปค๋ณด๋“œ ํŒจํ„ด ์ถœ๋ ฅ
  • A4์šฉ์ง€์— 100% ๋น„์œจ(ํฌ๊ธฐ ์กฐ์ ˆ ์—†์ด)๋กœ ์ธ์‡„ํ•˜๊ณ , ๋”ฑ๋”ฑํ•œ ํŒ์ž ๋“ฑ์— ๋ถ™์ธ๋‹ค.
  • ๋ณดํ†ต ๋งŽ์ด ์“ฐ๋Š” ํŒจํ„ด: 9x6 (์ฒด์ŠคํŒ์˜ ๋‚ด๋ถ€ ์ฝ”๋„ˆ ๊ธฐ์ค€)

์ฃผ์˜์ 

  • ์นธ ์ˆ˜๋Š” ๋‚ด๋ถ€ ์ฝ”๋„ˆ ๊ฐœ์ˆ˜๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•จ. (9x6์ด๋ฉด ์‹ค์ œ ๊ฒฉ์ž๋Š” 10x7)
  • ์ธ์‡„ ํ’ˆ์งˆ์ด ์ค‘์š”.  ์™œ๊ณก๋˜๋ฉด ์ •ํ™•ํ•œ ์บ˜๋ฆฌ๋ธŒ๋ ˆ์ด์…˜์ด ์•ˆ๋Œ.

 

2. ์นด๋ฉ”๋ผ ๋…ธ๋“œ ์‹คํ–‰

# realsense ์นด๋ฉ”๋ผ ์˜ˆ์‹œ
roslaunch realsense2_camera rs_camera.launch

 

3. ์บ˜๋ฆฌ๋ธŒ๋ ˆ์ด์…˜ ๋„๊ตฌ ์‹คํ–‰

rosrun camera_calibration cameracalibrator.py \
  --size 7x6 --square 0.024 \
  --no-service-check \
  image:=/camera/color/image_raw \
  camera:=/camera/color

 

4. ์บ˜๋ฆฌ๋ธŒ๋ ˆ์ด์…˜ ๊ณผ์ •

  • ์ฒด์ปค๋ณด๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐ๋„์—์„œ ๋ณด์—ฌ์คŒ
  • Success ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๋ฉด /tmp/calibrationdata.tar.gz ์— ์ €์žฅ๋จ

 

5. ๊ฒฐ๊ณผ ์ ์šฉ

  • ์ €์žฅํ•œ ๊ฒฐ๊ณผ ์••์ถ•ํŒŒ์ผ ํ•ด์ œ
cd /tmp
tar -xvzf calibrationdata.tar.gz
  • yaml ํŒŒ์ผ์„ camera_info์— ์ ์šฉํ•ด์•ผ ํ•จ (๋…ธ๋“œ์—์„œ ์ง์ ‘ ์ ์šฉ or launch ํŒŒ์ผ ์ˆ˜์ •)
<!-- launch/realsense_with_calib.launch -->
<launch>
  <node pkg="image_proc" type="image_proc" name="image_proc" output="screen">
    <remap from="image" to="/camera/color/image_raw" />
    <remap from="camera" to="/camera/color" />
    <param name="camera_info_url" value="file:///home/your-name/realsense_calib.yaml" />
  </node>
</launch>

 

๐Ÿง  3. YOLO๋กœ ์‹ค์‹œ๊ฐ„ ๊ฐ์ฒด ์ธ์‹

 

โœ… ๋ชฉํ‘œ

 

YOLO๋ฅผ ์ด์šฉํ•ด ์นด๋ฉ”๋ผ ์˜์ƒ ์† ๊ฐ์ฒด๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํƒ์ง€

 

YOLO v5 ์„ค์น˜

 

๐Ÿ YOLO ๋…ธ๋“œ(Python) ์˜ˆ์‹œ

 
#!/usr/bin/env python

import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2
import torch

class YOLODetector:
    def __init__(self):
        self.model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
        self.bridge = CvBridge()
        self.sub = rospy.Subscriber("/camera/color/image_raw", Image, self.callback)
        self.pub = rospy.Publisher("/yolo_output", Image, queue_size=1)

    def callback(self, msg):
        img = self.bridge.imgmsg_to_cv2(msg, "bgr8")
        results = self.model(img)
        results.render()
        img_out = self.bridge.cv2_to_imgmsg(results.ims[0], "bgr8")
        self.pub.publish(img_out)

if __name__ == "__main__":
    rospy.init_node("yolo_detector")
    YOLODetector()
    rospy.spin()

 

๐Ÿš€ launch ํŒŒ์ผ ์˜ˆ์‹œ

<launch>
  <node pkg="3d_reconstruct" type="yolo_detector_node.py" name="yolo_detector" output="screen" />
</launch>

 

 

๐Ÿšง 4. ์—๋Ÿฌ์™€ ๋ฌธ์ œ ํ•ด๊ฒฐ

โŒ Service not found

→ ์นด๋ฉ”๋ผ๊ฐ€ ์•„์ง ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ topic ์ด๋ฆ„์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ

โŒ rqt_image_view์—์„œ ์ด๋ฏธ์ง€ ์•ˆ ๋‚˜์˜ด

→ ์นด๋ฉ”๋ผ ๋…ธ๋“œ, ํ† ํ”ฝ ์ด๋ฆ„ ํ™•์ธ ํ•„์š”
→ image_raw ํ† ํ”ฝ์ด ์ œ๋Œ€๋กœ ํผ๋ธ”๋ฆฌ์‹œ๋˜๊ณ  ์žˆ๋Š”์ง€ rostopic echo๋กœ ํ™•์ธ

โŒ RLException launch ์˜ค๋ฅ˜

→ roslaunch๋Š” ํŒจํ‚ค์ง€ ๋‚ด๋ถ€์˜ launch ํด๋”๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘๋™ํ•จ
→ ํ•ด๋‹น ํŒŒ์ผ์ด ์‹ค์ œ๋กœ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , catkin_make๋กœ ๋‹ค์‹œ ๋นŒ๋“œ ํ•„์š”

 

 

โœ… 5. ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

 

์ด ๊ธ€์—์„œ๋Š” ROS์—์„œ ์นด๋ฉ”๋ผ ์บ˜๋ฆฌ๋ธŒ๋ ˆ์ด์…˜์„ ์‹œ์ž‘์œผ๋กœ, YOLO๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด ์ธ์‹์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์ •๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค.
์ฒ˜์Œ์—๋Š” ์–ด๋ ต์ง€๋งŒ, ํ•˜๋‹ค ๋ณด๋ฉด ์žฌ๋ฏธ๋„ ์žˆ๊ณ  ์„ฑ์ทจ๊ฐ๋„ ํฝ๋‹ˆ๋‹ค.
ROS + YOLO๋ฅผ ์ด์šฉํ•˜๋ฉด ์นด๋ฉ”๋ผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์žฌ๋ฐŒ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.