본 논문은 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초가 걸렸다. 이를 통해 효율적인 주행을 위해서는 이러한 위험도를 계산하고 때에 따라 속도를 조절하는 알고리즘이 필요하다는 것을 알 수 있다.

2020년 한국항공우주학회에서 나온 논문으로, 핵심 내용은 PX4 기반 쿼드콥터에 스테레오 카메라를 사용하여 3차원 공간에서 자율탐사와 실시간 경로계획을 수행한 것이다. 경로계획을 위해 크게 광역 경로계획과 지역 경로계획으로 나누어 알고리즘을 수행했다. 

 

광역경로계획

광역경로계획은 그리드 맵을 사용하는 A* 계열 알고리즘이 많이 사용된다. A* 알고리즘은 2차원에서는 8방향 3차원에서는 26방향으로 인접한 노드를 연결하여 경로를 생성한다. 하지만 이러한 A* 알고리즘은 직선과 45도 방향의 대각선만 사용할 수 있다는 단점이 있다. 따라서 이러한 고정된 각도가 아닌 임의의 각도를 사용할 수 있는 Theta* 알고리즘이 만들어졌고, 또 A* 알고리즘의 검색 정보를 다음 검색에 재활용하여 빠른 속도로 탐색할 수 있는 D* 알고리즘 등이 연구되고 있다.

 

해당 논문에서는 A* 계열 알고리즘 중 속도가 가장 빠른 JPS 알고리즘을 사용했다. JPS 알고리즘은 논리적 동치 관계를 이용해 탐색 노드수를 크게 줄인 알고리즘이다. 그리드 맵의 크기가 커질수록 탐색 시간이 지수 함수 형태로 증가하는 A* 알고리즘을 선형에 가까운 탐색시간 증가율을 보이기 때문에 계산효율이 좋다는 특징이 있다.

 

지역경로계획

그리드 맵에 거리 정보를 추가하는 것은 그리드 맵의 각 장애물 셀마다 주변 셀에 거리 정보를 전파하는 방식으로 구현된다. 하지만 3차원 공간에서는 전파해야 할 정보가 상대적으로 많기 때문에 실시간 경로계획에 많은 시간이 소요된다. 이러한 계산효율 문제를 해결하기 위해 지역 그리드 맵이 사용된다. 아래 그림은 광역 경로계획(빨강)으로 출력된 경로를 지역 경로계획으로 수정한 경로(노랑)를 시각화한 것이다. 저자에 따르면 수정된 노란 경로가 더 안전한 경로라고 한다.

 

 

결과적으로 경로계획 알고리즘 수행 알고리즘으로 목표 속도와 yaw rate를 계산하여 PX4 노드에 Offboard 명령 메시지로 전달하여 드론을 제어한다. 이를 Gazebo 시뮬레이션 상에 적용하여 자율탐사로 매핑을 수행한 결과는 다음과 같다.

 

 

새롭게 알게 된 점은 경로계획 관련 알고리즘에 A*, Theta*, D* 이 사용된다는 점이고, 아직 사용해보지 않았지만 SLAM을 위해 Octomap을 사용한다는 점을 알게됨

 

 

2021년 한국항공우주학회에서 나온 논문이다. 내용의 핵심은 드론이 장애물을 회피하면서도 안전하게 비행할 수 있는 전역 경로 플래너(Global Path Planner)를 개발한 것으로 아래와 같은 아키텍처를 갖는다. 비행제어 S/W로는 PX4를 활용했고 미션 컴퓨터로는 Jetson Nano를 사용했다. 

위 아키텍처의 핵심은 Mission Computer 내의 Global Planner Node와 Octomap Node 두 가지다. Global Planner Node는 PX4로부터 드론의 자세정보(vehicle_attitude)와 위치정보(vehicle_local_position, vehicle_global_position)를 수신하고 동시에 Depth data를 수신한다. 이후 Depth data의 정확한 위치를 계산한 값을 Octomap Node로 보낸다. Octomap Node는 수신 받은 데이터를 사용해 비행 구역의 장애물 유무를 3차원 occupancy grid map으로 만들어 Global Planner Node로 전달한다. 이후 Global Planner Node는 Octomap Node에서 전달받은 3차원 지형정보를 기반으로 드론이 목표지점까지 장애물과 충돌하지 않고 안전히 비행할 수 있는 경로를 지속적으로 계산하여 PX4에 다음 위치를 명령하는 방식으로 비행이 이뤄진다. 

 

위와 같이 구성한 아키텍처는 gazebo 환경에서 PX4-ROS2 기반의 경로 계획을 수행하는 시뮬레이션을 통해 그 동작을 확인하였다. 인식한 장애물을 우측상단의 rviz를 통해 3차원 맵으로 시각화하였고 또 목적지까지 장애물을 회피하며 비행하였다. 

 

 

실질적으로 얼마나 잘 동작했는지는 확인할 수 없었지만 목표지점 도달을 위해 경로 계획(Path planning)이 필요하고 이러한 경로 계획에 필요한 여러 파라미터 값을 알 수 있었다. 예컨데 vehicle_command를 통해 드론의 위치 명령을 내리거나 up_cost, down_cost를 조정해 드론의 수직이동에 소모되는 에너지를 다르게 계산한다는 점, 또 risk_factor, neighbor_risk_flow를 조정해 지형지물의 위험도 수준을 다르게 줄 수 있다는 점을 알게 됐다. 또 새롭게 접하게 Octomap과 occupancy grid map이 있었고 향후 이에 대해 알아보고자 한다.

+ Recent posts