반응형
안녕하세요! ✨
앞서 Day 16에서는 초음파 센서 원리와 주차 보조 사례를 살펴봤습니다.
오늘은 한 단계 더 나아가, ROS2(Robot Operating System 2) 환경에서 초음파 센서를 연동해 데이터를 다루는 방법을 정리해보겠습니다.
🔍 ROS2에서 초음파 센서를 사용하는 이유
ROS2는 다양한 센서를 표준화된 방식으로 연결하고 제어할 수 있는 플랫폼입니다.
초음파 센서를 ROS2에 연동하면:
- /ultrasonic 같은 토픽(topic) 으로 거리 데이터 송수신
- RViz2에서 실시간 시각화
- LiDAR, Radar 등 다른 센서와의 융합(Sensor Fusion) 가능
👉 자율주행 차량의 주차 보조 시스템이나 근거리 안전 기능을 구현할 때 유용합니다.
⚙️ 초음파 센서 ROS2 연동 절차
1. 하드웨어 연결
- 아두이노(Arduino), 라즈베리파이(Raspberry Pi) 같은 보드에 초음파 센서(HC-SR04 등) 연결
- 거리 측정 신호를 ROS2 메시지 형식으로 변환
2. ROS2 패키지 작성
초음파 센서를 위한 노드를 작성합니다. (Python 예제)
python
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Range
import time
class UltrasonicNode(Node):
def __init__(self):
super().__init__('ultrasonic_node')
self.publisher_ = self.create_publisher(Range, '/ultrasonic', 10)
self.timer = self.create_timer(0.1, self.publish_range)
def publish_range(self):
msg = Range()
msg.header.stamp = self.get_clock().now().to_msg()
msg.header.frame_id = "ultrasonic_link"
msg.radiation_type = Range.ULTRASOUND
msg.field_of_view = 0.5
msg.min_range = 0.02
msg.max_range = 4.0
msg.range = 1.25 # 예시 값 (1.25m)
self.publisher_.publish(msg)
self.get_logger().info(f"Ultrasonic range: {msg.range} m")
def main(args=None):
rclpy.init(args=args)
node = UltrasonicNode()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
from rclpy.node import Node
from sensor_msgs.msg import Range
import time
class UltrasonicNode(Node):
def __init__(self):
super().__init__('ultrasonic_node')
self.publisher_ = self.create_publisher(Range, '/ultrasonic', 10)
self.timer = self.create_timer(0.1, self.publish_range)
def publish_range(self):
msg = Range()
msg.header.stamp = self.get_clock().now().to_msg()
msg.header.frame_id = "ultrasonic_link"
msg.radiation_type = Range.ULTRASOUND
msg.field_of_view = 0.5
msg.min_range = 0.02
msg.max_range = 4.0
msg.range = 1.25 # 예시 값 (1.25m)
self.publisher_.publish(msg)
self.get_logger().info(f"Ultrasonic range: {msg.range} m")
def main(args=None):
rclpy.init(args=args)
node = UltrasonicNode()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
👉 위 코드는 실제 센서 데이터를 읽는 대신, 가상 거리 값(1.25m) 을 퍼블리시하는 예시입니다.
실제 센서를 연결하면 거리 계산 로직을 추가해야 합니다.
3. RViz2에서 시각화
bash
rviz2
- Range 메시지를 불러와서 초음파 데이터가 실시간으로 표시되는지 확인
🚘 활용 포인트
- 주차 보조 시스템 시뮬레이션: 초음파 기반 거리 알림
- 저속 환경 안전 기능: 보행자나 벽과의 근접 탐지
- 다중 센서 융합: LiDAR·Radar·Camera와 함께 학습 및 테스트
📌 정리
- 초음파 센서는 ROS2 환경에서 Range 메시지로 연동 가능
- Python 코드로 손쉽게 노드를 작성하고 토픽 퍼블리시
- RViz2로 시각화하면 실시간 데이터 확인 가능
- 자율주행의 근거리 안전 및 주차 기능에 필수
반응형
🚀 다음 글 예고
다음 글에서는 [Day 18: 센서별 장단점 정리 (LiDAR vs Camera vs Radar)] 를 다룹니다.
각 센서의 특성과 장단점을 비교하면서, 자율주행차에서 왜 센서 융합이 필요한지 설명해드리겠습니다.
✅ 오늘 글이 도움이 되셨다면 좋아요와 공유 부탁드립니다.
반응형
'자율주행' 카테고리의 다른 글
🔎 Day 18: 센서별 장단점 정리 (LiDAR vs Camera vs Radar) (0) | 2025.09.14 |
---|---|
📡 Day 16: 초음파 센서 원리 및 주차 보조 사례 (0) | 2025.09.12 |
👀 Day 15: 객체 검출 기본 (Haar Cascade, HOG + SVM) (0) | 2025.09.11 |
🛣️ Day 14: 차선 검출 실습 (OpenCV) (0) | 2025.09.10 |
🎥 Day 13: 영상 처리 기초 (Canny Edge, Hough Transform) (0) | 2025.09.09 |