micro / minimOSD для NAZA

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

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

andry=

Сори за нубство, не вдавался в копание исходников, просто заливал hex и шрифты.
Поправьте, где не прав:
Хочу проверить например мод alezz-а со стрелкой по компасу.
Имею уже действующую ОСД, подключение “easy”.

  1. Скачиваю файл MinNazaOsd_r75.zip (еле раскопал, может есть свежее версия?).
  2. Изменяю\заменяю GPS_DJI.ino и GPS_DJI.h.
  3. С помощью ардуиновской IDE напрямую компилирую и заливаю прошивку.

Хочу подключить еще напряжение батареи (только это, без остальной пайки на плату), без датчика напряжения, напрямую к батарее.
4. Нужен делитель с другими резисторами. 4,7к и 100к (примерно в 20 раз понизим напряжение)
5. Прямо в файле FlightBatt.h правлю параметр #define VOLT_DIV_RATIO, подбирая калибровку напряжения.
6. Компилирую\заливаю\проверяю значение напряжения на ОСД. При необходимости повторяю п.5-6.

alezz
Shuricus:

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

кому то пойдет, кому-то нет. Например: у меня включен радар, но отключена калибровка напряжение батареи (коэф подбирал руками и зашил прямо в исходник), при уровне газа >30% переключаются панели

andry=:
  1. Скачиваю файл MinNazaOsd_r75.zip (еле раскопал, может есть свежее версия?).
  2. Изменяю\заменяю GPS_DJI.ino и GPS_DJI.h.
  3. С помощью ардуиновской IDE напрямую компилирую и заливаю прошивку.
  1. да, r75 самая новая официальная
  2. да, плюс добавляешь строку включения компаса в OSD_Config.h (см. выше)
  3. компилируешь ардуиновской IDE, заливаешь в ОСДшку конфигуратором идущим в комплекте минназаосд
Shuricus
alezz:

при уровне газа >30% переключаются панели

А для чего это?

alezz
Shuricus:

А для чего это?

да баловство по сути. Я описывал такой мод в этой теме раньше, интересно поищи

andry=

Ставлю ардуино 1.0.6.
Загружаю minNAZAOSD.ino из комплекта MinNazaOsd_r75.
Жму проверить\скомпилировать.
Получаю:

This report would have more information with
“Show verbose output during compilation”
enabled in File > Preferences.
Arduino: 1.0.6 (Windows XP), Board: “Arduino Nano w/ ATmega328”
In file included from ArduCam_Max7456.cpp:4:
ArduCam_Max7456.h:78: error: expected class-name before ‘{’ token
ArduCam_Max7456.h:84: error: ‘uint8_t’ has not been declared
ArduCam_Max7456.h:84: error: ‘uint8_t’ has not been declared
ArduCam_Max7456.h:87: error: ‘uint8_t’ has not been declared
ArduCam_Max7456.h:90: error: ‘uint8_t’ has not been declared
ArduCam_Max7456.h:90: error: ‘uint8_t’ has not been declared
ArduCam_Max7456.h:97: error: ‘size_t’ does not name a type
ArduCam_Max7456.h:98: error: ‘uint8_t’ has not been declared
ArduCam_Max7456.h:99: error: ‘BetterStream’ has not been declared
ArduCam_Max7456.h:101: error: ‘uint8_t’ does not name a type
ArduCam_Max7456.cpp: In member function ‘void OSD::init()’:
ArduCam_Max7456.cpp:38: error: ‘video_mode’ was not declared in this scope
ArduCam_Max7456.cpp: In member function ‘void OSD::setMode(int)’:
ArduCam_Max7456.cpp:96: error: ‘video_mode’ was not declared in this scope
ArduCam_Max7456.cpp:97: error: ‘video_center’ was not declared in this scope
ArduCam_Max7456.cpp: In member function ‘int OSD::getMode()’:
ArduCam_Max7456.cpp:110: error: ‘video_mode’ was not declared in this scope
ArduCam_Max7456.cpp: In member function ‘int OSD::getCenter()’:
ArduCam_Max7456.cpp:125: error: ‘video_center’ was not declared in this scope
ArduCam_Max7456.cpp: At global scope:
ArduCam_Max7456.cpp:149: error: prototype for ‘void OSD::setPanel(uint8_t, uint8_t)’ does not match any in class ‘OSD’
ArduCam_Max7456.h:84: error: candidate is: void OSD::setPanel(int, int)
ArduCam_Max7456.cpp: In member function ‘void OSD::openPanel()’:
ArduCam_Max7456.cpp:164: error: ‘row’ was not declared in this scope
ArduCam_Max7456.cpp:164: error: ‘col’ was not declared in this scope
ArduCam_Max7456.cpp: In member function ‘void OSD::closePanel()’:
ArduCam_Max7456.cpp:193: error: ‘row’ was not declared in this scope
ArduCam_Max7456.cpp: At global scope:
ArduCam_Max7456.cpp:199: error: prototype for ‘void OSD::openSingle(uint8_t, uint8_t)’ does not match any in class ‘OSD’
ArduCam_Max7456.h:90: error: candidate is: void OSD::openSingle(int, int)
ArduCam_Max7456.cpp:223: error: no ‘size_t OSD::write(uint8_t)’ member function declared in class ‘OSD’
ArduCam_Max7456.cpp:238: error: prototype for ‘void OSD::control(uint8_t)’ does not match any in class ‘OSD’
ArduCam_Max7456.h:87: error: candidate is: void OSD::control(int)
ArduCam_Max7456.cpp:255: error: prototype for ‘void OSD::write_NVM(int, uint8_t*)’ does not match any in class ‘OSD’
ArduCam_Max7456.h:98: error: candidate is: void OSD::write_NVM(int, int*)

:(

Alexan
alezz:

проверил компас в поле - все работает идеально

Опубликуйте код на рсгрупп, пусть тестируют. Напишите автору, спросите почему он этого не сделал, может есть какие то тонкости, не учтенные вами.

andry=:

Загружаю minNAZAOSD.ino из комплекта MinNazaOsd_r75. Жму проверить\скомпилировать.

В этой теме, поищите, есть ссылка на видео как использовать проект в Ардуино. Сделаете как там показано, начнет компилировать.

alezz
Alexan:

Опубликуйте … Напишите … спросите

звучит как приказ 😃 На самом деле на рцгрупс давным давно опубликовал, а на вопрос “почему” могу ответить и сам. На тот момент когда автор активно занимался минназаОСД протокол компаса еще не был взломан, а когда взломали - он уже на ОСДшку забил, последняя правка кода была в ноябре 2013г.

Alexan
alezz:

звучит как приказ

Ни в коей мере. Это было пожелание 😃

alezz:

На самом деле на рцгрупс давным давно опубликовал

Что значит давно? Вы же только сегодня написали “как-то даже обидно мне стало после предыдущего поста, поэтому собрался и сделал магнитный компас”.

alezz:

он уже на ОСДшку забил

Может у человека времени не хватает… А вы его простимулируете своим кодом.

alezz

“давно” значит несколько часов назад 😃 На самом деле будет JR63 продолжать проект minnazaosd дальше или нет, есть у него время или нет, не особо и важно. На теперешнем этапе это уже вполне добротный и полноценный продукт. А уж с магнитным компасом и подавно 😃 Хотя если JR63 вставит мой код в основной проект, безусловно за

kluchik

Всем привет !!! Копался в зап. частях и попалось ОСД от Кролика 2.
Само сабой появился вопрос . На базе его реально сварганить весь этот
модуль и подключить к Назе лайт.

alezz

для самых ленивых, кто хочет посмотреть стрелку домой на основе компаса, но не хочет компилить исходники выкладываю свою готовую прошивку:

minNAZAOSD.cpp.zip