Оптимизация управления подвесом в режиме слежения с помощью mavlink v1.0Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Оптимизация управления подвесом в режиме слежения с помощью mavlink v1.0

Сообщение Anonymous »

В настоящее время я работаю над разработкой и оптимизацией своей системы управления подвесом, интегрированной с камерой дрона, для режима слежения. Из-за ограничений прошивки моего подвеса я использую Протокол Mavlink версии 1.0 вместо версии 2.0. Это ограничивает меня возможностью непосредственного управления углом подвеса во времени с помощью команды MAV_CMD_DO_MOUNT_CONTROL, а не управления угловой скоростью с помощью команды MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW, доступной в Mavlink v2.0.
Обзор системы
  • Отзыв об ограничивающей рамке: Ограничительные рамки возвращаются с частотой примерно 20 Гц (20 кадров в секунду).
  • ПИД-контур. Я использую ПИД-контур для косвенного расчета и управления скоростью подвеса с помощью корректировка угла с течением времени. Контур работает на частоте 30 Гц, что выше частоты ограничивающего прямоугольника, чтобы избежать пропуска обновлений.
  • Настройка ПИД: Параметры ПИД (P, I, D) были настроены для хорошей работы со статическими объектами.
Возникла проблема
Отзывчивость подвеса при отслеживании перемещение объектов происходит медленно и не хватает ловкости. При отслеживании движущейся цели подвес не может отрегулироваться достаточно быстро, чтобы удерживать цель в центре кадра. Скорость подвеса кажется недостаточной, чтобы догнать цель, в результате чего цель остается заметно смещенной от центра экрана.
Это мой простой код и работающее видео
видео:

Код: Выделить всё

from simple_pid import PID
from threading import Thread
import time
from pymavlink import mavutil

class GimbalControl:
def __init__(self):
self.master = mavutil.mavlink_connection('dev/ttyUSB0', baud=57600)
self.pid_p = PID(0.058, 0.0, 0.0, sample_time=None)
self.pid_t = PID(0.064, 0.0, 0.0, sample_time=None)
self.pan_rate = 0
self.tilt_rate = 0
self.signal_tracking = False
self.resolution = (1280, 720)
self.hfov = 61.5
self.vfov = 37
self.zoom_ratio = 1

# Start thread to get orientation of Gimbal
Thread_PID= Thread(target=self.PID_callback, daemon=True)
Thread_PID.start()

def PID_callback(self):
while True:
if self.signal_tracking:
# PID feedback value
pan = self.pid_p(self.pan_rate)
tilt = self.pid_t(self.tilt_rate)
tilt_move, pan_move = self.cal_pos(pan, -tilt)

# Send command to Gimbal
self.send_mount_control(tilt_move, pan_move, 0)
time.sleep(1/30)  #30Hz

def Track(self, bbox):
# Get bbox data from camera with 20Hz
if bbox[4] > 0.5:
# calculate center of bbox
x, y = self.cal_box_center(bbox)
self.pan_rate, self.tilt_rate = self.cal_error_pos(x, y, self.zoom_ratio)
# Start tracking
self.signal_tracking = True
else:
# Stop tracking when completely lost object
self.signal_tracking = False
# Reset PID when lost object
self.pid_p.reset()
self.pid_t.reset()

def cal_box_center(self, bbox):
center_x = bbox[0] + bbox[2] // 2
center_y = bbox[1] + bbox[3] // 2
return center_x, center_y

def cal_error_pos(self, box_center_x, box_center_y, zoom_ratio=1):
# Set params tracking for mode camera
# Calculate origin center of frame
origin_center_x = self.resolution[0] // 2
origin_center_y = self.resolution[1] // 2

# Calculate difference between gimbal center and filtered position
dbox_x = origin_center_x - box_center_x
dbox_y = origin_center_y - box_center_y

# Stop gimbal when object is in the center of the frame
dbox_x = 0 if abs(dbox_x) < 10 else dbox_x
dbox_y = 0 if abs(dbox_y) < 10 else dbox_y

# Convert pixel to angle
pan_angle = (dbox_x / origin_center_x) * (self.hfov / 2) / zoom_ratio
tilt_angle = (dbox_y  / origin_center_y) * (self.vfov / 2) / zoom_ratio
return pan_angle, tilt_angle

def send_mount_control(self, tilt, pan, roll):
self.master.mav.command_long_send(
1,          # System ID
154,        # Component ID
mavutil.mavlink.MAV_CMD_DO_MOUNT_CONTROL,
1,          # Confirmation
tilt,       # Param 1
roll,       # Param 2
pan,        # Param 3
0, 0, 3,    # Param 4, 5, 6
mavutil.mavlink.MAV_MOUNT_MODE_MAVLINK_TARGETING)
Требуется помощь
Мне нужен совет, как улучшить скорость и маневренность подвеса при отслеживании движущихся объектов с помощью Mavlink v1. 0 (MAV_CMD_DO_MOUNT_CONTROL). Моя цель — управлять стабилизатором так, чтобы отслеживаемый объект оставался как можно ближе к центру кадра.
Я был бы очень признателен за любые предложения, идеи или решения, которые может предложить сообщество. предоставлять. Заранее благодарим вас за поддержку и советы!

Подробнее здесь: https://stackoverflow.com/questions/792 ... vlink-v1-0
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»