ArduCopter Mega: порт на обычную Arduino (тестим)

nsk-racer

Новая проблема, почему на одном и том же газе вися он прыгает туда сюда, в просто стейбл моде. И рулится как крейсер, жмёшь ручку почти на всю а он так вяло вяло летит в сторону. Пиды P 1.2 I 0,024, попробовал сделать P 1.1, так он при взлёте резко дал газу и перевернулся, сломал последний запасной пропеллер… Чего то неукратимый ардупират

RA4ASN

Для интерактивной настройки пидов хочу порекомендовать хорошую функцию, завязанную на 6-й канал. Описание по смыслу найди в defines.h по поиску “CH_6 Tuning”, а включается все это через CLI setup-tune номер_режима. Отключить - tune без аргументов. На 6-й канал должна быть назначена крутилка. Для понимания логики работы посмотри функцию tuning() в ArduCopter.pde. Смысл такой - крутишь крутилку, выбранный пид меняется 😃 К слову, у тебя ну очень маленькие значения выбраны, когда я выставлял подобные, поведение коптера было аналогичным.

nsk-racer

Спасибо попробую, а то я решил вернуться к вии, потому что уже 3 пропеллера сломал 😃
вот видео как он более менее летает, но рулится плохо:

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

и

cynIC

А вообще, у кого-нибудь завелся ArduPilot или дальше тестов не доходит? 😕

RA4ASN

ArduPilot в другой теме, а у нас Мегапират, летает вовсю 😃

Syberian

Наконец-то дошли руки до “трешки”. Заюзал прошиву 49 GPS OK для вортекса. Не плуг-эн-плей, пришлось чуть поправить в плане yaw-сервы, но летает лучше В8. Снял серву с InstantPWM и перевесил на М8, чтоб не скакала.
Еще обновил библиотеку APM_RC, чтобы OCRxx обновлялись не где попало, а только после сброса TCNTxx - это удаляет подергивания регулей и сервы вообще. Доп. задержка 5 мкс - даже приборами не заметишь.
Sir Alex спасибо за порт! 😉 Если есть желание обновить либу в релизе, пиши куда сбросить.

cynIC
RA4ASN:

ArduPilot в другой теме, а у нас Мегапират, летает вовсю 😃

Это как-бы синонимы.
Хотел спросить, есть-ли рабочая конфигурация - на первой странице ничего такого не нашел 😦.
Если можно, посоветуйте рабочий конфиг(плата, шилд, контроллеры, моторы и прочее)? Примерно расчитываю на вес от 500 грамм до килограмма.

RA4ASN

Это как бы далеко не синонимы. Ардупилот на одной элементной базе, мегапират-совсем на другой. Общим являются только процессоры. Прошивки тут, конфиги ищите по теме.

cynIC
RA4ASN:

Это как бы далеко не синонимы. Ардупилот на одной элементной базе, мегапират-совсем на другой. Общим являются только процессоры. Прошивки тут, конфиги ищите по теме.

Исходник-то один. Не суть важно.
Можно взглянуть на ваш? Из рабочих конечно-же.

tusik

Что конкретно интересует? У меня квадр 1,2 кг, моторы ДТ-750, регуляторы плюши 18А, батарея 2,2А, ардуина 1268, датчики аллиноне без ГПС, АР-220, ГПС от Г-ОСД от хоббикинга, сонар версия 1. Рама из алюминиевой трубы 10х20х1,5, центральные пластины вырезаны из старых печатных плат 150х150, мозг в банке из-под СД. Винты ставил 12х4,5 и 10х4,5 от рцтаймера, но больще понравились 10х6 от хоббикинга. Видео полета постил в этой теме, можно посмотреть

Syberian
Syberian:

Наконец-то дошли руки до “трешки”.

Все, винты кончились: снятая дверь шкафа на трикоптер упала (сдуло). Пичалька 😦 Пошел обратно в самолеты.

Вот доделаю квадрик, тогда и потолкуем со шкафом 😈

cynIC
tusik:

Что конкретно интересует? У меня …

Наверное это и интересует.
А версия прошивки какая(или все подходят?)? По точкам летает? Сколько грузоподъемность?
Прошу извинить за тупые вопросы - в ветке с первого взгляда заметил одни сомнения и тесты, нигде не указаны стабильные билды и всё такое…

west_25_x

Вопрос про трикоптер. Есть новые прошивки? где взять или что править? А то я подсоединял серву хвоста как на картинке ( rcwiki.ru/index.php/MegaPirates ) он вообще не реагирует.
ЗЫ проша MegaPirateNG_2.0.49_Beta5.zip и бета4 так-же не пашет. ЭТО ТОЛЬКО ксаемо трикоптера… квадрика нету

tusik

Прошивка 49. По точкам летает, но с вопросами - где-то в теме выкладывал. Домой возвращается отлично. Подымает граммов 400, но специально не тестил, просто цеплял еще батарею на 5А, но не подключал ее.

RA4ASN
cynIC:

Исходник-то один. Не суть важно.
Можно взглянуть на ваш? Из рабочих конечно-же.

Ну попробуйте залить прошивку от ардупилота в мегапират, увидите насколько “исходник-то один” 😃
Вот навскидку посты, где я писал о своем коптере: 1, 2. DT750, 10х4,5, сентри 18, нанотех 2200, профиль 10х10х0,8, центральная часть от ХК рамы. И, на будущее, есть поиск, ищете по имени пользователя и все.

Syberian
west_25_x:

А то я подсоединял серву хвоста как на картинке ( rcwiki.ru/index.php/MegaPirates ) он вообще не реагирует.

Пдключай к М5. Но серва будет дергаться. Недолюбливают “трешки” тут. Я вот 49-ю прошиву под трикоптер доработал, хорошо висит… Кинь мылу в личку, сброшу свой проект. Надеюсь, у тебя Black Vortex а не ардупилот мега 😉

mahowik
nsk-racer:

там почему было закомментировано offsets

не получается настроть компас в MegaPirateNG_2.0.49_Beta4… сейчас в прошивке оффсеты автоматически настраиваются при работе компаса или это ошибка? пробовал раскомментить offsets и настроить их через CLI перед работой… все равно врет. Может кто проверить и отписаться?

Syberian
mahowik:

Может кто проверить и отписаться?

Проверил, автоматически. Причем, неплохо настраивают. Раньше я выкидывал нафиг и делал вручную калибровку, но сейчас авто неплохо работает. Авто-сохранение модификации каждую минуту. Чтобы получилось что-то близкое к норма, достаточно покрутить плату туда-сюда. После первого полета уже почти в идеале.

mahowik
  1. пытаюсь выдрать драйвер сонара из пирата для multiwii 😃
    загружаю MegaPirateNG_2.0.49_Beta4 скетч, сонар пашет отлично… выношу в отдельный скетч не дышит… помогите разобраться гуру программинга под Атмегу 😃

вот скетч

//#include <FastSerial.h>

// variables to take x number of readings and then average them
// to remove the jitter/noise from the DYP-ME007 sonar readings
const int numOfReadings = 10; // number of readings to take/ items in the array
int readings[numOfReadings]; // stores the distance readings in an array
int arrayIndex = 0; // arrayIndex of the current item in the array
int total = 0; // stores the cumlative total
int averageDistance = 0; // stores the average value

// setup pins and variables for DYP-ME007 sonar device
int echoPin = 10; // DYP-ME007 echo pin (digital 2)
int initPin = 9; // DYP-ME007 trigger pin (digital 3)

unsigned long pulseTime = 0; // stores the pulse in Micro Seconds
unsigned long distance = 0; // variable for storing the distance (cm)

//setup
void setup() {
  pinMode(initPin, OUTPUT); // set init pin 3 as output
  pinMode(echoPin, INPUT); // set echo pin 2 as input

  // initialize the serial port, lets you view the
  // distances being pinged if connected to computer
  Serial.begin(115200);

  // create array loop to iterate over every item in the array
  //for (int thisReading = 0; thisReading < numOfReadings; thisReading++) {
    //readings[thisReading] = 0;
  //}

 // Sonar INIT
//=======================
//D48 (PORTL.1) = sonar input
//D47 (PORTL.2) = sonar Tx (trigger)
//The smaller altitude then lower the cycle time

 // 0.034 cm/micros
//PORTL&=B11111001;
//DDRL&=B11111101;
//DDRL|=B00000100;

PORTH&=B10111111; // H6 -d9  - sonar TX
DDRH |=B01000000;

PORTB&=B11101111; // B4 -d10 - sonar Echo
DDRB &=B11101111;



//PORTG|=B00000011; // buttons pullup

//div64 = 0.5 us/bit
//resolution =0.136cm
//full range =11m 33ms
// Using timer5, warning! Timer5 also share with RC PPM decoder
  TCCR5A =0; //standard mode with overflow at A and OC B and C interrupts
  TCCR5B = (1<<CS11); //Prescaler set to 8, resolution of 0.5us
  TIMSK5=B00000111; // ints: overflow, capture, compareA
  OCR5A=65510; // approx 10m limit, 33ms period
  OCR5B=3000;

}

// Sonar read interrupts
volatile char sonar_meas=0;
volatile unsigned int sonar_data=0, sonar_data_start=0, pre_sonar_data=0; // Variables for calculating length of Echo impulse
ISR(TIMER5_COMPA_vect) // This event occurs when counter = 65510
{
        if (sonar_meas == 0) // sonar_meas=1 if we not found Echo pulse, so skip this measurement
                sonar_data = 0;
        PORTH|=B01000000; // set Sonar TX pin to 1 and after ~12us set it to 0 (below) to start new measurement
}

ISR(TIMER5_OVF_vect) // Counter overflowed, 12us elapsed
{
    PORTH&=B10111111; // set TX pin to 0, and wait for 1 on Echo pin (below)
    sonar_meas=0; // Clean "Measurement finished" flag
}

ISR(PCINT0_vect)
{
    if (PINB & B00010000) {
        sonar_data_start = TCNT5; // We got 1 on Echo pin, remeber current counter value
    } else {
        sonar_data=TCNT5-sonar_data_start; // We got 0 on Echo pin, calculate impulse length in counter ticks
        sonar_meas=1; // Set "Measurement finished" flag
    }
}


// execute
void loop() {
  //digitalWrite(initPin, HIGH); // send 10 microsecond pulse
  //delayMicroseconds(10); // wait 10 microseconds before turning off
  //digitalWrite(initPin, LOW); // stop sending the pulse
  //pulseTime = micros();
//  pulseTime = pulseIn(echoPin, HIGH); // Look for a return pulse, it should be high as the pulse goes low-high-low
//  distance = pulseTime/58; // Distance = pulse time / 58 to convert to cm.

    if ( (sonar_data < 354) && (pre_sonar_data > 0) ) {    //wrong data from sonar (3cm * 118 = 354), use previous value
            sonar_data=pre_sonar_data;
        } else {
            pre_sonar_data=sonar_data;
        }
        distance = (sonar_data / 118); // Magic conversion sonar_data to cm

  Serial.println(distance, DEC); // print out the average distance to the debugger

  /*total= total - readings[arrayIndex]; // subtract the last distance
  readings[arrayIndex] = distance; // add distance reading to array
  total= total + readings[arrayIndex]; // add the reading to the total
  arrayIndex = arrayIndex + 1; // go to the next item in the array
  // At the end of the array (10 items) then start again
  if (arrayIndex >= numOfReadings) {
    arrayIndex = 0;
  }
  averageDistance = total / numOfReadings; // calculate the average distance
  */

  (averageDistance, DEC); // print out the average distance to the debugger
  delay(100); // wait 100 milli seconds before looping again
}
Syberian
mahowik:

помогите разобраться гуру программинга под Атмегу

у тебя не прописан инит PCINT - прерывания по входу ECHO 😃
PCMSK0 = B00010000; // sonar port B4 - d10 echo
PCICR |= 1; // PCINT activated for PORTB

mahowik
Syberian:

Проверил, автоматически. Причем, неплохо настраивают. Раньше я выкидывал нафиг и делал вручную калибровку, но сейчас авто неплохо работает. Авто-сохранение модификации каждую минуту. Чтобы получилось что-то близкое к норма, достаточно покрутить плату туда-сюда. После первого полета уже почти в идеале.

Спасибо!
у меня 5883 компас отдельный… возможно с осями напутал… если мотреть по чипу ось Y должна смотреть вперед, а X вправо?