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

Aven

Ерунда какая-то с барометром 😦

Baro: -26cm, Sonar: 6cm
Baro: -26cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: -17cm, Sonar: 6cm
Baro: -17cm, Sonar: 6cm
Baro: -17cm, Sonar: 6cm
Baro: -17cm, Sonar: 6cm
Baro: -17cm, Sonar: 6cm
Baro: -26cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -44cm, Sonar: 6cm
Baro: -44cm, Sonar: 6cm
Baro: -52cm, Sonar: 6cm
Baro: -44cm, Sonar: 6cm
Baro: -44cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 17cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 17cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 7cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 17cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 17cm, Sonar: 7cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 44cm, Sonar: 6cm
Baro: 44cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 61cm, Sonar: 6cm
Baro: 52cm, Sonar: 7cm
Baro: 52cm, Sonar: 6cm
Baro: 61cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 7cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 44cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 44cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 52cm, Sonar: 6cm
Baro: 61cm, Sonar: 6cm
Baro: 61cm, Sonar: 6cm
Baro: 35cm, Sonar: 6cm
Baro: 35cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 26cm, Sonar: 6cm
Baro: 17cm, Sonar: 6cm
Baro: 17cm, Sonar: 6cm
Baro: 17cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 8cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: 0cm, Sonar: 6cm
Baro: -8cm, Sonar: 6cm
Baro: -17cm, Sonar: 6cm
Baro: -26cm, Sonar: 6cm
Baro: -26cm, Sonar: 6cm
Baro: -26cm, Sonar: 6cm
Baro: -26cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -26cm, Sonar: 6cm
Baro: -26cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -35cm, Sonar: 7cm
Baro: -35cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -26cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -35cm, Sonar: 6cm
Baro: -35cm, Sonar: 5cm
Baro: -26cm, Sonar: 5cm
Baro: -26cm, Sonar: 5cm
Baro: -35cm, Sonar: 5cm
LeonVS

Ауу, может кто расписать какая цифера в пидах за что отвечает?

SovGVD
Aven:

Ерунда какая-то с барометром

барометр ±50см скакать может… уже 100500 раз обсуждалось

LeonVS

Баро всегда будет плавать, любое дуновение ветерка его уже понесло, для этого и ставят сонар 😃

Aven

SovGVD так он же должен показывать высоту над уровнем моря, разве не так?
Высота над уровнем моря по GPS - 110м, над землей 20м.

Баро всегда будет плавать, любое дуновение ветерка его уже понесло, для этого и ставят сонар

В квартире?

Alex_from_Israel
Musgravehill:

Итак, в 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

		// Get initial data from absolute pressure sensor
		barometer.Read();
		ground_pressure += barometer.Press;   //8 раз считаем давление у земли и сложим

		("init %ld, %d, -, %ld, %ld, -, %d, %ld\n", barometer.RawTemp, barometer.Temp, barometer.RawPress,  barometer.Press, ground_temperature, ground_pressure);
	}
       ground_pressure   /=8;   //давление у земли
	abs_pressure       = ground_pressure;  //потом пригодится, чтобы не 0
	("init %ld\n", abs_pressure);
	//SendDebugln("barometer calibration complete.");
}

static long read_barometer(void)
{
	float x, tmp_float, altitude_cm;
	barometer.Read();
	abs_pressure = (float)abs_pressure * .85 + (float)barometer.Press *.15;  //фильтруем, не позволяем быстро изменяться

	tmp_float = (float)abs_pressure /(float)ground_pressure;     //станд. формула рассчета высоты относительно исходного давления
	tmp_float = pow(tmp_float, 0.190295);
	altitude_cm = 44330.0 * (1.0 - tmp_float);  //высота в сантиметрах относительно исходной точки старта

	x = altitude_cm*100;  //так требует программа
	("%ld, %ld, %ld, %ld\n", barometer.Press, ground_pressure, altitude_cm, x); (altitude_cm); /Serial.println();
	return 	(x);
}

В APM_BMP085.cpp


uint8_t APM_BMP085_Class::Read()   //сильно упростилась, но добавлены задержки по даташиту. А надо ли читать и считать потом температуру???
{
	uint8_t result = 0;

	Command_ReadTemp();delay(20);
             ReadTemp(); delay(20);
	Command_ReadPress();delay(20);
	ReadPress();delay(20);
	Calculate();
	result = 1;
	return(result);
}

// Read Raw Pressure values
void APM_BMP085_Class::ReadPress()
{
	byte msb;
	byte lsb;
	byte xlsb;

	Wire.beginTransmission(BMP085_ADDRESS);
	Wire.send(0xF6);
	Wire.endTransmission();

	Wire.requestFrom(BMP085_ADDRESS, 3); // read a byte

	while(!Wire.available()) {
   // waiting
	}

	msb = Wire.receive();

	while(!Wire.available()) {
   // waiting
	}

	lsb = Wire.receive();

	while(!Wire.available()) {
   // waiting
	}

	xlsb = Wire.receive();
	RawPress = (((long)msb << 16) | ((long)lsb << 8) | ((long)xlsb)) >> (8 - oss);        //фильтры и смещения выпилены
}
// Read Raw Temperature values
void APM_BMP085_Class::ReadTemp()
{
	byte tmp;
	Wire.beginTransmission(BMP085_ADDRESS);
	Wire.send(0xF6);
	Wire.endTransmission();

	Wire.beginTransmission(BMP085_ADDRESS);
	Wire.requestFrom(BMP085_ADDRESS,2);

	while(!Wire.available());	// wait
	RawTemp = Wire.receive();

	while(!Wire.available());	// wait
	tmp 	= Wire.receive();

	RawTemp = RawTemp << 8 | tmp;
}

У меня работает все!

Единственное, не понял: в тест8 у меня в Терминале понижение идет с “-”, подъем коптера - с “+”. При этом, на OSD все наоборот! Т.е. Я поднимаю коптер относительно нуля: в ОСД высота идет вниз (зеленая полоска вниз), в Терминале высота идет в плюс 0 -> +100cm.
x = (плюс или минус тут?) altitude_cm*100;

tmp_float = (float)abs_pressure /(float)ground_pressure; //станд. формула рассчета высоты относительно исходного давления

Угую Только поясните,плз, почему нужно делить давление на высоте на давление у земли, в качестве стандартной формулы вычисления? Вроде логичнее вычитать? Или я чего то не врубаюсь?

tusik
Aven:

разве не так

Не так. Нулевую высоту он берет при включении

SovGVD
Aven:

показывать высоту над уровнем моря, разве не так?

зачем ему высота над уровнем моря… ему высота вообще не нужна по сути, нужно некое мифическое значение в попугаях, которое надо удерживать (но так как надо прировняться к сонару и к заданию высоты в AUTO режиме, то и попугаев переводят в сантиметры)

забейте на барометр и сонар уже =) они работают (спасибо всем кто учавствовал), если у вас коптер держит высоту 2-4метра - это уже хорошо, если 1-2 метра то вам несказанно повезло
сам бамеротр надо закрывать от внешних воздействий (накрыть колпако или закрыть ватой/паралоном… но тут тоже надо не перестараться, а то замуруете и будет всегда одно давление)

аналогично с LOITER, точность GPS ±5метров (±3 метра, смотря сколько спутников, какой приемник и какие условия), поэтому коптер НУ НИКАК четко не встанет как вкопаный в воздухе, а будет плавать в плоскости (паралельно земле) согласно показаниям неточного GPS и по высоте согласно показаниям неточного барометра

Alex_from_Israel
Aven:

SovGVD так он же должен показывать высоту над уровнем моря, разве не так?
Высота над уровнем моря по GPS - 110м, над землей 20м.

В квартире?

От винтов в квартире ветерок похлеще, чем на улице!

Aven

tusik, SovGVD, теперь все ясно! Такую вот информацию в вики надо писать! 😃
Alex_from_Israel, логично, только у меня кроме Ардуины, allinone2 и сонара пока ничего нет 😃

Alex_from_Israel
Aven:

tusik, SovGVD, теперь все ясно! Такую вот информацию в вики надо писать! 😃
Alex_from_Israel, логично, только у меня кроме Ардуины, allinone2 и сонара пока ничего нет 😃

Ну тогда вам еще предстоят незабываемые ощущения!

Когда мое стращилище поднимается в комнате… К столу привязываю, так чуть стол, гад, не поднял!

LeonVS

А можно поподробней для прапорщиков по пидам 😃 В энглише не очень силен, переводчик выдал ацкий перевод где вообще не хера не понятно 😦
В общем с P все ясно, это величина воздействия, чем больше тем сильней будет реагировать.
Что есть I и IMAX?

tusik
Alex_from_Israel:

так чуть стол, гад, не поднял!

Так за пивом его, за пивом!

LeonVS

У кого как себя коптер ведет на удержании высоты? Так же дергает газом?

Alex_from_Israel
tusik:

Так за пивом его, за пивом!

А если кокнет по дороге!? Нет уж, я лучше по старинке… У меня в 100 метрах круглосуточный магазинчик есть. Там пиво прикупить в любое время можно. Но не торгуют, обормоты, Короной! Приходится, если в холодильнике Корона иссякла, Карлсбергом обходиться. Благо всегда свеженький, его у нас в городе по бутылкам разливают!

SovGVD

My alt hold above 10 feet is only about 1-2m accurate: That’s actually the best you can achieve. The baro sensor is sensitive to light and wind. Use a felt cover to protect it from wind and make sure you don’t glue the hole and seal it up.
My copter increasingly swings up and down in alt hold. It eventually get’s down to the ground: Your THROTTLE_P is too high or low. You don’t need a lot of P to do alt hold. Think of how much you move the throttle to hold alt perfectly. Not much! That’s what you need P to do. I will ramp up as your battery goes lower to make up the difference.

почти гуглопереводчик:

Удержании высоты выше 10 футов составляет лишь около 1-2м: Это действительно лучшее, что можно достичь. Датчик баро чувствителен к свету(о_0 наверно имеется ввиду нагревание) и ветру. Залепите войлоком/фетром (ватой) барометр для защиты от ветра и убедитесь, что вы не звлеяли отверстие и не уплотнили его (не сильно напихали).
Мой вертолет сильно колебается вверх и вниз в удержании высоты. В конечном итоге получить фигак об землю: Ваше значение THROTTLE_P слишком высоко или низко. Вам не нужно много P для удержания высоты. Подумайте, на сколько вы перемещаете стик газа чтобы удерживать высоту руками. Не так много! Это то, что вам нужно делат с P. (тут про то что при ослаблении батарейки значение будет наращиваться, но для нас не актуально).

Alex_from_Israel:

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

везет же =) у нас всё пиво на вкус стало абсолютно одинаковым и похоже на газированную воду с красителем и спиртом =( последнее что более-менее пьется - нефилтрованное местое или оболонь (мутное, или белое, не помню)

Alex_from_Israel

Как то не заметил. Продают у нас тут Оболонь и Невское(кажется), так вполне ничего…

Офф топ, конечно, но уж больно животрепещуще! Как там у вас в России с нефильтрованным бочковым? У нас за таким нужно на пляж в ночной бар ездить. Там Вайнштефан, чудо а не пиво! Но вот на обратном пути полиция засады устраивает. Тормозят и предлагают пройти тест на алкоголь. Так, что много не выпьешь…

LeonVS

Дык с Р разобрались, а что же означает I и IMAX???

Alex_from_Israel

Получил сегодня посылку с камерой. Вот такая 600TVL SONY SUPER HAD CCD D-WDR Board Camera With Wire-Control OSD DNR

Прикрутил к коптеру, а испытать не успел, хотя руки и чесались! На работу ехать нужно. Вернусь ночью, так, что придется на завтра испытания переносить. Вроде должна компенсировать засветку боковым освещением. Кто нить юзал подобное? Как к вибрации относится?

SovGVD

оффтоп: хз как в России, но конкретно в Дубне разливное не фильтрованное в половине магазинов есть (в нонейм бутылку наливают и езжай домой), по вкусу вполне похоже на пиво, пенится и даже когда выдыхается (оно же бродить должно! какое нафиг выдыхается?) всеравно можно пить =) почти всё что в бутылках - производство одного завода в г.Клин, а отсюда и одинаковый вкус - разница только в ощущених от надписи на бутылке и того что купил дороже
но это всё строго ИМХО, может другим больше везет =) последнее вкусное, приятное пиво пил года 3 назад в каком то клубе и было это разливной туборг
уже думаю - а не попробовать ли сварить самому? но гемору =)

любая CCD камера хорошо к вибрациям относится, в отличае от CMOS