ArduCopter Mega: порт на обычную Arduino (тестим)
при крене
Только проблема, что при крене коптер теряет высоту, поэтому будет точно не 1 метр. А на сильном крене он сваливается.
Предлагаю при сильном крене и отваливающемся сонаре “подмешивать” baro_alt. Как только уровень выровняется, влияние баро_альт сильно ослабить, и использовать сонар_альт на 98%
level>=30: alt = 0.8* alt_предыдущая + 0.2*baro_alt
level<30: alt = 0.98* sonar_alt + 0.02*baro_alt
Борис, именно так забудьте метры, граммы, паскали, считайте в “штуках”.
Все, что можно в константы, все, что считаеттся 1 раз в статические переменные.
level>=30: alt = 0.8* alt_предыдущая + 0.2*baro_alt
0.2* baro_alt будет считаться до скончания веков, запись (baro_alt>>2) эквивалентна 0.25 *baro_alt, а работает 2 такта.
я бы сделал так:
alt = (alt_предыдущая>>1)+(alt_предыдущая>>2)+(baro_alt>>2); //alt = 0.75* alt_предыдущая + 0.25*baro_alt
Только проблема, что при крене коптер теряет высоту, поэтому будет точно не 1 метр. А на сильном крене он сваливается.
Предлагаю при сильном крене и отваливающемся сонаре “подмешивать” baro_alt. Как только уровень выровняется, влияние баро_альт сильно ослабить, и использовать сонар_альт на 98%
level>=30: alt = 0.8* alt_предыдущая + 0.2*baro_alt level<30: alt = 0.98* sonar_alt + 0.02*baro_alt
Кто же будет заниматься высшим пилотажем у земли то? Речь ведь идет о висении на сверхнизких высотах. При болтанке скольжение минимальное, стики по нулям. А про высоты, где сонар не работает вообще другой разговор. В идеале вообще нужно автоматическую посадку вводить. Что бы сам садился в точке взлета, а не болтался над точкой. Подразумевается, что сигнал управления потерян и кренов со скольжением вообще быть не должно.
Можно умножать коэффициенты типа (0.000019876) на 100 000 000 и хранить как int32_t. Только немного повозиться с библиотекой.
Собственно 100 000 000 и будет масштабом в данном случае. Можно так и работать. Если хочется выжать из int32 все, до последнего бита, то масштаб придется в виде степени двойки вычислять, исходя из максимального (разумного) значения величины.
Alex_from_Israel, давно пора эхолот привязывать к коптеру. 😃 И слежение за рыбой реализовать.
кстати, как мегапират будет вести себя если сигнал от пульта ДУ заглушить? Просто рухнет на землю?
Отчед: Начал портировать 2.0.43
Alex_from_Israel, давно пора эхолот привязывать к коптеру. 😃 И слежение за рыбой реализовать.
кстати, как мегапират будет вести себя если сигнал от пульта ДУ заглушить? Просто рухнет на землю?
Вроде файлсейв есть… По идее должен плавно снизить обороты мотором и приземлиться более-менее плавно. Хотя, кто его знает? Я еще и не летал то, как следует. Усе упереди, Козлодоев!
Не, за рыбой не хочу! Я рыбу уважаю с пивом, но не прямо из моря! Проще прикупить в магазине, благо выбор есть. От тараньки до деликатесной семги. А прям из моря тоже можно. На Марине (это у нас так яхт клубы называют) есть ресторанчик в котором рыбу жарят через полчаса после отлова. Рыбаки прямо с катера своего в ресторанчик этот отгружают. Будете в наших краях, обязательно посетите! Классно жарят! Лучше только в Эйлате, в ресторане рыбном. Название странное, что то вроде последний толи причал, толи приют. Не помню точно. Сети и штурвалы по стенам и чудная запеченная в сметане рыбка!
Сильные отличия от 40 в коде?
кстати, как мегапират будет вести себя если сигнал от пульта ДУ заглушить? Просто рухнет на землю?
Тестировал, держа дрона в руке, главное файл сейв чтоб дернул канал и включил РТЛ 😃 При удержании высоты, лойт и РТЛ даже если газ в ноль движки продолжают работать, так что в теории если РТЛ работает нормально, квадрик долетит до места взлета 😃
Измерил время цикла delta_ms_fast_loop = 6…12 мс.
Но, все-равно, я разочаровался в ВМР085. Даже с float математикой он медленно дрейфует на 50 см.
Кому интересно: wmrx00.sourceforge.net/Arduino/BMP085-Calcs.pdf
И архив с библиотекой: narod.ru/disk/25791982001/APM_BMP085.rar.html
Попробую с int_32t и масштабированием давления. Но хочу заказать MS5611-01 MS5611 Barometric Pressure Sensor Variometer.
Что-то не удается Tes8 скомпилировать. Удалил либы по фен-шую, скопировал те, что в архиве, а он мне:
ArduCopterMega.cpp:59:39: error: Wire.h: No such file or directory
Пробовал родную Wire подкидывать - начинают другие зависимости вылезать.
Сегодня выехал в поле с ноутбуком. Отлетал два пака. Настромл алт-холд. Без ветра и руления держит вусоту + - 50 см. Лучше настроить не смог. Летал на высоте 5-6 м, те без сонара. Если начинал рулить коптер уходил в раскачку. при остановке прыгал раза два и дальше висел почти ровно. Еще раз испытал ртл. Домой возвращает, но возвращает не передом, а той стороной которая к дому ближе, те коптер носом к дому не разворачивает. Полетал в лойтере. В этом режиме коптер, оказывается, рулится. Подлетел куда надо, повисел, подлетел дальше. Но колбасит его в этом режиме в диаметре метров пяти. Но самый стабильный режим это стабиле. Коптер стоит как вкопаный. Из любого режима при колбасне включаешь стабиле и коптер тут же останавливается
Пробовал родную Wire подкидывать
У меня скомпилилась с родной
У меня скомпилилась с родной
C:\arduino-0022\libraries\AP_OpticalFlow\AP_OpticalFlow_ADNS3080.cpp:28:24: error: …/SPI/SPI.h: No such file or directory
C:\arduino-0022\libraries\AP_OpticalFlow\AP_OpticalFlow_ADNS3080.cpp: In member function ‘virtual bool AP_OpticalFlow_ADNS3080::init(bool)’:
C:\arduino-0022\libraries\AP_OpticalFlow\AP_OpticalFlow_ADNS3080.cpp:69: error: ‘SPI’ was not declared in this scope
C:\arduino-0022\libraries\AP_OpticalFlow\AP_OpticalFlow_ADNS3080.cpp: In member function ‘byte AP_OpticalFlow_ADNS3080::backup_spi_settings()’:
C:\arduino-0022\libraries\AP_OpticalFlow\AP_OpticalFlow_ADNS3080.cpp:93: error: ‘SPI’ was not declared in this scope
C:\arduino-0022\libraries\AP_OpticalFlow\AP_OpticalFlow_ADNS3080.cpp:94: error: ‘SPI_MODE3’ was not declared in this scope
C:\arduino-0022\libraries\AP_OpticalFlow\AP_OpticalFlow_ADNS3080.cpp:95: error: ‘SPI_CLOCK_DIV8’ was not declared in this scope
C:\arduino-0022\libraries\AP_OpticalFlow\AP_OpticalFlow_ADNS3080.cpp: In member function ‘virtual byte AP_OpticalFlow_ADNS3080::read_register(byte)’:
C:\arduino-0022\libraries\AP_OpticalFlow\AP_OpticalFlow_ADNS3080.cpp:133: error: ‘SPI’ was not declared in this scope
C:\arduino-0022\libraries\AP_OpticalFlow\AP_OpticalFlow_ADNS3080.cpp: In member function ‘virtual void AP_OpticalFlow_ADNS3080::write_register(byte, byte)’:
C:\arduino-0022\libraries\AP_OpticalFlow\AP_OpticalFlow_ADNS3080.cpp:161: error: ‘SPI’ was not declared in this scope
Вот что с родной Wire
Если подкинуть еще и SPI, то получаем новую кучу сообщений.
Что-то не удается Tes8 скомпилировать
Аржуино IDE 022 и выше? Я установил ее, залил в папку либы из архива, и все компилируется.
Без ветра и руления держит высоту + - 50 см. Лучше настроить не смог.
Из ВМР085 больше не выжать…
Лучше всего держать архив с 022. Чистый
Я тоже держу “чистые” library в отдельном месте и заливаю их перед новой версией Пирата.
Что-то не удается Tes8 скомпилировать. Удалил либы по фен-шую, скопировал те, что в архиве, а он мне:
Пробовал родную Wire подкидывать - начинают другие зависимости вылезать.
Лучше всего держать архив с 022. Чистый. Новую прошивку без проблем компильнуть можно, если свеженькую 022 распаковать. Не с заменой старой, а со стиранием. Скопируйте ВНУТРЬ библиотеки 022 библиотечные файлы. Заменятся только нужные. При такой технологии любая новая прошивка компилируется без проблем.
но возвращает не передом, а той стороной которая к дому ближе, те коптер носом к дому не разворачивает.
пофигу как возрвщается =) главное что возвращается вообще
А новый алгоритм для баро кто нить вклячит в прошивку 😃? Для меня 50см было бы мега супер, сейчас плавает метра 2…
пофигу как возрвщается =) главное что возвращается вообще
Гы, а по точкам интересно он то же жопой летать будет 😃))
Цитата Сообщение от tusik Посмотреть сообщение но возвращает не передом, а той стороной которая к дому ближе, те коптер носом к дому не разворачивает. пофигу как возрвщается =) главное что возвращается вообще
#define RTL_YAW YAW_HOLD
No comments 😃
Залил таки Test8. Скачал последний планер. Все цепляется.
Опять компас всю идиллию портит:
сращу после заливки прошивки - планер показывает мгновенную отработку любого угла компасом, без всяких доплываний. Естественно до калибровки есть медленный уход по всем осям.
setup-level. Компас опять начинает: после быстрого поворота доплывать может черти сколько.
Далее: барометр не подцепился. Всегда 0.
Плата Black Vortex. С B8 от автора платы работало. Хотя компас тоже непонятно как-то работал.
Что я делаю не так?
Чую какую то библиотеку криво записал или обновил… У меня на вортексе все пашет без проблем, правда по ГПС надо подшаманить в коде слегка, писал выше, все остальное работает без шаманств.
Плата Black Vortex
Для Black Vortex нужна специальная прошивка!
А новый алгоритм для баро кто нить вклячит в прошивку ? Для меня 50см было бы мега супер, сейчас плавает метра 2.
Я переделываю снова под целочисленную дробилку с масштабированием. Но базовый алгоритм высоты остается, now_pressure нужно задать как float в Ardupirate.pde или как int_32t, я еще ищу максимальный диапазон результата:
static long read_barometer(void)
{
float x, tmp_float;
barometer.Read();
//abs_pressure = (abs_pressure>>2) + (abs_pressure>>1) + (barometer.Press>>2); // 0.75 0.25
now_pressure = 0.75*now_pressure + 0.25*barometer.Press; // 0.75 0.25
tmp_float = (float)(now_pressure/ground_pressure); // ориганальный от БОШ
tmp_float = pow((float)tmp_float, 0.190295);
x = 4433000.0 * (1.0 - (float)tmp_float); // высоту относительно текущей земли! abs_pressure \ ground_pressure
return (x);
}