Переделка FY-20A на CC
Какие файлы испльзуются, где это посмотреть?
прошивка целиком и полностью построен на утилите make, открываете главный Makefile и смотрите что выполняется по команде make coptercontrol.
основные “настройки” в каталогах \flight\CopterControl\* и \flight\PiOS\*
he was not interested in sharing the source code
а что тогда выложили на гуглькод?
p.s.
в исходниках есть проект под эклипс, но он позволяет только редактировать файлики да запускать комплицию/прошивку. взаимосвязи там очень хреново прописаны, дефайны из Makefile-ов вобще отброшены, вобщем изучать исходники весьма неудобно. блокнот и Ctrl+F - основной инструмент ;)
в исходниках есть проект под эклипс
Дмитрий, скажите, существует ли на сегодняшний день прошивка платы Copter Control для самолета с подключением GPS и функцией автовозврата (RTH)? И если да, то где ее можно взять (пусть эксперементальную и недопроверенную)? Или такая прошивка принципиально невозможна в рамках ресурсов платы CC?
ветка 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 форуме).
Бутлоадер прошился нормально, сегодня распаял юсб разьём - фишка уже прикидывается Copter Control 😃 Потом припаял флешку, ну и осталось с исходниками разобраться. Вот тут вопрос - если всё так плохо с эклипсом, то может в чем то другом проект пересобрать основываясь на маке-файле, есть же кейл, иар… Ну может и ещё кто что посоветует?
есть же кейл, иар
- они ни разу не бесплатные
- проект все равно придется делать с нуля
- их компиляторы сгенерируют другой код (изменится время основного цикла, на него завязано абсолютно все)
проблем со сборкой ведь нет, написал “make coptercontrol”, получил через 3 минуты прошивку. лазить по исходникам с тем что есть неудобно, эклипс матерится на не найденные заголовки, отсутствующие дефайны и тд.
хотя если всякие кейлы могут построить проект на основе рабочего набора Makefile-ов, то можете и попробовать. только компилятор менять не стоит.
проблем со сборкой ведь нет, написал “make coptercontrol”, получил через 3 минуты прошивку. лазить по исходникам с тем что есть неудобно, эклипс матерится на не найденные заголовки, отсутствующие дефайны и тд.
Т.е. просто не обращать на это внимания?
пример. в главном 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”.
ветка andrey/CC_Guidance
В анонимном режиме запросить не удалось. Вероятно - только для участников проекта.
Придется подождать, пока ктониь из коллег по форуму до этого не дойдет.
в смысле “не удалось”?
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)
git clone git://git.openpilot.org/OpenPilot.git OpenPilotReadOnly
Так - проходит. Спасибо. Но где на офиициальных страничках проекта говорится о шаманском слове “OpenPilotReadOnly”?
Опять “внутренний круг” получается. 😃
“OpenPilotReadOnly” - это название каталога, в который сольется репозиторий. можно вместо него написать “OpenPilotFullWrite”, или “KatalogDlyaVsyakoyFigni”, ничего не измениться.
ничего не измениться.
Ага. Следущая команда:
$ 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.
…
дайте полный лог или скриншот на худой конец, а также вывод “git --version” и “git remote -v” в каталоге репозитория.
автор переделки ответил кратко, но ёмко 😃
там же ссылки на исходники (250Мб!!!).
I uploaded files for FY20 Servoo board and STM32 grogrammer.
Changes for use CC_SW without change original CPU (FY20 use stm32f103 rbt6).
I also read my FW from FY20 and is on file.
I also read my FW from FY20 and is on file. code.google.c.../downloads/list
Скачал, попробовал подменить файлы, прошивка собираться не хочет, ругается на CameraStab. Делаю вроде всё по инструкции Дмитрия. Житейский вопрос: как скопировать инфу, что выдаётся в окне cmd?
Это сделано, но всё равно в этой куче файлов разбираться и разбираться…😃 Какой компилятор использовать лучше для просмотра и редактирования исходников?
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.
Спасибо 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 правда наверное не тот… Но СС видит плату.
Полетели!
Поздравляю,
сегодня попробовал FY20 с код Андрею на квадрокоптере и работае хорошо,
летает отлично.
code.google.com/p/fy20-openpilot/downloads/list
Квадроцоптер собран на китайское шаси HJ450, no ето шаси нет разводки для моторов,
так что сделал дополнительную платы.
dealextreme.com/…/4-axis-hj450-multi-flame-wheel-f…
Завтра сделаю видео и положу.
Полетели!
Скажите, в чём заключается переделка?
Меняется схема…
Меняется загрузчик…
Меняется прошивка…
Если можно, расскажите поподробнее.
Скажите, в чём заключается переделка?
Допаивается разьём USB с обвязкой, допаивается SPI Flash, заливается бутлоадер и прошивка - это в кратце. Подробнее чуть позже напишу.
Да вот ещё подожду отчет Стефана по испытанию фишки с кодом Андрея. Интересно же как ЖПС работает:)