Переделка FY-20A на CC

HikeR
Edward_tlt:

Какие файлы испльзуются, где это посмотреть?

прошивка целиком и полностью построен на утилите make, открываете главный Makefile и смотрите что выполняется по команде make coptercontrol.
основные “настройки” в каталогах \flight\CopterControl\* и \flight\PiOS\*

Edward_tlt:

he was not interested in sharing the source code

а что тогда выложили на гуглькод?

p.s.
в исходниках есть проект под эклипс, но он позволяет только редактировать файлики да запускать комплицию/прошивку. взаимосвязи там очень хреново прописаны, дефайны из Makefile-ов вобще отброшены, вобщем изучать исходники весьма неудобно. блокнот и Ctrl+F - основной инструмент ;)

baychi
HikeR:

в исходниках есть проект под эклипс

Дмитрий, скажите, существует ли на сегодняшний день прошивка платы Copter Control для самолета с подключением GPS и функцией автовозврата (RTH)? И если да, то где ее можно взять (пусть эксперементальную и недопроверенную)? Или такая прошивка принципиально невозможна в рамках ресурсов платы CC?

HikeR

ветка andrey/CC_Guidance, возврат по команде или пропаданию связи, удержание позиции, полет “галсами” против ветра (если скорости возврата недостаточно), летание по спирали. только самолеты, хотя Андрей вроде бы начал тренироваться и на коптерах.

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

повторяемость как симуляторе, так и в жизни потрясающая.

ветку я давно не смотрел, вот настройки стабилизации двухмесячной давности:

Развернуть

Назначение полей в ccguidancesettings.
Yaw - положение оси в нейтрали.
Pitch - Climb,Sink - значения в градусах для набора или снижения высоты, Kp - множитель для разности заданной и текущей высоты.
Roll - На текущий момент используется только поле нейтрального значения оси.
Trottle - Kp,StepMax,Max,Min
Kp множитель разности заданной и текущей скорости.
StepMax - максимальный шаг изменения trottle за один вызов модуля.
Max,Min - предельные значения trottle.

ReturnTobaseAltitudeOffset - высота над базой, что бы в землю не влепить аппарат из за ошибок определения высоты.
RadiusBase - радиус окружности вокруг точки базы, в этой области самолёт летит с предыдущим расчитанным направлением.
TimesRotateToCourse - время на разворот самолета на новый курс, с целью снижения скорости поворота по оси Yaw на момент расчета поправок к Attitude.Yaw, с этой же периодичностью рассчитывается новой курс. Если задать период обновления меньше периода обновления GPS данных с приёмника, время будет равно периоду обновления GPS данных.
MovingAverageMedianYaw - включение фильтрации поправок к Attitude.Yaw.
GroundSpeedMax - задание скорости движения самолёта.
GroundSpeedCalcCorrectHeadMin - минимальная скорость при которой допускается вычисление поправки к Attitude.Yaw.
FaileSaveRTB - разрешение автоматической активации возврата на базу при потере сигнала с пульта.
TrottleAutoSet - разрешение автоматического управления газом для поддержания скорости. (на земле если в состоянии Arming, и включен режим возврата на базу или с включенной опцией выше выключить пульт - двигатель запустится)
CircleAroundBaseHelixAngle - угол сужения-расширения спирали при движении вокруг базы (центральная линия RadiusBase * 0,5)
(на будущее если дальше пробовать такой способ сделаю раздельное задание углов сужения-расширения)
CircleAroundBase - включение-отключение движения по кругу вокруг базы.
SimpleCourseCalc - включение простого способа расчёта курса на базу.
HomeLocationSet - данные местоположения базы, можно или нет использовать.
HomeLocationLatitude - широта (градусы умноженные на 10^6) тип int32
HomeLocationLongitude - долгота (градусы умноженные на 10^6) тип int32
HomeLocationAltitude - высота над уровнем моря, тип float
UpdatePeriod - ограничение периода обработки функции ccguidanceTask, если вызов произошёл раньше этого времени то выход из функции, можно использовать для
ограничения периодичности обработки данных от GPS в модуле CC_Guidance.

дополнение:
Теперь задаётся один параметр PeriodCorrectBiasYaw:
Вне радиуса базы, с этой периодичностью рассчитывается курс, меняется левый, правый галс

детали и текущее состояние пытайте у Андрея (Astron на OP форуме).

Edward_tlt

Бутлоадер прошился нормально, сегодня распаял юсб разьём - фишка уже прикидывается Copter Control 😃 Потом припаял флешку, ну и осталось с исходниками разобраться. Вот тут вопрос - если всё так плохо с эклипсом, то может в чем то другом проект пересобрать основываясь на маке-файле, есть же кейл, иар… Ну может и ещё кто что посоветует?

HikeR
Edward_tlt:

есть же кейл, иар

  1. они ни разу не бесплатные
  2. проект все равно придется делать с нуля
  3. их компиляторы сгенерируют другой код (изменится время основного цикла, на него завязано абсолютно все)

проблем со сборкой ведь нет, написал “make coptercontrol”, получил через 3 минуты прошивку. лазить по исходникам с тем что есть неудобно, эклипс матерится на не найденные заголовки, отсутствующие дефайны и тд.

хотя если всякие кейлы могут построить проект на основе рабочего набора Makefile-ов, то можете и попробовать. только компилятор менять не стоит.

Edward_tlt
HikeR:

проблем со сборкой ведь нет, написал “make coptercontrol”, получил через 3 минуты прошивку. лазить по исходникам с тем что есть неудобно, эклипс матерится на не найденные заголовки, отсутствующие дефайны и тд.

Т.е. просто не обращать на это внимания?

HikeR

пример. в главном makefile написано:

# Set to YES to build a FW version that will erase all flash memory
ERASE_FLASH ?= NO

эклипс ничего не знает про этот дефайн, поэтому даже при его задействовании при просмотре кода:

#ifndef ERASE_FLASH
	/* Initialize watchdog as early as possible to catch faults during init */
	PIOS_WDG_Init();
#endif
// ... skipped
#ifdef ERASE_FLASH
	PIOS_Flash_W25X_EraseChip();
#endif

будет непонятно, выполняется эта часть или нет. а собственно сборка в эклипсе - это просто выполнение все той же команды “make coptercontrol”.

baychi
HikeR:

ветка andrey/CC_Guidance

В анонимном режиме запросить не удалось. Вероятно - только для участников проекта.
Придется подождать, пока ктониь из коллег по форуму до этого не дойдет.

HikeR

в смысле “не удалось”?

hhr@HHR-WIN7 /d/devel_src
$ git clone git://git.openpilot.org/OpenPilot.git OpenPilotReadOnly
Cloning into 'OpenPilotReadOnly'...
remote: Counting objects: 71134, done.
remote: Compressing objects: 100% (23678/23678), done.
remote: Total 71134 (delta 49335), reused 65844 (delta 44919)
Receiving objects: 100% (71134/71134), 134.23 MiB | 591 KiB/s, done.
Resolving deltas: 100% (49335/49335), done.

hhr@HHR-WIN7 /d/devel_src
$ cd OpenPilotReadOnly/

hhr@HHR-WIN7 /d/devel_src/OpenPilotReadOnly (master)
$ git checkout andrey/CC_Guidance
Branch andrey/CC_Guidance set up to track remote branch andrey/CC_Guidance from origin.
Switched to a new branch 'andrey/CC_Guidance'

hhr@HHR-WIN7 /d/devel_src/OpenPilotReadOnly (andrey/CC_Guidance)
$ git remote -v
origin  git://git.openpilot.org/OpenPilot.git (fetch)
origin  git://git.openpilot.org/OpenPilot.git (push)
baychi
HikeR:

git clone git://git.openpilot.org/OpenPilot.git OpenPilotReadOnly

Так - проходит. Спасибо. Но где на офиициальных страничках проекта говорится о шаманском слове “OpenPilotReadOnly”?
Опять “внутренний круг” получается. 😃

HikeR

“OpenPilotReadOnly” - это название каталога, в который сольется репозиторий. можно вместо него написать “OpenPilotFullWrite”, или “KatalogDlyaVsyakoyFigni”, ничего не измениться.

baychi
HikeR:

ничего не измениться.

Ага. Следущая команда:
$ git checkout andrey/CC_Guidance
как не проходила, так и не проходит. Пишет много слов, в частности:
D:\AviaSoft\Git\OpenPilotReadOnly>hed to a new branch ‘andrey/CC_Guidance’
error: pathspec ‘andrey/CC_Guidance’ did not match any file(s) known to git.
error: pathspec ‘Branch’ did not match any file(s) known to git.

HikeR

дайте полный лог или скриншот на худой конец, а также вывод “git --version” и “git remote -v” в каталоге репозитория.

18 days later
Edward_tlt
sc_lab:

I also read my FW from FY20 and is on file. code.google.c.../downloads/list

Скачал, попробовал подменить файлы, прошивка собираться не хочет, ругается на CameraStab. Делаю вроде всё по инструкции Дмитрия. Житейский вопрос: как скопировать инфу, что выдаётся в окне cmd?

sc_lab
Edward_tlt:

Это сделано, но всё равно в этой куче файлов разбираться и разбираться…😃 Какой компилятор использовать лучше для просмотра и редактирования исходников?

Mojno programirovat processor po port RC232 s pomoshti FlashLoaderDemonstrator (USB i vseh provodov nenujno svyazat…)

SW coptercontrol razpolojen na adrese 8003000.

Zdes postavil Pictures kak eto delaetsa.

code.google.com/p/fy20-openpilot/…/detail?name=Fla…


Mark, enter, open new document, paste

Edward_tlt

Спасибо Stefan!
Вот что у меня получается на выходе

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

D:\devel\OpenPilot>mingw32-make uavobjects
d:/devel/MinGW/bin/mingw32-make -f Makefile.Debug
mingw32-make[2]: Nothing to be done for `first'.
- OpenPilot UAVObject Generator -
Done: processed 52 XML files and generated 52 objects with no ID collisions. Tot
al size of the data fields is 1762 bytes.
generating gcs code
- OpenPilot UAVObject Generator -
Done: processed 52 XML files and generated 52 objects with no ID collisions. Tot
al size of the data fields is 1762 bytes.
generating flight code
- OpenPilot UAVObject Generator -
Done: processed 52 XML files and generated 52 objects with no ID collisions. Tot
al size of the data fields is 1762 bytes.
generating python code
- OpenPilot UAVObject Generator -
Done: processed 52 XML files and generated 52 objects with no ID collisions. Tot
al size of the data fields is 1762 bytes.
generating matlab code
- OpenPilot UAVObject Generator -
Done: processed 52 XML files and generated 52 objects with no ID collisions. Tot
al size of the data fields is 1762 bytes.
generating java code

D:\devel\OpenPilot>cs-make coptercontrol
d:/devel/CodeSourcery/bin/cs-make -f Makefile.Debug
cs-make[2]: Nothing to be done for `first'.
- OpenPilot UAVObject Generator -
Done: processed 52 XML files and generated 52 objects with no ID collisions. Tot
al size of the data fields is 1762 bytes.
generating flight code
 CC         d:/devel/OpenPilot/flight/Modules/CameraStab/camerastab.c
../Modules/CameraStab/camerastab.c: In function 'attitudeUpdated':
../Modules/CameraStab/camerastab.c:118:15: error: 'CameraStabSettingsData' has n
o member named 'Inputs'
../Modules/CameraStab/camerastab.c:118:23: error: 'CAMERASTABSETTINGS_INPUTS_ROL
L' undeclared (first use in this function)
../Modules/CameraStab/camerastab.c:118:23: note: each undeclared identifier is r
eported only once for each function it appears in
../Modules/CameraStab/camerastab.c:118:58: error: 'CAMERASTABSETTINGS_INPUTS_NON
E' undeclared (first use in this function)
../Modules/CameraStab/camerastab.c:119:6: error: 'CameraStabSettingsData' has no
 member named 'Inputs'
../Modules/CameraStab/camerastab.c:119:6: error: 'CAMERASTABSETTINGS_INPUTS_ACCE
SSORY0' undeclared (first use in this function)
../Modules/CameraStab/camerastab.c:122:15: error: 'CameraStabSettingsData' has n
o member named 'Inputs'
../Modules/CameraStab/camerastab.c:122:23: error: 'CAMERASTABSETTINGS_INPUTS_PIT
CH' undeclared (first use in this function)
../Modules/CameraStab/camerastab.c:123:6: error: 'CameraStabSettingsData' has no
 member named 'Inputs'
../Modules/CameraStab/camerastab.c:126:15: error: 'CameraStabSettingsData' has n
o member named 'Inputs'
../Modules/CameraStab/camerastab.c:126:23: error: 'CAMERASTABSETTINGS_INPUTS_YAW
' undeclared (first use in this function)
../Modules/CameraStab/camerastab.c:127:6: error: 'CameraStabSettingsData' has no
 member named 'Inputs'
cs-make[1]: *** [d:/devel/OpenPilot/build/fw_coptercontrol/camerastab.o] Error 1

cs-make: *** [fw_coptercontrol_opfw] Error 2

D:\devel\OpenPilot>cs-make coptercontrol

USB у меня уже распаян и залит boot правда наверное не тот… Но СС видит плату.

sc_lab
Edward_tlt:

Полетели!

Поздравляю,
сегодня попробовал FY20 с код Андрею на квадрокоптере и работае хорошо,
летает отлично.

code.google.com/p/fy20-openpilot/downloads/list

Квадроцоптер собран на китайское шаси HJ450, no ето шаси нет разводки для моторов,
так что сделал дополнительную платы.
dealextreme.com/…/4-axis-hj450-multi-flame-wheel-f…

Завтра сделаю видео и положу.

nemo61
Edward_tlt:

Полетели!

Скажите, в чём заключается переделка?
Меняется схема…
Меняется загрузчик…
Меняется прошивка…
Если можно, расскажите поподробнее.

Edward_tlt
nemo61:

Скажите, в чём заключается переделка?

Допаивается разьём USB с обвязкой, допаивается SPI Flash, заливается бутлоадер и прошивка - это в кратце. Подробнее чуть позже напишу.
Да вот ещё подожду отчет Стефана по испытанию фишки с кодом Андрея. Интересно же как ЖПС работает:)