본문 바로가기

ROS2

[두산로보틱스] 자동 SLAM 및 센서 퓨전 프로젝트

 

자율 탐색 및 객체 인식 재난로봇 _ Gamma.pdf
11.01MB

 

 

 

01234

자동 SLAM 및 객체 인식 기반 재난 로봇 시스템

프로젝트 개요

  • 목적: 재난 환경에서 실내 자동 탐색 및 객체 인식을 통해 요구조자에게 실시간 정보를 제공하고, 안전한 환경 조성을 지원하는 로봇 시스템 개발.
  • 기능:
    • SLAM: 실시간 맵핑과 로봇의 위치 추정.
    • 센서 퓨전: 카메라와 LiDAR 데이터를 통합하여 환경과 객체를 정밀하게 인식.
    • 객체 인식: 사람과 소화기와 같은 주요 객체를 실시간으로 감지하고, 맵 상에 위치 마커를 표시.

기술 스택

  • 프레임워크 및 라이브러리:
    • ROS2 Humble
    • OpenCV
    • Python
  • 알고리즘:
    • RRT (Rapidly-Exploring Random Tree): 샘플링 기반 경로 계획법으로 초기 탐색 경로 생성.
    • Frontier 탐색: 탐사된 영역과 미탐사 영역의 경계를 그룹화하여 탐색 우선순위를 결정.
    • FLANN (Fast Library for Approximate Nearest Neighbors): 빠른 특징점 매칭을 위한 라이브러리.
    • RANSAC (Random Sample Consensus): 객체의 3D 위치 추정을 위한 아웃라이어 제거 알고리즘.
  • 센서 및 데이터:
    • RGB 카메라
    • LiDAR 센서 (정확한 거리 및 장애물 정보 제공)

SLAM 및 자율 탐색

  • RRT 기반 탐색 알고리즘:
    • 랜덤 샘플링으로 탐색 경로를 생성하며, 장애물을 효율적으로 회피할 수 있는 경로를 계산.
    • 휴리스틱 함수를 사용하여 목표 지점과의 거리 우선 순위를 설정함으로써, 빠르고 효율적인 경로 탐색 가능.
    • 충돌 검사 과정을 통해 로봇이 안전한 경로를 이동하도록 보장.
  • Frontier 탐색:
    • SLAM 맵 데이터에서 탐사된 공간과 미탐사 공간 사이의 경계를 **탐색 경계선(Frontier)**으로 식별.
    • 탐색 경계선이 포함된 영역을 그룹화하고, 그룹 중심점을 기준으로 가장 가까운 목표를 선택하여 이동 경로를 생성.
    • 탐사 경계선이 더 이상 없거나 모두 장애물로 막혀 있는 경우 탐색이 완료되었다고 판단.
  • 맵 저장 조건:
    • 모든 탐사 가능한 공간이 확인되었을 때 맵을 저장.
    • ROS2의 map_saver_cli 명령을 통해 OccupancyGrid 형식의 맵 데이터를 저장하며, 저장된 맵은 향후 네비게이션에 사용.

객체 인식 및 맵 표현

1. 센서 퓨전을 이용한 방법

  • 방법:
    • 카메라에서 인식된 객체를 LiDAR 데이터와 결합하여 정확한 위치를 추정.
    • 객체를 카메라 프레임의 중앙으로 정렬시키고, LiDAR의 거리 데이터를 사용해 3D 위치를 계산.
    • 정렬된 데이터는 SLAM 맵에 마커 형태로 시각화.
  • 장점:
    • LiDAR와 카메라 데이터를 융합하여 높은 정확도의 객체 위치 추정 가능.
    • 다양한 센서 데이터를 결합하여 객체의 정보를 제공.
  • 결과:
    • 동기화된 데이터를 기반으로 정확히 표시된 객체 위치와 실시간 장애물 회피 지원.

2. PnP를 이용한 방법

  • 방법:
    • 카메라 데이터만을 사용하여 객체의 대략적인 3D 위치를 추정.
    • SIFT 및 FLANN 알고리즘으로 객체의 특징점을 매칭하고, RANSAC 기반의 PnP(Perspective-n-Point) 알고리즘을 통해 객체 위치 계산.
    • 객체 위치는 SLAM 맵에 대략적인 좌표로 표시.
  • 장점:
    • 카메라 데이터만으로도 간단히 객체 위치를 추정 가능.
    • 추가적인 센서 없이 경량화된 구현 가능.
  • 결과:
    • 객체 위치를 빠르게 추정하여 SLAM 맵에 반영하지만, 정확도는 센서 퓨전 방법보다 낮음.

시스템 구성

Node 구성

  • detect_things.py:
    • 객체 감지 및 위치 추정.
    • 카메라 이미지 구독(/oakd/rgb/preview/image_raw/compressed).
    • 로봇 위치(/amcl_pose) 구독.
  • Control2.py:
    • SLAM 및 자율 탐색 노드.
    • 맵(/map), 라이다(/scan), 오도메트리(/odom) 데이터 처리.
    • 이동 명령 퍼블리시(/cmd_vel).
  • Control_draw_rviz.py:
    • RViz에서 객체 위치 시각화 및 마커 퍼블리시.

성과

  • 실시간 SLAM 맵 생성 및 저장.
    • 평균 맵 정확도: 95% (객체의 위치와 장애물 탐지의 일치도 기반).
  • 탐색 시간: 1m x 1m 공간당 평균 3초 소요.
  • 사람과 소화기와 같은 주요 객체를 두 가지 방식(센서 퓨전 및 PnP)으로 맵 상에 표시.
    • 센서 퓨전 방식: 위치 정확도 ±5cm.
    • PnP 방식: 위치 정확도 ±20cm.
  • 장애물 회피 및 최적 경로 탐색 성공.

배운 점

본 프로젝트를 통해 다음과 같은 중요한 교훈을 얻었습니다:

  1. 센서 퓨전의 중요성:
    • 카메라와 LiDAR 데이터를 동기화함으로써 객체 위치와 환경 정보를 더욱 정확하게 파악할 수 있었습니다.
    • 데이터의 동기화 과정에서 발생하는 오류를 줄이기 위해 카메라 프레임을 정렬하고 센서 간 데이터 일치를 확인하는 기술을 익혔습니다.
  2. 카메라 데이터 활용의 간소화:
    • PnP 알고리즘을 활용하여 추가적인 센서 없이도 대략적인 객체 위치를 추정할 수 있음을 확인했습니다.
    • 경량화된 구현 방법이 필요한 상황에서 효율적인 대안이 될 수 있음을 배웠습니다.
  3. 자동 SLAM의 이해:
    • SLAM을 통해 실시간으로 환경을 맵핑하고, Frontier 탐색 및 RRT 알고리즘을 활용하여 효율적인 자율 탐색이 가능함을 배웠습니다.
    • 장애물 회피와 미탐사 영역 탐색 간의 균형을 맞추는 기술을 습득하여 복잡한 환경에서도 로봇의 효율성을 높였습니다.

이를 통해 향후 더 복잡한 환경에서의 테스트와 객체 인식 대상의 확장 가능성을 탐구할 수 있는 기반을 마련했습니다.