🐣 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를 이용하면 카메라를 기반으로 하는 다양한 재밌는 애플리케이션을 만들어 볼 수 있습니다.
'ROBOTICS' 카테고리의 다른 글
📷️ RealSense 카메라를 Ubuntu + ROS Noetic에서 띄우기 (feat. rviz로 영상 보기) (0) | 2025.04.17 |
---|