Платы CopterControl, CC3D, LibrePilot, Revolution от OpenPilot

HikeR
parahawk:

но при старте CC всегда в Manual.

5 входных каналов - минимальное условие для запуска модуля ManualControl, а значит и всех от него зависимых.
однако стабилизация камеры работает всегда независимо от “есть сигнал/нет сигнала”, эту фишку я советовал SkyWorker-у для юзанья CC вместе с Ikarus-ом, и вроде как у него все получилось. попытайте его насчет способа подключения.

TimAU:

там эти опенпайлоты сидят в какой-то комнатке и все вместе дружно рассовывают все по пакетикам и коробочкам?

этим занимался один человек, dankers. в штаты отсылал проверенные платы без прошивки (из-за каких-то дурацких законов), в остальные страны с последней “официальной” прошивкой, по особым просьбам прошивал последние на тот момент. магазины точно так же получали платы только через него.

TimAU
alex_f73:

В случае обнаружения бага, если придется переделывать дизайн платы, думаю для этого.

Багу в дизайне уже давно выловили, так как этот дизайн они тестируют уже месяца 2 а может и больше

HikeR:

этим занимался один человек, dankers. в штаты отсылал проверенные платы без прошивки (из-за каких-то дурацких законов), в остальные страны с последней “официальной” прошивкой, по особым просьбам прошивал последние на тот момент. магазины точно так же получали платы только через него.

А ну теперь все понятно. Я то думал у них на широкую ногу там все поставлено…

UserM:

Вот интересно, если эта плата комерчески интересна, то почему сейчас её нет у Китайских продавцов?

На таобао видел полную копию судя по фоткам, но там все на китайском и нифига не понятно что именно они хотят. Мне думается в китае на внутреннем рынке есть.

chumric

В очередной раз образовалось немножко свободного времени, повторил издевательства над гексой.

Прошивка: fw_coptercontrol-20120201-213a915f
Сбросил все настройки,
выставил горизонт, откалибровал регуляторы

файл с настройками в uav_data.zip

При запуске коптер старается убежать

Увеличил Ki (на inner и outer loop) до 0,002
В поведении коптера ничего не изменилось, тогда решился на отчаянные меры, поставил его перпендикулярно земле, и дал армингу.

Шестикрылое животное, нехотя, почихивая но начала взлетать практически ровно. Я был в шоке от своего открытия, затем я попытался повторить тоже самое но уже на камеру, и у меня практически получилось,

youtu.be/FvXTxad3gf0

а теперь вопрос, а что это было?

uav_data.zip

TimAU

имхо стандартное поведение на малом газу, надо дать ему взлететь, поддайте газу

zvuk_Irkutsk
chumric:

а теперь вопрос, а что это было?

Да нормально все, СС главное оторвать от земли подальше, а там он сам со стабилизацией справиться, и будет вести себя отлично.
Смелее газу на отрыв, при этом стиками выправить положение, поднять на 1-1,5 метра и редкими движениями стиков просто подправлять положение аппарата.
Да, и для испытаний гексы помещение маловато, лучше убрать эти громоздкие “треники” и смело идти на улицу, на какую-нибудь полянку побольше. Результат не заставит себя ждать - сами удивитесь как СС может летать.

SergDoc

Незнаю, у меня впринципе трёшка, и псевдоCC на муратовских гирах, но при взлёте (медленном) только по курсу провернутся желает, а в стороны не тягается…

parahawk
HikeR:

5 входных каналов - минимальное условие для запуска модуля ManualControl, а значит и всех от него зависимых.
однако стабилизация камеры работает всегда независимо от “есть сигнал/нет сигнала”, эту фишку я советовал SkyWorker-у для юзанья CC вместе с Ikarus-ом, и вроде как у него все получилось. попытайте его насчет способа подключения.

Короче говоря - сделал с помощью трюка вход на выход. В первый раз не получилось из-за того что в Input были разные каналы (6й вход на 6й выход подключен). Когда в Input установил ролл, питч, газ, руддер + flightmode - пока не назначил на все эти моменты канал - армед не включался. Вплоть до flightmode.

Теперь flightmode успешно срабатывает и на старте CC в Stabilized.

Помог A*Morale …openpilot.org/…/10978-how-to-start-cc-in-flightmo… уточнением “- configure all the input as PWM/Channel 6.”

SergDoc:

Незнаю, у меня впринципе трёшка, и псевдоCC на муратовских гирах, но при взлёте (медленном) только по курсу провернутся желает, а в стороны не тягается…

Подобное я заметил в случае если на трёхе пропы одного вращения. Один проп ставим на обратное вращение и трёха себя ведёт стабильно без неконтролируемых поворотов.

Bluebird
HikeR:

этим занимался один человек, dankers.

Абсолютли! Данкерс ЛИЧНО проверял каждую плату! Все потому что гиры шли партиями с браком, потому Отец проекта сам все тестил чтобы никому не досталась плата с мертвой гирой или акселем. За что ему спасибо огромное.

HikeR:

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

Вот вот. Проект то не коммерческий, не забывайте 😉

Gapey

с гирами вообще какаято странная картина … инвенсенс их делает уже не первый год … соответственно их покупают и ставят в свои изделия многие разработчики … если бы у всех были такие проблемы как у опенпилотов , то инвенсенс давно-бы разорился … притом это одни из самых древних , простых , аналоговых гир …
даже после тщательного тестирования , у многих пользователей современем возникали проблемы с гирами … притом восновном с ISZ-500 … я их каждый раз заказываю чуть больше чем IDG-500 и их забирают для замены в СС … нужно будет попробовать купить еще ISZ-505 и попробовать впаять вместо 500й , они вроде как на замену сделаны …
лично мне еще ниразу не попаласЪ бракованная 500 гира , да и купившие у меня пока не жаловалисЪ … может сборщику СС просто попаласЪ неудачная партия с браком … ХЗ …

Bluebird
Gapey:

нужно будет попробовать купить еще ISZ-505 и попробовать впаять вместо 500й

Если будет положительный опыт - отпишитесь плиз! Хочется гиры получше на СС, если есть им прямая замена - было бы отлично…

20 days later
pnm

Помогите с кодом. Собрал прошивку на линуксе.
Теперь хочу добавить в нее термокомпенсацию.

--- a/flight/Modules/Attitude/attitude.c
+++ b/flight/Modules/Attitude/attitude.c
@@ -215,11 +215,18 @@ static void updateSensors(AttitudeRawData * attitudeRaw)
                return;
        }

+       // use temp sensor
+       float compensation = (gyro[0] - GYRO_NEUTRAL) * 0.1;
+       // write a value to monitor in the GSC
+       attitudeRaw->magnetometers[0] = compensation * 100;

        // First sample is temperature
-       attitudeRaw->gyros[ATTITUDERAW_GYROS_X] = -(gyro[1] - GYRO_NEUTRAL) * gyroGain;
-       attitudeRaw->gyros[ATTITUDERAW_GYROS_Y] = (gyro[2] - GYRO_NEUTRAL) * gyroGain;
-       attitudeRaw->gyros[ATTITUDERAW_GYROS_Z] = -(gyro[3] - GYRO_NEUTRAL) * gyroGain;
+       float tc1 = 1.0;
+       float tc2 = 0.5;
+       float tc3 = 1.0;
+       attitudeRaw->gyros[0] = -(gyro[1] - GYRO_NEUTRAL - compensation * tc1) * gyroGain;
+       attitudeRaw->gyros[1] =  (gyro[2] - GYRO_NEUTRAL - compensation * tc2) * gyroGain;
+       attitudeRaw->gyros[2] = -(gyro[3] - GYRO_NEUTRAL - compensation * tc3) * gyroGain;

        int32_t x = 0;
        int32_t y = 0;

Но мой синтаксис отличается от Dmitry(HikeR)

Вот мой, я закоментил гиры и добавил термокопенсацию ручками. Ссори я ламер в программировании.

/**
 * Get an update from the sensors
 * @param[in] attitudeRaw Populate the UAVO instead of saving right here
 * @return 0 if successfull, -1 if not
 */
static int32_t updateSensors(AccelsData * accels, GyrosData * gyros)
{
    struct pios_adxl345_data accel_data;
    float gyro[4];

    // Only wait the time for two nominal updates before setting an alarm
    if(xQueueReceive(gyro_queue, (void * const) gyro, UPDATE_RATE * 2) == errQUEUE_EMPTY) {
        AlarmsSet(SYSTEMALARMS_ALARM_ATTITUDE, SYSTEMALARMS_ALARM_ERROR);
        return -1;
    }

    // Do not read raw sensor data in simulation mode
    if (GyrosReadOnly() || AccelsReadOnly())
        return 0;

    // No accel data available
    if(PIOS_ADXL345_FifoElements() == 0)
        return -1;

    // First sample is temperature
    //gyros->x = -(gyro[1] - GYRO_NEUTRAL) * gyroGain;
    //gyros->y = (gyro[2] - GYRO_NEUTRAL) * gyroGain;
    //gyros->z = -(gyro[3] - GYRO_NEUTRAL) * gyroGain;

    static void updateSensors(AttitudeRawData * attitudeRaw)
                return;
        }

        // use temp sensor
        float compensation = (gyro[0] - GYRO_NEUTRAL) * 0.1;
        // write a value to monitor in the GSC
        attitudeRaw->magnetometers[0] = compensation * 100;

        // First sample is temperature
        float tc1 = 1.0;
        float tc2 = 0.5;
        float tc3 = 1.0;
        attitudeRaw->gyros[0] = -(gyro[1] - GYRO_NEUTRAL - compensation * tc1) * gyroGain;
        attitudeRaw->gyros[1] =  (gyro[2] - GYRO_NEUTRAL - compensation * tc2) * gyroGain;
        attitudeRaw->gyros[2] = -(gyro[3] - GYRO_NEUTRAL - compensation * tc3) * gyroGain;



    int32_t x = 0;
    int32_t y = 0;
    int32_t z = 0;
    uint8_t i = 0;
    uint8_t samples_remaining;

Теперь прошивка не собирается.

slides

А где скачать оригинал прошивки (закомпиленый вариант термокомпенсации)? Точнее ткните в пост/ссылку, плиз 😃.

pnm
slides:

А где скачать оригинал прошивки (закомпиленый вариант термокомпенсации)? Точнее ткните в пост/ссылку, плиз 😃.

rcopen.com/forum/f123/topic238442/978

HikeR
pnm:

Теперь прошивка не собирается.

в файле патча знак “минус” в начале строки означает удаленную строчку, знак “плюс” — добавленную. у вас же какой-то ужас получился, это раз.
в текущей прошивке значения акселя, гироскопа и магнетометра из одного объекта attitudeRaw разнесли по трем отдельным, это два. причем магнетометр в CopterControl-е теперь вобще не используется (экономия памяти), поэтому оперативно следить за значением компенсации сходу не получится.

просто “на посмотреть” можно сделать так:
вместо этого кусочка

	// First sample is temperature
	gyros->x = -(gyro[1] - GYRO_NEUTRAL) * gyroGain;
	gyros->y = (gyro[2] - GYRO_NEUTRAL) * gyroGain;
	gyros->z = -(gyro[3] - GYRO_NEUTRAL) * gyroGain;

вставить такой


	// First sample is temperature
	float compensation = (gyro[0] - GYRO_NEUTRAL) * 0.1;
	float tc1 = 1.0;
	float tc2 = 0.5;
	float tc3 = 1.0;
	attitudeRaw->gyros[0] = -(gyro[1] - GYRO_NEUTRAL - compensation * tc1) * gyroGain;
	attitudeRaw->gyros[1] =  (gyro[2] - GYRO_NEUTRAL - compensation * tc2) * gyroGain;
	attitudeRaw->gyros[2] = -(gyro[3] - GYRO_NEUTRAL - compensation * tc3) * gyroGain;

и ничего больше не менять (кроме подбора коэффициентов tc(1,2,3) и пересборки/перезаливки).

pnm

Спасибо Дмитрий, попробую сегодня.

pnm

Не получаеться
стандартный конфиг, вывод

root@debian:/home/pnm/1/OpenPilot# make coptercontrolmake[1]: Nothing to be done for `first'.
- OpenPilot UAVObject Generator -
Done: processed 59 XML files and generated 59 objects with no ID collisions. Total size of the data fields is 2016 bytes.
generating flight code
 FWINFO     build/fw_coptercontrol/fw_coptercontrol.bin.firmwareinfo.c
root@debian:/home/pnm/1/OpenPilot#

Изменил,

        // First sample is temperature
//      gyros->x = -(gyro[1] - GYRO_NEUTRAL) * gyroGain;
//      gyros->y = (gyro[2] - GYRO_NEUTRAL) * gyroGain;
//      gyros->z = -(gyro[3] - GYRO_NEUTRAL) * gyroGain;
        float compensation = (gyro[0] - GYRO_NEUTRAL) * 0.1;
        float tc1 = 1.0;
        float tc2 = 0.5;
        float tc3 = 1.0;
        attitudeRaw->gyros[0] = -(gyro[1] - GYRO_NEUTRAL - compensation * tc1) * gyroGain;
        attitudeRaw->gyros[1] =  (gyro[2] - GYRO_NEUTRAL - compensation * tc2) * gyroGain;
        attitudeRaw->gyros[2] = -(gyro[3] - GYRO_NEUTRAL - compensation * tc3) * gyroGain;

        int32_t x = 0;
        int32_t y = 0;

вывод

root@debian:/home/pnm/1/OpenPilot# make coptercontrolmake[1]: Nothing to be done for `first'.
- OpenPilot UAVObject Generator -
Done: processed 59 XML files and generated 59 objects with no ID collisions. Total size of the data fields is 2016 bytes.
generating flight code
 CC         flight/Modules/Attitude/attitude.c
../Modules/Attitude/attitude.c: In function 'updateSensors':
../Modules/Attitude/attitude.c:291:2: error: 'attitudeRaw' undeclared (first use in this function)
../Modules/Attitude/attitude.c:291:2: note: each undeclared identifier is reported only once for each function it appears in
make[1]: *** [/home/pnm/1/OpenPilot/build/fw_coptercontrol/attitude.o] Error 1
make: *** [fw_coptercontrol_opfw] Error 2
root@debian:/home/pnm/1/OpenPilot#

Вот так прокатило

gyros->x = -(gyro[1] - GYRO_NEUTRAL - compensation * tc1) * gyroGain;
gyros->y = (gyro[2] - GYRO_NEUTRAL - compensation * tc2) * gyroGain;
gyros->z = -(gyro[3] - GYRO_NEUTRAL - compensation * tc3) * gyroGain;

pnm

Короче залил я прошивку))) Снес bootloader, rescue не видит плату. Без JTAG не восстановить bootloader?

Gapey

можно восстановить через компорт …
нужен или аппаратный порт с переходником ±12=>3.3 вольта или USB=>COM желательно на FT232 или CP210х … на всяких PL23хх ака шнурки от моболок успех негарантирован …
wiki.openpilot.org/…/Firmware+Recovery+on+Windows

pnm
Gapey:

можно восстановить через компорт …
нужен или аппаратный порт с переходником ±12=>3.3 вольта или USB=>COM желательно на FT232 или CP210х … на всяких PL23хх ака шнурки от моболок успех негарантирован …
wiki.openpilot.org/…/Firmware+Recovery+on+Windows

Есть PL23, попробую на выходных.

HikeR
pnm:

error: ‘attitudeRaw’ undeclared

мой косяк, сам ведь и писал что этого объекта больше нет.

pnm:

Снес bootloader

зачем???

pnm
HikeR:

зачем???

После загрузки прошивки, плата не загрузилась.