ROBOTICS (2)

 

 

🐣 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를 이용하면 카메라를 기반으로 하는 다양한 재밌는 애플리케이션을 만들어 볼 수 있습니다.

 

 

 

 

 

 

RealSense 카메라를 Ubuntu 20.04 환경에서 ROS Noetic으로 연결하고, rviz로 실시간 영상을 띄우기까지의 과정을 정리했다. zsh 환경 기준이며, CUDA + cuDNN 세팅이 이미 되어 있는 상태에서 시작한다.


💡 사전 준비

  • Ubuntu 20.04
  • ROS Noetic 설치
  • zsh (선택사항)
  • CUDA, cuDNN 설치
  • RealSense 카메라

 

📦 ROS RealSense 패키지 설치

 

먼저 RealSense ROS 드라이버를 설치한다.

cd ~/catkin_ws/src
git clone https://github.com/IntelRealSense/realsense-ros.git
cd ..
catkin_make

 

만약 catkin_ws가 없다면 다음 명령어로 워크스페이스를 생성한다.

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make

 

.zshrc에(또는 .bashrc) 워크스페이스 등록:

echo "source ~/catkin_ws/devel/setup.zsh" >> ~/.zshrc
source ~/.zshrc

 

 

🚨 에러 발생: librealsense2.so 누락

RealSense ROS 노드를 실행했더니 아래와 같은 에러가 발생했다:

Failed to load library librealsense2.so.2.50: cannot open shared object file: No such file or directory
 
 
 

🔧 해결: librealsense2 SDK 수동 설치

Intel 공식 GitHub에서 직접 SDK를 빌드한다.

sudo apt install git libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev cmake build-essential
cd ~
git clone https://github.com/IntelRealSense/librealsense.git
cd librealsense
mkdir build && cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
sudo ldconfig

이제 아래 경로에 .so 파일이 생겨야 한다:

ls /usr/local/lib/librealsense2.so*

 

🔥 실행: RealSense ROS 노드

카메라를 띄워보자.

roslaunch realsense2_camera rs_camera.launch

 

⚠️ 경고 로그: Asic Temperature

Asic Temperature value is not valid!

→ 무시해도 되는 로그다. 센서 온도 정보를 못 읽는 경우인데, 영상에는 전혀 영향을 주지 않는다.

 

🖼️ 카메라 영상 보기

▶️ rqt_image_view

rqt_image_view

열린 GUI에서 /camera/color/image_raw 토픽을 선택하면 컬러 영상 확인 가능!

 

▶️ 또는 rviz

rviz
 
설정 방법
  1. Fixed Frame → camera_link로 설정
  2. 좌측 Add 클릭 → Image 선택
  3. Image Topic → /camera/color/image_raw 선택

이제 rviz 창에서 실시간 카메라 영상을 확인할 수 있다.

 

🧪 rostopic으로 확인

 
rostopic list

 

토픽 목록 예시:

/camera/color/image_raw
/camera/depth/image_rect_raw
/camera/depth/color/points

 

 


이제 실시간 RGB, Depth 스트리밍이 가능하고, 이후에는 Object Detection, SLAM 등 원하는 프로젝트로 확장할 수 있다.

 

 

1