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

Musgravehill
Alex_from_Israel:

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);
}
SovGVD
Alex_from_Israel:

Основная Ардуина такое все равно не потянет.

угу, у нас закончились таймеры/прерывания/итд

Alex_from_Israel:

Пока маракую по интернету, как их между собой заставить обмениваться информацией.

через Serial порт, на меге еще один свободный вроде есть и в коде опроса сонара добавить код опроса (Serial.print Serial.read или как там) другой ардуинке, а та в свою очередь ждет когда у неё чето спросят и постоянно хранит данные
такое уже было в проекте ArduIMU кажется - там и код есть и всё что надо (это где ракетной для настольного тениса поптр отгоняют)

Musgravehill

Можете меня бить! Но я не понимаю!
Включаю коптер, он ловит ноль. Лечу вверх - эта зеленая полоска на альтиметре ползет вниз! Снижаюсь в овраг ниже земли - зеленая полоска ползет вверх!
В то же время, в Терминале все адекватно! Если коптер поднял вверх, то 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; //так требует программа”. Т.е высота положительная, без минуса.

SovGVD

ЗЕЛЕНАЯ ПОЛОСКА - УРОВЕНЬ ЗЕМЛИ (нуля)
если взлетаем вверх - то земля становится НИЖЕ, полоска ползет ВНИЗ

LeonVS

Хм… а чем тогда Р от I отличается? Если Р увеличить будет прыгать, так же и про I сказано… В чем принципиальная разница интересно?

Musgravehill
LeonVS:

В чем принципиальная разница интересно?

В том, что управляющее воздействие Р возникает сразу и пропорционально ошибке, а И - по мере накопления суммы всех ошибок.

SovGVD

а в чем физический смысл?

и еще - кто бы поковырял логирование на SD карту =) шилд крайне простой под SPI порт

LeonVS

А что логировать то 😃? Если есть АРС220 то все логируется в планере 😃
А вот токовый датчик замутить да напругу снимать чтоб знать сколько липестричества еще в баках было бы не плохо 😃

Ar2r
SovGVD:

кто бы поковырял логирование на SD карту

бюджетный модуль пишущий на SD есть?

LeonVS

Гы… не понял, эт как я умудрился запомидорить 😃))) Каюсь, не хотел 😃

tusik

А почему иногда слетает левел? Сегодня пошел полетать, включил алт_холд, коптер подпрыгивал, подпрыгивал, подлетел к траве, зацепился, перевернулся. Поставил на ноги, запускаю, а коптер пытается лететь боком Смотрю в планере - горизонт градусов 40.

LeonVS

Думаю дело в механике, платко внутри контейнера случаем не отвалилась 😃?

tusik
LeonVS:

платко внутри контейнера случаем не отвалилась

Обижаешь, начальник 😃 Нет конечно. У меня это было раза три. Первых два раза не заморачивался, а теперь задумался… А если в полете…

LeonVS

Хм… в 40 прошивке левел можно выставлять без CLI режима, может здесь собака порылась…?
Такое происходит только при падениях? У меня сколько не падал, такого глюка еще не было…

tusik
LeonVS:

происходит только при падениях?

Ну, скажем, при нештатных ситуациях

SovGVD

rcopen.com/forum/f134/topic219701/837

tusik:

А давай в теме про порт про это по-подробнее

да в общем ставим моно, у меня вот такие пакеты (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 ставлю, мне удобнее так, хотя и через планер тоже ставил - работает)

tusik

Спасибо! Сейчас установлю на бук убунту и попробую. Если не возражаешь, еще немного тебя помучаю, тк в линуксе не очень…

SovGVD

а чем винда не устраивает?
оффтоп: у меня просто релегиозная неприязнь и в целом не любит она меня - ниодного веб проекта успешного (в особенности с другими мелкософтовыми поделками вроде iis и mssql), максимум для игр (и то сохранялки метро 2033 убились вместе с полупройденой гта4)

YAN=

А высота выдаваемая GPS как-то учитывается? У нас местность горная, взлетел с одной высотой и ни учтя местность, можно в горку впиндюриться.