Я программирую вертолетный беспилотный вертолет, чтобы автоматически преследовать движущуюся наземную цель, используя обработку изображений. Аппаратное обеспечение, с которым я работаю, довольно ограничено, поэтому для того, чтобы мои автоматические команды учитывали скорость беспилотника (он не знает, когда он движется), мне нужно вручную отслеживать относительное положение цели с течением времени (которое может быть примерно переведено в движение беспилотника).
Итак, вот что я имею в виду:
int lastX = Targets_Last_Position_Xcoord();
int lastY = Targets_Last_Position_Ycoord();
int nowX = Targets_Current_Position_Xcoord();
int nowY = Targets_Current_Position_Ycoord();
int speedModX = (float)(60 - (abs(lastX)-abs(nowX))) / 60.0f; // Image dimension is 120
int speedModY = (float)(73 - (abs(lastY)-abs(nowY))) / 73.0f; // Other dimension is 146
changePitch(((nowX - 60)/60.0f)*(1 + speedModX));
changeRoll(((nowY - 73)/73.0f)*(1 + speedModY));
Функция «changePitch» и другие подобные ей заставляют следующую команду, отправляемую дрону, включать изменение высоты тона указанного процента от заданного максимального наклона. Итак, я приказываю дрону наклонять количество, напрямую связанное с расстоянием до цели от центра экрана; затем я добавляю множитель, основанный на том, куда двигалась цель (расстояние между последней точкой цели и ее текущей точкой).
Это мое намерение в любом случае; кажется, что этот код только помогает, и другие факторы, такие как воздушный поток и механический дисбаланс (это не самое качественное оборудование), могут мешать, оставляя меня просто видеть то, что я хочу видеть.
Является ли метод, который я использую для расчета правильной скорости дрона, и / или есть ли лучший способ справиться с этим?
РЕДАКТИРОВАТЬ: вычисление speedModX и speedModY было изменено, предыдущая форма имела нежелательные результаты при некоторых обстоятельствах. Новая формула правильно создает модификатор, основанный на разнице между предыдущим расстоянием цели от начала координат и текущим расстоянием цели от начала координат.