ArduCopter Mega: порт на обычную Arduino (тестим)
tmp_float = (float)abs_pressure /(float)ground_pressure; //станд. формула рассчета высоты относительно исходного давления
Угую Только поясните,плз, почему нужно делить давление на высоте на давление у земли, в качестве стандартной формулы вычисления? Вроде логичнее вычитать? Или я чего то не врубаюсь?
Александр, скачайте даташит для ВМР085 narod.yandex.ru/100.xhtml?mkpochtoi.narod.ru/BMP08… (красивая формула из авиации) или посмотрите libraries\APM_BMP085\examples\APM_BMP085_test (эта же формула преобразована для удобного вычисления):
tmp_float = (APM_BMP085.Press / 101325.0); -давление по барометру делим на давление на уровне моря (101325 Па принято)
tmp_float = pow(tmp_float, 0.190295);
Altitude = 44330 * (1.0 - tmp_float); - высота относительно уровня моря (где принято 101325 Па)
Но я беру не давление на уровне моря (101325 Па), а groun_pressure - давление у земли, когда коптер включили. Поэтому отсчет высоты идет от текущей земли.
Данный код в sensors.pde у меня отлично работает! Библиотеки не трогал!
static void init_barometer(void)
{
#if HIL_MODE == HIL_MODE_SENSORS
hil.update();// look for inbound hil packets for initialization
#endif
int i;
for(i = 0; i < 20; i++){
delay(50);
barometer.Read();
}
ground_pressure = 0;
for(i = 0; i < 8; i++){
delay(50);
#if HIL_MODE == HIL_MODE_SENSORS
hil.update(); // look for inbound hil packets
#endif
barometer.Read();
ground_pressure += barometer.Press; //считал 8 раз давление у земли
}
ground_pressure /=8; //усреднил давление у земли
abs_pressure = ground_pressure; //нужно
}
static long read_barometer(void)
{
float x, tmp_float, altitude_cm;
barometer.Read();
abs_pressure = (float)abs_pressure * .5 + (float)barometer.Press *.5; // берем 0.5 от прошлого давления и 0.5 от нового, чтобы не прыгало сильно
tmp_float = (float)abs_pressure /(float)ground_pressure; //формула из авиации: давление на уровне моря заменил на ground_pressure
tmp_float = pow(tmp_float, 0.190295);
altitude_cm = 44330.0 * (1.0 - tmp_float); // мы узнали высоту относительно текущей земли! потому что использовали abs_pressure \ ground_pressure
x = -altitude_cm*100; //так требует программа
return (x);
}
Основная Ардуина такое все равно не потянет.
угу, у нас закончились таймеры/прерывания/итд
Пока маракую по интернету, как их между собой заставить обмениваться информацией.
через Serial порт, на меге еще один свободный вроде есть и в коде опроса сонара добавить код опроса (Serial.print Serial.read или как там) другой ардуинке, а та в свою очередь ждет когда у неё чето спросят и постоянно хранит данные
такое уже было в проекте ArduIMU кажется - там и код есть и всё что надо (это где ракетной для настольного тениса поптр отгоняют)
Можете меня бить! Но я не понимаю!
Включаю коптер, он ловит ноль. Лечу вверх - эта зеленая полоска на альтиметре ползет вниз! Снижаюсь в овраг ниже земли - зеленая полоска ползет вверх!
В то же время, в Терминале все адекватно! Если коптер поднял вверх, то test altitude: baro 200cm sonar 200cm, если в овраге test altitude: baro -200cm sonar 200cm
Это происходит в тест7 и тест8. В 2.0.38 такого не было. Планнеры 47 и 66. Код не трогал! У всех так показывает?
Сейчас видео пересмотрел, раньше у меня “в облаках” высота отображалась в плюс… фигня какая-то.
Прошу прощения! В коде нужно “x = altitude_cm*100; //так требует программа” , а не “x = - altitude_cm*100; //так требует программа”. Т.е высота положительная, без минуса.
ЗЕЛЕНАЯ ПОЛОСКА - УРОВЕНЬ ЗЕМЛИ (нуля)
если взлетаем вверх - то земля становится НИЖЕ, полоска ползет ВНИЗ
Хм… а чем тогда Р от I отличается? Если Р увеличить будет прыгать, так же и про I сказано… В чем принципиальная разница интересно?
В чем принципиальная разница интересно?
В том, что управляющее воздействие Р возникает сразу и пропорционально ошибке, а И - по мере накопления суммы всех ошибок.
а в чем физический смысл?
и еще - кто бы поковырял логирование на SD карту =) шилд крайне простой под SPI порт
А можно поподробней для прапорщиков по пидам В энглише не очень силен. Что есть I и IMAX?
А что логировать то 😃? Если есть АРС220 то все логируется в планере 😃
А вот токовый датчик замутить да напругу снимать чтоб знать сколько липестричества еще в баках было бы не плохо 😃
кто бы поковырял логирование на SD карту
бюджетный модуль пишущий на SD есть?
модуль пишущий на SD есть?
Гы… не понял, эт как я умудрился запомидорить 😃))) Каюсь, не хотел 😃
А почему иногда слетает левел? Сегодня пошел полетать, включил алт_холд, коптер подпрыгивал, подпрыгивал, подлетел к траве, зацепился, перевернулся. Поставил на ноги, запускаю, а коптер пытается лететь боком Смотрю в планере - горизонт градусов 40.
Думаю дело в механике, платко внутри контейнера случаем не отвалилась 😃?
платко внутри контейнера случаем не отвалилась
Обижаешь, начальник 😃 Нет конечно. У меня это было раза три. Первых два раза не заморачивался, а теперь задумался… А если в полете…
Хм… в 40 прошивке левел можно выставлять без CLI режима, может здесь собака порылась…?
Такое происходит только при падениях? У меня сколько не падал, такого глюка еще не было…
происходит только при падениях?
Ну, скажем, при нештатных ситуациях
rcopen.com/forum/f134/topic219701/837
А давай в теме про порт про это по-подробнее
да в общем ставим моно, у меня вот такие пакеты (ubuntu 10.04 LTS)… кстаии в macosx тоже работать должно (на первых страницах кто-то запускал)
libmono-accessibility2.0-cil 2.4.4~svn151842-1ubuntu4 Mono Accessibility library (for CLI 2.0)
ii libmono-addins-gui0.2-cil 0.4-6 GTK# frontend library for Mono.Addins
ii libmono-addins0.2-cil 0.4-6 addin framework for extensible CLI applicati
ii libmono-cairo2.0-cil 2.4.4~svn151842-1ubuntu4 Mono Cairo library (for CLI 2.0)
ii libmono-corlib2.0-cil 2.4.4~svn151842-1ubuntu4 Mono core library (for CLI 2.0)
ii libmono-data-tds2.0-cil 2.4.4~svn151842-1ubuntu4 Mono Data Library (for CLI 2.0)
ii libmono-i18n-west2.0-cil 2.4.4~svn151842-1ubuntu4 Mono I18N.West library (for CLI 2.0)
ii libmono-posix2.0-cil 2.4.4~svn151842-1ubuntu4 Mono.Posix library (for CLI 2.0)
ii libmono-security2.0-cil 2.4.4~svn151842-1ubuntu4 Mono Security library (for CLI 2.0)
ii libmono-sharpzip2.84-cil 2.4.4~svn151842-1ubuntu4 Mono SharpZipLib library (for CLI 2.0)
ii libmono-sqlite2.0-cil 2.4.4~svn151842-1ubuntu4 Mono Sqlite library (for CLI 2.0)
ii libmono-system-data2.0-cil 2.4.4~svn151842-1ubuntu4 Mono System.Data Library (for CLI 2.0)
ii libmono-system-runtime2.0-cil 2.4.4~svn151842-1ubuntu4 Mono System.Runtime Library (for CLI 2.0)
ii libmono-system-web2.0-cil 2.4.4~svn151842-1ubuntu4 Mono Library (for CLI 2.0)
ii libmono-system2.0-cil 2.4.4~svn151842-1ubuntu4 Mono System libraries (for CLI 2.0)
ii libmono-webbrowser0.5-cil 2.4.4~svn151842-1ubuntu4 Mono Web Browser library
ii libmono-winforms2.0-cil 2.4.4~svn151842-1ubuntu4 Mono System.Windows.Forms library (for CLI 2
ii libmono2.0-cil 2.4.4~svn151842-1ubuntu4 Mono libraries (for CLI 2.0)
ii mono-2.0-gac 2.4.4~svn151842-1ubuntu4 Mono GAC tool (for CLI 2.0)
ii mono-gac 2.4.4~svn151842-1ubuntu4 Mono GAC tool
ii mono-runtime
качаем планер, запускаем
mono /путь/до/ArdupilotMegaPlanner.exe
выбираем порт нашей ардуинки, у меня /dev/ttyUSB0
и дальше работаем как обычно, проблем не заметил (но я пиды через CLI ставлю, мне удобнее так, хотя и через планер тоже ставил - работает)
Спасибо! Сейчас установлю на бук убунту и попробую. Если не возражаешь, еще немного тебя помучаю, тк в линуксе не очень…
а чем винда не устраивает?
оффтоп: у меня просто релегиозная неприязнь и в целом не любит она меня - ниодного веб проекта успешного (в особенности с другими мелкософтовыми поделками вроде iis и mssql), максимум для игр (и то сохранялки метро 2033 убились вместе с полупройденой гта4)
А высота выдаваемая GPS как-то учитывается? У нас местность горная, взлетел с одной высотой и ни учтя местность, можно в горку впиндюриться.