Проект Мегапират на самик!

LeonVS
Syberian:

К тому же, на них нет подвески, т.е. все наводки и конденсат наши.

Вот оно в чем дело, ну хоть все встало на свои места, что радует 😃 А по скорости очень похоже на правду что это метры в секунду / 10. Хотя смотрю у тебя уже стоит преобразование в км/ч на выход в еОСД… Чтот мое запуталось однако 😃
sport.write((byte)(g_gps->ground_speed * 0.036));

Diman_Y:

Чисто предположу, что инверсия происходит когда происходит переполнение больше 16 бит.

Тогда почему сие не происходит при комнатной температуре ни при каких условиях?

ukkr
Syberian:

Велкам в нестройные ряды пиратов Покупать надо было на csgshop.com, там на 20 баксов дешевле.
Чтобы не ломать глаз в блокноте, используйте Notepad++, там есть подсветка синтаксиса.
Для поиска текста по всему проекту пользуюсь FAR manager 1.63 - типа нортона под виндой.

Пасиб 😃 Про csgshop.com – не знал, спасибо, на будущее запомню. Линку брал то ли с чьего-то блога, то ли с начала этой темы. Про ЦСГШоп там не было. 😦
По поводу Notepad++ – я его уже года 2 использую, как и SciTe. Много вещей в них делать удобнее чем в Eclipse( в основном, я Java Enterprise разработчик). А файловый менеджер уже нное количество лет – Total Commander. Тока не будем разжигать религиозную войну Far Vs TC. 😌

Олег, возвращаясь к моему предыдущему посту:
1)

PINE и PINL. Если предположить, что это Port E и Port L Меги 2560

Правильно ли это предположение?
2)

посмотреть на схеме BlackVortex, что у него подключено к соответствующим ножкам этих портов:

(PINE & 128)
(PINE & 64)
(PINL & 64)

Выходит, что к 6й, 7й ножке порта Е и 6й ножке порта L подключались те самые

оригинальном ардупилоте за реверсы отвечают микропереключатели на плате.

?
П.С. И ссылкой на схему BV не поделитесь?

LeonVS
ukkr:

П.С. И ссылкой на схему BV не поделитесь?

Думаю схему не кто не даст, как то тут уже писалось, мол это ком. тайна и все такое 😃

ukkr
LeonVS:

Отписался уже, что туплю под вечер 😃 Один ноль потерял 😃 В общем, гипотеза по скорости провалилась…

Не всё так плохо 😃
defines.h содержит константу предела скорости, при которой автопилот начнёт отрыв от земли
#define SPEEDFILT 400 // centimeters/second; the speed below which a groundstart will be triggered
По mavlinkу тоже
g_gps->ground_speed * rot.a.x, // X speed cm/s
g_gps->ground_speed * rot.b.x, // Y speed cm/s
В том же config.h
#ifndef AIRSPEED_CRUISE
# define AIRSPEED_CRUISE 12 // 12 m/s
#endif
#define AIRSPEED_CRUISE_CM AIRSPEED_CRUISE*100 – специально переводят себе в cm/s

Идём дальше AP_DCM.cpp (хреновина, которая всё и решает 😃):
#define SPEEDFILT 300 // centimeters/second
radio.pde тоже оперирует cm/s

Так что Ваше предположение о том, что внутри МегаПират оперирует сантиметрами/сек скорее всего верно.

Да, если bvHUD – ответная часть для ОСД: sport.write((byte)(g_gps->ground_speed*0.036)); //m/s *100 transform to KPH
Если _EOSD – ответная часть для какой-то другой ОСД sport.write((byte)(g_gps->ground_speed*0.036));
Т.е. то же самое cm/s переводят в km/h

Значит у МегаПилота всё нормально. Особенно, учитывая тот факт, что g_gps->ground_speed используется в МП везде.
Если показывается в ОСД другое значение – надо тогда смотреть код самой ОСД, скорее всего он неправильно отмалёвывает. Или неправильно вынимает то, что ему приходит от bvHUD или _EOSD части МегаПилота.

dundel1
ukkr:

Выходит, что к 6й, 7й ножке порта Е и 6й ножке порта L подключались те самые оригинальном ардупилоте за реверсы отвечают микропереключатели на плате.

“Пробил” только что схему оригинального ардупилота. Таки да, переключатели реверсов подключены к ногам соответствующих портов контроллера -
PL6 - 41
PL7 - 42
PE6 - 8
PE7 - 9

П.С. И ссылкой на схему BV не поделитесь?

Схема Вортекса - Мега 2560 + датчики в стандартном подключении. По пдфкам с его сайта достаточно хорошо видно разводку верхней стороны платы. Ничего, кроме задействованных в Пирате ног там дополнительно не разведено. В т.ч. и эти ноги тоже не разведены. Я себе развёл свою плату, аналогичного функционала, только ЖПС вынес отдельно. Жду датчики, чтобы собрать и проверить в работе:)

ukkr

Да, по поводу нашего БлекВортекса и единиц измерения скорости в МегаПирате.
У нас стоит U-Blox ГПС, скорость вынимается из MSG_VELNED их протокола. А там единицы измерения чётко указаны

velN cm/s NED north velocity
8 I4 - velE cm/s NED east velocity
12 I4 - velD cm/s NED down velocity
16 U4 - speed cm/s Speed (3-D)
20 U4 - gSpeed cm/s Ground Speed (2-D)

Так что Леонид Вы правы, МегаПират оперирует cm/s

dundel1:

PL6 - 41
PL7 - 42
PE6 - 8
PE7 - 9

Отлично, что подтвердилось. Теперь по коду стало намного проще понимать, что такое PINE и PINL.

Syberian
ukkr:

Правильно ли это предположение?

Если не посылать вас в даташит, то на пальцах: порт у атмеги состоит из 3 регистров: PORT DDR PIN. PORT это регистр выхода, DDR это направление, PIN это физическая нога. Буквы после них - это названия портов.

ukkr:

Если показывается в ОСД другое значение – надо тогда смотреть код самой ОСД

никак нет, в осд тупо показывается значение одного байта скорости. Преобразование выполняется в _EOSD.pde

ukkr
Syberian:

никак нет, в осд тупо показывается значение одного байта скорости. Преобразование выполняется в _EOSD.pde

Олег, там же банальный

sport.write((byte)(g_gps->ground_speed*0.036));

Получается, есть только 3 варианта:

  1. (наименее вероятный) – неисправный GPS или связка Atmega2560 +GPS. Но тогда должно плющить и сам самолёт, gps->ground_speed используется повсеместно в коде, даже в DCM
  2. Компилятор сгенерировал кривой код для
(byte)(g_gps->ground_speed*0.036)

В принципе, вероятность этого есть, Ардуина же использует WinAvr’овский g++, а в нём часто находили говнокодо-генерацию.
3) Баг в прошивке самой ОСД. Например в функции, которая переводит число в строку. Достаточно распространённый трабл. Правда, непонятно почему тогда остальные показометры правильно отмалёвываются в ОСД.

Других вариантов я не вижу.😌

LeonVS

Расшевелил я смотрю ветку 😉

ukkr:

Компилятор сгенерировал кривой код для
Код:
sport.write((byte)(g_gps->ground_speed*0.036));

Перекомпилил я сие строчку в:
sport.write((byte)(g_gps->ground_speed * 36 / 1000));
Может с целыми числами дело пойдет лучше 😃
Сегодня -22, вот думаю поэкстрималить в полях, или лучше все же дома на печи поваляться 😃

ukkr

Сегодня -22, вот думаю поэкстрималить в полях, или лучше все же дома на печи поваляться

Та ну, ни один автопилот не стоит такого издевательства над человеком.

LeonVS
LeonVS:

Перекомпилил я сие строчку в:
sport.write((byte)(g_gps->ground_speed * 36 / 1000));

Результат отрицательный 😦 Скорость так же скачет…

ukkr:

Та ну, ни один автопилот не стоит такого издевательства над человеком.

Однако ваша правда, на крайнем полете сперва думали что сглючил АП, самуль проходя последнюю точку стал разворачиваться и быстро снижаться, метрах в 10-20 переключил на ручное ручку на себя, но скай как шел под углом градусов 45 так и вписался в сугроб…
Логи показали то ли отвалился кабанчик, то ли замерзла серва РВ… АП до последнего давил на себя на максимум…

К стати, какая переменная отвечает за шаг миссии? Хотелось бы знать какой шаг в данный момент исполняет АП… Я бы пока нет бвХУД вместо скорости вывел данные в планер, больше толка бы было, скорость все равно кривая 😃

ukkr
LeonVS:

К стати, какая переменная отвечает за шаг миссии? Хотелось бы знать какой шаг в данный момент исполняет АП…

Пока рылся в коде – натыкался на такие переменные next_nav_command и next_nonnav_command. Собственно у МегаПирата идёт разделение на эти 2 подтипа команд. Дёргается update_commands() на каждой итерации из commands_process.pde. Все кишки сидят в commands.pde, commands_logic.pde и commands_process.pde.

LeonVS

Счетчик туда прилепить может? И циферу в планер выводить, для настройки будет очень кстати.

ukkr
LeonVS:

Счетчик туда прилепить может? И циферу в планер выводить, для настройки будет очень кстати.

Не совсем понял. Там по каждой комманде при обработке идёт логирование на GCS, если я правильно понимаю :
gcs_send_text_fmt(PSTR(“Executing command ID #%i”),next_nav_command.id);
и
gcs_send_text_fmt(PSTR(“Executing command ID #%i”),next_nonnav_command.id);

LeonVS

Спасиб! Это то что надо, теперь надо всего лишь “i” отправить куда надо 😃
Олег, может замутишь в еОСД еще один байт в сервис строке для отображения номера команды навигации?

ukkr

не, не “i” 😃 Вот это: “Executing command ID #%i” всего лишь показывает, что вместо %i надо подставить целочисленное значение.
А уже функция gcs_send_text_fmt подставит значение второго параметра( к примеру, next_nav_command.id) в эту строку.

То, что Вам надо-- эти две переменные:next_nav_command.id и next_nonnav_command.id. Вам надо посылать их на еОСД, а там парсить и выводить. Только учтите, эти айдишки – всего лишь айдишки типов команд. Ну т.е. банальные 1-2-3 и т.д. А вам ещё надо, на сколько я понял, и параметры самой команды. Ну т.е, вас не устроит банальное, скажем 10(к примеру, это поворот). А Вы хотите увидеть что-то типа: команда 10(поворот), направление 10 градусов, вокруг оси Х.
Беда в том, что у каждого типа команды свой набор параметров. Как в количественном, так и в типовом( целое, вещественное и т.д.) виде. Думаю, что вывести команды вместе с параметрами на ОСД в общем случае не выйдет.

Syberian
ukkr:

А вам ещё надо, на сколько я понял, и параметры самой команды

Насколько я понял, нужен всего лишь номер команды по порядку, как она в миссии записана.

LeonVS
ukkr:

Ну т.е, вас не устроит банальное, скажем 10

Да нет, вполне устроит, то что делает определенная строчка я и так знаю, для меня важно знать что он в данный момент выполняет именно ее. Так что достаточно банально знать номер выполняемой команды 😃

ukkr
LeonVS:

Так что достаточно банально знать номер выполняемой команды

Тогда Вам нужны эти 3 переменные( насколько я понял):

static byte	command_index;						// current command memory location
static byte	nav_command_index;					// active nav command memory location
static byte	non_nav_command_index;				// active non-nav command memory location

Потому что, next_nav_command.id и next_nonnav_command.id – это не айдишки команд в мишн-плане, а типы команд, например: разворот, набор высоты, сфотографировать вон ту красивую мадам с глубоким декольте и т.д.

LeonVS

В режиме Лойт и РТЛ ацки дергается серва РВ, фильтр чтоль отсутствует, и он так пытается высоту держать…?

LeonVS

Вывел вместо скорости (все равно кривую кажет) температуру с баро датчика для мониторинга, как показала практика если включенный вынести на морозец (сейчас -14) температура на плате меньше +6 не падает, вортекс сам себя греет не плохо 😃 Завтра замеряем что будет в полете.