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

Alex_from_Israel
Musgravehill:

Совсем не знаю. 30 минут прошивка работает. Мне хочется выжать максимум из бародатчика или искать более точный - мечтаю о “зависании” коптера в режиме alt-hold. Операции с плавающей запятой жрут больше ресурсов, но я попробую, все равно. Надо еще искать, как вывести время цикла.

У меня на борту 2 Ардуины. Сейчас поставил второй Мегу 2560. Дуемиланове использую в качестве программатора. Хочу перешить G-OSD. Очень надеюсь на Вашу прошивку. Если перенести баро и сонар на вторые мозги а в основную передавать готовые данные по высоте, как думаете, поможет? Есть второй рабочий барометр, может если усреднять показания с двух, точность может повысится? У меня мечта аналогичная. Только хочется холд на сверхмалых высотах и еще 3 сонара для бокового обзора. Есть в Большом кратере возле Димоны стенка, высотой метров 100. Примерно посередине пещеры. Хочется посмотреть, что там внутри, хотябы возле входа. Если доведу до ума прототип, то окончательная версия будет для дистанционного обследования. Видел как то ролик из штатов, там на акул охотились с помощью коптера. Тоже хочу! Хоть и нет тут серьезных акул, зато возле берега под водой развалины античных городов. Аквалангисты лазят, но они такую площадь не проверят, как коптер может. Если прозрачность воды позволит, конечно. Не Красное море, мутноватая вода. Метров на 5 видимость. Редко 10.

Sir_Alex
Alex_from_Israel:

Только хочется холд на сверхмалых высотах и еще 3 сонара для бокового обзора.

В принципе, холд уже работает. Если коптер не наклонять сильно, то все пучком. Я выкладывал видео, как моя страшилка висит в сантиметрах 10-20 от земли. Причем был сильный ветер.

Alex_from_Israel

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

Musgravehill
Alex_from_Israel:

Есть второй рабочий барометр, может если усреднять показания с двух, точность может повысится? У меня мечта аналогичная.

Думаю, 2 шумящих барометра не помогут. Если повезет при инициализации, то один даст дрейф -50см, другой +50см, в итоге суммарный дрейф = 0. Иначе не повезло.
Я присматриваюсь к “MS5611-01 MS5611 Barometric Pressure Sensor Variometer”, пока их нет в наличии на ибей. Заявленная точность 10см, 1Па.

sht0p0r:

“x = 4433000 * (1 - tmp_float)” при такой записи компилятор откинет дробную часть от tmp_float и приведет все к int и long.
float x;
x=1. - tmp_float

Именно так и было. Весь вечер страдал, разозлился и всем прописал (флоат .0000).

iBat:

Высокую точность можно и с целочисленными операндами получить, если ввести понятие масштаба

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

В sensors.pde отдавать не реальное давление 10130(0) Па, а 101300 0(0) попугаев. И пусть последний разряд прыгает, это будет не 1Па, а сотые доли Паскаля. Все-равно, потом используется соотношение: Pтекущее \ Рground.

И еще часть кода я перенесу из calculation() в init() - рассчет x, y, которые статичны.

Alex_from_Israel
Sir_Alex:

В принципе, холд уже работает. Если коптер не наклонять сильно, то все пучком. Я выкладывал видео, как моя страшилка висит в сантиметрах 10-20 от земли. Причем был сильный ветер.

Сылку не кинете? Долго искать по всей ветке. Сейчас вот снял коптера с ног. Приделываю свеже полученные приблуды. ЖПС на хвостовую балку недалеко от платы. Там проходят провода к моторам, но они у меня везде проходят, попробую поиграться, найдет этого ЖПСа или нет. В комплекте с G-OSD пришел. Осд перешивать нужно, то, что есть ни к селу ни к городу.

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 подкидывать

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