micro / minimOSD для NAZA

Shuricus

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

brusse
wcorp:

Как калькулятор. 456-455=1
456- из Назы
455- из GPS
1- показывает тебе
Ну и стрелку ,для наглядности. Почитай соседние ветки (minimOSD) , я тебя прошу. И умнее будешь выглядеть , и вопросов будет меньше
Так проще?

Это же по какому проводу ОСД может принять от Назы “456”, если в ОСД приходит только ТХ от GPS ?

Shuricus

Это просто больные фантазии самоуверенных дилетантов с отсутствием элементарной логики. Он думает что в TX с любой стороны можно отправлять данные. 😃

alezz

я наконец-то понял главную ошибку wcorp, он наивно предполагает что у minnazaosd есть доступ к памяти назы, дык вот его нет. Доступ есть у фирменных dji iosd mini и mark ii, они действительно берут точку дома из назы, но и работают эти осд-шки по закрытой CAN шине с двусторонним обменом. Поэтому на naza lite эти ОСД не работают т.к. CAN шина там заблокирована. minnazaosd обсуждаемая здесь работает абсолютно по другому, по обычному последовательному порту, при чем только на прием, у нее даже провод передачи не запаян. Так что спросить у назы точку дом не может физически. Зато эта ОСД работает и на назе лайт, и даже вовсе без назы, полностью автономно, только данные GPS (не обязательно с dji грибка) подбрось и все

Shuricus

Ну он же сам говорит TX-RX. Говорил бы CAN шина, тогда это бы было заблуждение. А так по его утверждению у него TX двусторонний получается. В любом случае ерунда.

wcorp
alezz:

я наконец-то понял главную ошибку wcorp, он наивно предполагает что у minnazaosd есть доступ к памяти назы,

Я сейчас “кручу” комплект АПМ+ОСД. Там всё есть. И именно по шине TX. Она общая. Возможно в случае с назой -это ошибка. Разберемся

Shuricus:

Это просто больные фантазии самоуверенных дилетантов с отсутствием элементарной логики.

как у Жванецкого- он грамотнее нас - он знает ноты, наверное 😃
Александр, в Вашем возрасте нужно вести себя корректнее, даже в форуме . Вас этому не учили?

SerjikLSV
wcorp:

Я сейчас “кручу” комплект АПМ+ОСД. Там всё есть. И именно по шине TX.

Уважаемый, учите матчасть!
TX - это только передача. От английского слова трансмишен. Общим она быть не может. Для приема есть RX. Похоже с амп вы также просвещены как и с назой осд 😃

alezz

общего у minimOSD и minnazaOSD только плата, микропрограмма и соответственно алгоритм работы совершенно другой. То что minimOSD и АРМ могут обмениваться данными - да это так, iOSD и naza v2 (v1) - да, minnazaOSD и naza v2 (lite, v1) - нет

wcorp
alezz:

То что minimOSD и АРМ могут обмениваться данными - да это так, iOSD и naza v2 (v1) - да, minnazaOSD и naza v2 (lite, v1) - нет

Понято, принято. Для понимания процессов именно это и было нужно

Shuricus
wcorp:

Александр, в Вашем возрасте нужно вести себя корректнее, даже в форуме . Вас этому не учили?

На себя посмотрите, для начала:

wcorp:

Почитай соседние ветки (minimOSD) , я тебя прошу. И умнее будешь выглядеть , и вопросов будет меньше
Так проще?

Вы умнее точно не выглядите. И намеки на лету точно не ловите.

В случае с АПМ то-же самое. Данные с ЖПС приходят напрямую в контроллер а не в ОСД, поэтому он уже и отдает всю информацию в ОСД. Все логично.

G-die

Есть USB для прошивки подвеса tarot t2d.
Возможно ли его использовать для настройки и прошивки minimOSD. Просто есть плата, нету FTDI.
Если возможно, то как подключить? никто не пробовал?

brusse

Там стоит pl2303hx, судя по даташиту это тот же ftdi, так что пойдет.
Подключение: если расположить плату вверх микросхемой и вниз разъемом (usb разъем вверху), то слева направо 1- RX, 2- TX, 3- пустой, 4- масса.

Alexan

Пришла следующая идея.
Начинать отсчет времени (тот который на экране показывает) когда коптер взлетает. Ну а взлет соответственно контролировать по газу > 50 процентов. Идея навеяна тем, что обычно от включения коптера и осд до реального взлета проходит от 2-х минут и больше.
Парни, кто в коде разобрался может сделаете соответствующий мод? Думаю будет всем полезен… кто заюзал пин газа.

PS. Если сложно реализовать не начинать отсчет времени с момента загрузки ОСД, можно реализовать однократный сброс времени при первичном газе. Подумалось, что так может быть проще.

7 days later
andry=

Будет ли реализовано GPS+компас для правильного рисования стрелки “домой”?
Или надежды мало?

alezz

мне кажется этот вопрос нужно задавать автору проекта, например на рцгрупс. И чем чаще он будет его слышать, тем больше вероятность что он его услышит. Моих знаний для такого мода не достаточно 😦

alezz

как-то даже обидно мне стало после предыдущего поста, поэтому собрался и сделал магнитный компас 😃 Алгоритм взят отсюда www.rcgroups.com/forums/showthread.php?t=1995704 поэтому как и в оригинале компенсации наклона нет!

Итак, манипуляций много, сначала процедуру void parse_dji_mag из GPS_DJI.ino:

void parse_dji_mag(struct DJI_MAG *mag)
{
#ifdef DJI_HEADING_FROM_MAG
	int mask = mag->mask;

	short x = decodeShort((byte*)&mag->magX, mask) ^ 0x0100;
	short y = decodeShort((byte*)&mag->magY, mask) ^ 0x0100;

	float heading = -atan2(y, x) * 180.0 / M_PI;
	if (heading < 0.0) heading += 360.0;

	// TODO add magnetic declination
	// TODO add tilt compensation

    GPSValues.Heading = heading;
#endif
}

заменяем на такой код:

int16_t decodeShortMag(uint16_t mag16, uint8_t mask)
{
  union { uint16_t s; uint8_t b[2]; } val;
  uint8_t byte0=(mag16&0x00FF);
  uint8_t byte1=(mag16&0xFF00)>>8;

  val.b[0] = byte0 ^ mask;
  val.b[1] = byte1 ^ mask;

  return val.s;
}

void parse_dji_mag(struct DJI_MAG *mag)
{
#ifdef DJI_HEADING_FROM_MAG
  uint8_t mask = mag->uk01;

  mask = (((mask ^ (mask >> 4)) & 0x0F) | ((mask << 3) & 0xF0)) ^ (((mask & 0x01) << 3) | ((mask & 0x01) << 7));
  int16_t x = decodeShortMag(mag->magX, mask);
  int16_t y = decodeShortMag(mag->magY, mask);
  if(x > magXMax) magXMax = x;
  if(x < magXMin) magXMin = x;
  if(y > magYMax) magYMax = y;
  if(y < magYMin) magYMin = y;
  headingNc = -atan2(y - ((magYMax + magYMin) / 2), x - ((magXMax + magXMin) / 2)) * 180.0 / M_PI;
  if(headingNc < 0) headingNc += 360.0;

  GPSValues.Heading = headingNc;
#endif
}

в GPS_DJI.h после строки float get_dji_down(void); добавляем строку:

int16_t magXMin;
int16_t magXMax;
int16_t magYMin;
int16_t magYMax;
double headingNc;// heading (not tilt compensated in degrees

ну и последнее в OSD_Config.h после строки #define GPS_PROTOCOL_DJI добавляем строку:

#define DJI_HEADING_FROM_MAG
Shuricus

Алексей, отличная работа! Может еще можно выложить готовые исходники со всеми модами?

alezz

ты сначала попробуй а потом “отличная работа” 😃 Я лично еще толком не тестил, только в руках коптер поносил по квартире и все
Все исходники выложить не могу т.к. у меня от оригинала там уже рожки и ножки остались, многое под себя переделал. Но пару файлов где максимальное количество изменений GPS_DJI.ino и GPS_DJI.h выложу

GPS_DJI.zip

Shuricus

А что еще под себя переделал, такого что остальным не подойдет?