ArduCopter Mega: порт на обычную Arduino (тестим)

Sir_Alex
Alex_from_Israel:

Еще идея прорезалась, снимать показания с сонара только при нулевом левеле, ± сколько нибудь, чтобы совсем уж не перестал работать.

Так нельзя делать! во всяком случае, пока у вас включен автопилот (ALT_Hold). Т.к. если в какой то момент не снимать показания с сонара, то откуда брать высоту? На барометр нельзя резко переходить, т.к. может оказаться, что коптер висит в 15 см от земли, а баро скажет что 50см… и автопилот благополучно воткнет его в землю.
Если что то и делать, так это ограничивать угол наклона коптера при работе с сонаром. Т.е. на малой высоте не давать наклонять коптер больше 15гр. (Но при этом, возможна ситуация, когда вы не сможете удерживать коптер на одном месте (при сильном ветре))

Alex_from_Israel

Брать предыдущее показание. Все равно высота не меняется резко. Обновлять при переходе через ноль

Musgravehill
Alex_from_Israel:

снимать показания с сонара только при нулевом левеле, ± сколько нибудь, чтобы совсем уж не перестал работать.

Смотрите место в ArdupirateMega.pde, где вычисляется высота. Там кусок кода закомментирован, который корректирует высоту по cos\sin наклонов. Переменные наклонов можете использовать для своих целей, их можно вывести в Serial и понаблюдать, какие у них значения. if (sonar_alt < 600) and ( (round(x)>30 degree) OR (round(y) > 30 degree) ) {alt = 0.5*baro_alt + 0.5*sonar_alt; //при сильном наклоне подмешиваем баро_высоту, потому что сонар отваливается }- на словах. Только баро дрейфует на 50 см!

Сейчас в коде на сверхмалой высоте коэффициент_баро -> 0, если пропадает и sonar_alt, то морковка.

Alex_from_Israel

Не совсем то. Не учитываются показания сонара вообще при крене. Нужно учитывать постоянно, но обновлять переменную с сонара только вблизи левел = 0

Явно ложные показания будут игнорироваться.

Sir_Alex
Alex_from_Israel:

Не совсем то. Не учитываются показания сонара вообще при крене. Нужно учитывать постоянно, но обновлять переменную с сонара только вблизи левел = 0 Ответить с цитированием Ответить с цитированием Поблагодарить автора Спасибо! Кинуть помидором

А надо ли вообще учитывать крен? Там высота будет незначительно изменятся (мне кажется). А вот не учитывать текущую высоту нельзя - т.к. если вы например летите куда то, естественно коптер будет наклонен - а высота то старая будет все время - в итоге краш.

Musgravehill
Alex_from_Israel:

при крене

Только проблема, что при крене коптер теряет высоту, поэтому будет точно не 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
sht0p0r

Борис, именно так забудьте метры, граммы, паскали, считайте в “штуках”.
Все, что можно в константы, все, что считаеттся 1 раз в статические переменные.

Musgravehill:

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
Alex_from_Israel
Musgravehill:

Только проблема, что при крене коптер теряет высоту, поэтому будет точно не 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

Кто же будет заниматься высшим пилотажем у земли то? Речь ведь идет о висении на сверхнизких высотах. При болтанке скольжение минимальное, стики по нулям. А про высоты, где сонар не работает вообще другой разговор. В идеале вообще нужно автоматическую посадку вводить. Что бы сам садился в точке взлета, а не болтался над точкой. Подразумевается, что сигнал управления потерян и кренов со скольжением вообще быть не должно.

iBat
Musgravehill:

Можно умножать коэффициенты типа (0.000019876) на 100 000 000 и хранить как int32_t. Только немного повозиться с библиотекой.

Собственно 100 000 000 и будет масштабом в данном случае. Можно так и работать. Если хочется выжать из int32 все, до последнего бита, то масштаб придется в виде степени двойки вычислять, исходя из максимального (разумного) значения величины.

Ar2r

Alex_from_Israel, давно пора эхолот привязывать к коптеру. 😃 И слежение за рыбой реализовать.

кстати, как мегапират будет вести себя если сигнал от пульта ДУ заглушить? Просто рухнет на землю?

Alex_from_Israel
Ar2r:

Alex_from_Israel, давно пора эхолот привязывать к коптеру. 😃 И слежение за рыбой реализовать.

кстати, как мегапират будет вести себя если сигнал от пульта ДУ заглушить? Просто рухнет на землю?

Вроде файлсейв есть… По идее должен плавно снизить обороты мотором и приземлиться более-менее плавно. Хотя, кто его знает? Я еще и не летал то, как следует. Усе упереди, Козлодоев!

Не, за рыбой не хочу! Я рыбу уважаю с пивом, но не прямо из моря! Проще прикупить в магазине, благо выбор есть. От тараньки до деликатесной семги. А прям из моря тоже можно. На Марине (это у нас так яхт клубы называют) есть ресторанчик в котором рыбу жарят через полчаса после отлова. Рыбаки прямо с катера своего в ресторанчик этот отгружают. Будете в наших краях, обязательно посетите! Классно жарят! Лучше только в Эйлате, в ресторане рыбном. Название странное, что то вроде последний толи причал, толи приют. Не помню точно. Сети и штурвалы по стенам и чудная запеченная в сметане рыбка!

LeonVS

Сильные отличия от 40 в коде?

Ar2r:

кстати, как мегапират будет вести себя если сигнал от пульта ДУ заглушить? Просто рухнет на землю?

Тестировал, держа дрона в руке, главное файл сейв чтоб дернул канал и включил РТЛ 😃 При удержании высоты, лойт и РТЛ даже если газ в ноль движки продолжают работать, так что в теории если РТЛ работает нормально, квадрик долетит до места взлета 😃

Musgravehill

Измерил время цикла 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.

iBat

Что-то не удается Tes8 скомпилировать. Удалил либы по фен-шую, скопировал те, что в архиве, а он мне:

ArduCopterMega.cpp:59:39: error: Wire.h: No such file or directory

Пробовал родную Wire подкидывать - начинают другие зависимости вылезать.

tusik

Сегодня выехал в поле с ноутбуком. Отлетал два пака. Настромл алт-холд. Без ветра и руления держит вусоту + - 50 см. Лучше настроить не смог. Летал на высоте 5-6 м, те без сонара. Если начинал рулить коптер уходил в раскачку. при остановке прыгал раза два и дальше висел почти ровно. Еще раз испытал ртл. Домой возвращает, но возвращает не передом, а той стороной которая к дому ближе, те коптер носом к дому не разворачивает. Полетал в лойтере. В этом режиме коптер, оказывается, рулится. Подлетел куда надо, повисел, подлетел дальше. Но колбасит его в этом режиме в диаметре метров пяти. Но самый стабильный режим это стабиле. Коптер стоит как вкопаный. Из любого режима при колбасне включаешь стабиле и коптер тут же останавливается

iBat:

Пробовал родную Wire подкидывать

У меня скомпилилась с родной

iBat
tusik:

У меня скомпилилась с родной

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, то получаем новую кучу сообщений.

Musgravehill
iBat:

Что-то не удается Tes8 скомпилировать

Аржуино IDE 022 и выше? Я установил ее, залил в папку либы из архива, и все компилируется.

tusik:

Без ветра и руления держит высоту + - 50 см. Лучше настроить не смог.

Из ВМР085 больше не выжать…

Alex_from_Israel:

Лучше всего держать архив с 022. Чистый

Я тоже держу “чистые” library в отдельном месте и заливаю их перед новой версией Пирата.

Alex_from_Israel
iBat:

Что-то не удается Tes8 скомпилировать. Удалил либы по фен-шую, скопировал те, что в архиве, а он мне:

Пробовал родную Wire подкидывать - начинают другие зависимости вылезать.

Лучше всего держать архив с 022. Чистый. Новую прошивку без проблем компильнуть можно, если свеженькую 022 распаковать. Не с заменой старой, а со стиранием. Скопируйте ВНУТРЬ библиотеки 022 библиотечные файлы. Заменятся только нужные. При такой технологии любая новая прошивка компилируется без проблем.

SovGVD
tusik:

но возвращает не передом, а той стороной которая к дому ближе, те коптер носом к дому не разворачивает.

пофигу как возрвщается =) главное что возвращается вообще

LeonVS

А новый алгоритм для баро кто нить вклячит в прошивку 😃? Для меня 50см было бы мега супер, сейчас плавает метра 2…

SovGVD:

пофигу как возрвщается =) главное что возвращается вообще

Гы, а по точкам интересно он то же жопой летать будет 😃))