본 논문은 2021년에 나온 논문으로 스테레오 카메라를 통해 장애물을 인지하고 이를 기반으로 목표 지점까지 최적의 경로를 계산하는 드론 시스템을 개발하여 이를 검증한다. 장애물 회피 시뮬레이션에서 인지한 장애물은 Octomap을 사용하여 3차원 공간에 장애물 위치를 매핑하고 드론의 목표지점까지 최적의 경로를 계산했다. 나아가 간단히 실외 환경에서도 장애물 회피가 가능함을 보였다.
관련연구를 통해 강화학습 기반의 장애물 회피 연구가 수행되고 있음을 알게 되었고 결과적으로는 추후에는 강화학습 기반으로 연구를 이어가야겠다는 생각이 들었다. 장애물을 회피하면서 자율비행을 수행하는 드론 시스템 개발을 위해 저자는 먼저 하드웨어 측면과 소프트웨어 측면으로 나누어 시스템을 구성했다. 먼저 하드웨어 측면은 다음과 같다.
- 간단한 딥러닝 연산이 가능한 Jetson Nano Develop Kit을 장착
- 미션 컴퓨터는 비행제어 컴퓨터와 유선 시리얼 통신으로 연결되며 비행 상태 정보를 기반으로 최적 경로를 계산함
- 장애물 인지를 위해 스테레오 카메라 인텔 리얼센스 D455 사용
- 0.6m ~ 최대 6m 까지의 물체를 인식해 Point Cloud 형태로 출력함
- 카메라는 최대 해상도 1280x720로 30fps의 Point Cloud 데이터 획득 가능
- 정밀 위치 추정을 위해 Piksi Multi GNSS 모듈 사용 (LTE 모듈)
- 개발한 드론은 이륙 중량 2kg, 4셀 6400mah 배터리에 최대 20분 비행 가능
한 가지 팁은 대용량의 Point Cloud 데이터를 원활하게 얻기 위해선 USB 3.0 인터페이스를 사용해야 하나 USB 3.0 케이블에 전원이 인가되면 주변 GPS 정보를 교란하는 현상이 있어 USB 2.0 케이블을 이용해 스테레오 카메라 정보를 획득해야 했다는 점이다.
소프트웨어 측면으로는 microRTPS를 통해 uORB 토픽을 ROS2 토픽으로 바꿔 비행제어 데이터를 미션 컴퓨터 측으로 송신하도록 구성했다. 또 스테레오 카메라가 획득하는 Point Cloud 데이터의 경우 순간 데이터 통신량이 높기 때문에 대용량 데이터 처리를 위한 QoS 설정을 통해 원활한 데이터 처리가 가능하도록 설정했다.
여기까지가 드론 시스템 개발에 대한 하드웨어 측면과 소프트웨어 측면에 대한 기술이다. 이후에는 핵심인 장애물 회피 시스템을 개발하고 시뮬레이션 한 것에 대해 기술하고자 한다.
저자는 장애물을 회피하고 목표지점까지 갈 수 있는 전역경로계획(Global Path Planner)를 개발하여 적용했다. 아래는 전역경로계획 시스템의 아키텍처다.
크게 경로를 계산하는 Global Planner Node와 주변환경과 장애물을 3차원 그리드로 저장하는 Octomap Node로 구성되어 있다. Global Planner Node는 비행제어 컴퓨터(FCC)로부터 자세 정보인 vehicle_attitude와 위치 정보인 vehicle_global_position, vehicle_local_position을 수신한다. 또 스테레오 카메라로부터 획득하는 주위 환경에 대한 Depth 데이터를 모두 결합하여 드론의 주변 환경을 인식한 결과를 Octomap Node로 전달한다.
Octomap Node는 이렇게 전달받은 데이터를 기반으로 3차원 occupancy grid 형태로 만들고 다시 Global Planner Node로 전달하면 이 3차원 정보를 기반으로 비행목적지까지 장애물을 우회해 비행 가능한 최적의 경로를 실시간으로 계산한다. 이후 Global Planner Node는 현재 위치에서 목표 지점을 vehicle_command를 통해 PX4로 전달하고 PX4는 이 지점을 다음 waypoint로 설정하여 비행을 수행하는 방식이다.
아래는 전역경로계획을 사용하여 장애물회피주행을 수행하는 그림이다. 좌측에는 Gazebo 시뮬레이션이 구동되고 우측상단은 Octomap Node에서 생성한 3차원 occupancy grid이며 그 아래는 GCS인 QgroundController다.
여기까지가 전역경로계획을 기반으로 장애물을 회피하여 목표지점까지가는 시스템에 대한 설명이다. 저자는 나아가 장애물을 회피하면서 비행을 할 때 효율적인 비행이 필요하다고 말한다. 여기서 말하는 효율적인 비행이란 위험도가 낮은 비행구간에서는 빠른 비행을 하고 위험도가 높은 구간에서는 천천히 비행할 필요성이 있다고 말한다. 여기서 위험도는 어떻게 정의될까? 아쉽게도 이에 대한 내용은 없다. 다만 현재의 위험도가 사용자가 임의 지정한 threshold를 넘으면 속도를 최소화하고 그렇지 않다면 속도를 증가시키는 방면으로 다음과 같이 알고리즘이 동작한다는 것만 알 수 있었다.
저자는 비행을 위해 사용한 파라미터를 다음과 같이 별도로 정리했다. PX4에는 수 백 여개의 파라미터가 있는 만큼 비행과 관련된 중요한 몇몇 파라미터를 정리해주었다는 점에서 다소 큰 팁이라 느낀다. 아래 파라미터 중 위험도 기반 속도제어에 사용했던 파라미터는 min_speed_와 max_speed_다.
아래 그림은 위험도를 고려했을 때와 고려하지 않았을 때의 비행을 비교하여 나타낸 것이다.
초록선은 속도조절 알고리즘을 적용한 것이며 빨간선은 속도조절 알고리즘을 적용하지 않았을 때다. 그 결과 적용했을 때 목표지점까지 20초가 걸렸고 적용하지 않았을 때 32초가 걸렸다. 이를 통해 효율적인 주행을 위해서는 이러한 위험도를 계산하고 때에 따라 속도를 조절하는 알고리즘이 필요하다는 것을 알 수 있다.
'Computer Science > 로봇공학' 카테고리의 다른 글
SLAM의 이해와 구현 PART 01 요약 (0) | 2023.07.17 |
---|---|
[로봇공학] PID 제어 (Proportional-Integral-Differential control) (0) | 2023.07.04 |
[논문리뷰] 오픈소스 소프트웨어 PX4를 이용한 UAV 자율탐사 및 경로계획에 관한 연구 (0) | 2023.06.29 |
[논문 리뷰] PX4 Autopilot 기반 드론의 데이터 추출 및 분석 도구 (0) | 2023.06.29 |
[논문 리뷰] 실내 자율비행 드론을 위한 위치 및 고도 제어 (0) | 2023.06.28 |