지난 포스트

Gazebo, Ros, Yolov5를 활용한 군집드론추적 - 1

지난 포스트에서 Yolo와 goturn 모델로 상대 드론을 탐지하는 단계까지 구현했다.

이번 포스트에서는 드론을 mavsdk를 활용하여 추적알고리즘을 구현 할 수 있도록 파이썬 코드(→ px4)로 드론을 제어하는 offboard제어를 구현할 것이다.

MAVSDK란?

MAVSDK는 MAVLink 프로토콜을 사용하는 드론과의 통신을 위한 라이브러리이다.

//mavsdk 다운
pip3 install mavsd

import asyncio
from mavsdk import System
from mavsdk.offboard import (VelocityNedYaw,PositionNedYaw, OffboardError)
import logging
logging.basicConfig(level=logging.DEBUG)

SCREEN_WIDTH = 1280/2
SCREEN_HEIGHT = 720/2

async def run():

    """ Does Offboard control using attitude commands. """
    print("Waiting for drone to connect1...")
    drone = System(mavsdk_server_address='localhost', port=50051)
    print("Waiting for drone to connect1.5..")
    await drone.connect(system_address="udp://:14540")

    print("Waiting for drone to connect2...")
    async for state in drone.core.connection_state():
        if state.is_connected:
            print(f"-- Connected to drone!")
            break

    print("Waiting for drone to have a global position estimate...")
    async for health in drone.telemetry.health():
        if health.is_global_position_ok and health.is_home_position_ok:
            print("-- Global position estimate OK")
            break

    print("-- Arming")
    await drone.action.arm()
    
    print("-- Taking off")
    await drone.action.takeoff()

    print("-- Setting initial setpoint")
    await drone.offboard.set_velocity_ned(VelocityNedYaw(0.0, 0.0, 0.0, 0.0))
    await drone.offboard.set_position_ned(PositionNedYaw(0 ,0 ,-5 ,0))

    print("-- Starting offboard")
    try:
        await drone.offboard.start()
    except OffboardError as error:
        print(f"Starting offboard mode failed with error code: \\
              {error._result.result}")
        print("-- Disarming")
        await drone.action.disarm()
        return

    await drone.offboard.set_position_ned(PositionNedYaw(0 ,0 ,-5 ,0))
    await asyncio.sleep(5)

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run())
이전 코드 실행 후 
$ '/home/woo/yolov5env/lib/python3.8/site-packages/mavsdk/bin/mavsdk_server' 
mavsdk서버 활성화.

해당 코드는 mavsdk로 Mavlink에 연결된 드론을 연동 후 Offboard로 드론에 이륙 명령을 전송한 코드이다.

해당 코드를 활용하여 앞전의 Post에서 작성한 drone-tracking.py를 연동하여 추적 알고리즘을 통한 상대 드론을 추적하는 코드를 작성할 것이다.

코드 실행 결과

Screenshot from 2024-03-18 15-05-28.png

참고자료: https://medium.com/@yashuff10/active-tracking-using-opencv-and-px4-drone-simulation-825ca8fa580f