ArduCopter Mega: порт на обычную Arduino (тестим)
Как, кстати, ведут себя твои пропеллеры на холоде? ) Ато я со своими и выходить то боюсь, не то что летать 😉 У меня все полетело на стоковых пидах, в комнате.
Как, кстати, ведут себя твои пропеллеры на холоде? ) Ато я со своими и выходить то боюсь, не то что летать 😉 У меня все полетело на стоковых пидах, в комнате.
у меня довольно большой коптер, может поэтому пришлось подбирать, но полететь то он сразу полетел, просто скверно 😃 пропеллеры на холоде хрупче всё таки, за год ни одного не сломал, а тут сделал новый квадрик и на нем испытать решил кук, перевернулся возле земли и пропом цепанул, он разлетелся. второй на вии сломал столкнувшись с машиной) а в тепле они у меня пережили моторы и 2 рамы, очень много падений, меня резали они же)) вообщем прям крепчайшие пропеллеры, арс 10х6
Новая проблема, почему на одном и том же газе вися он прыгает туда сюда, в просто стейбл моде. И рулится как крейсер, жмёшь ручку почти на всю а он так вяло вяло летит в сторону. Пиды P 1.2 I 0,024, попробовал сделать P 1.1, так он при взлёте резко дал газу и перевернулся, сломал последний запасной пропеллер… Чего то неукратимый ардупират
Для интерактивной настройки пидов хочу порекомендовать хорошую функцию, завязанную на 6-й канал. Описание по смыслу найди в defines.h по поиску “CH_6 Tuning”, а включается все это через CLI setup-tune номер_режима. Отключить - tune без аргументов. На 6-й канал должна быть назначена крутилка. Для понимания логики работы посмотри функцию tuning() в ArduCopter.pde. Смысл такой - крутишь крутилку, выбранный пид меняется 😃 К слову, у тебя ну очень маленькие значения выбраны, когда я выставлял подобные, поведение коптера было аналогичным.
Спасибо попробую, а то я решил вернуться к вии, потому что уже 3 пропеллера сломал 😃
вот видео как он более менее летает, но рулится плохо:
вот видео как он чудит с высотой, ручку газа почти не трогаю, он сам скачет, иногда я давал газ чтобы он не шмякнул об землю, но он после этого ещё поддавал, а если не дать газ то ударится.
и
А вообще, у кого-нибудь завелся ArduPilot или дальше тестов не доходит? 😕
ArduPilot в другой теме, а у нас Мегапират, летает вовсю 😃
Наконец-то дошли руки до “трешки”. Заюзал прошиву 49 GPS OK для вортекса. Не плуг-эн-плей, пришлось чуть поправить в плане yaw-сервы, но летает лучше В8. Снял серву с InstantPWM и перевесил на М8, чтоб не скакала.
Еще обновил библиотеку APM_RC, чтобы OCRxx обновлялись не где попало, а только после сброса TCNTxx - это удаляет подергивания регулей и сервы вообще. Доп. задержка 5 мкс - даже приборами не заметишь.
Sir Alex спасибо за порт! 😉 Если есть желание обновить либу в релизе, пиши куда сбросить.
ArduPilot в другой теме, а у нас Мегапират, летает вовсю 😃
Это как-бы синонимы.
Хотел спросить, есть-ли рабочая конфигурация - на первой странице ничего такого не нашел 😦.
Если можно, посоветуйте рабочий конфиг(плата, шилд, контроллеры, моторы и прочее)? Примерно расчитываю на вес от 500 грамм до килограмма.
Это как бы далеко не синонимы. Ардупилот на одной элементной базе, мегапират-совсем на другой. Общим являются только процессоры. Прошивки тут, конфиги ищите по теме.
Это как бы далеко не синонимы. Ардупилот на одной элементной базе, мегапират-совсем на другой. Общим являются только процессоры. Прошивки тут, конфиги ищите по теме.
Исходник-то один. Не суть важно.
Можно взглянуть на ваш? Из рабочих конечно-же.
Что конкретно интересует? У меня квадр 1,2 кг, моторы ДТ-750, регуляторы плюши 18А, батарея 2,2А, ардуина 1268, датчики аллиноне без ГПС, АР-220, ГПС от Г-ОСД от хоббикинга, сонар версия 1. Рама из алюминиевой трубы 10х20х1,5, центральные пластины вырезаны из старых печатных плат 150х150, мозг в банке из-под СД. Винты ставил 12х4,5 и 10х4,5 от рцтаймера, но больще понравились 10х6 от хоббикинга. Видео полета постил в этой теме, можно посмотреть
Что конкретно интересует? У меня …
Наверное это и интересует.
А версия прошивки какая(или все подходят?)? По точкам летает? Сколько грузоподъемность?
Прошу извинить за тупые вопросы - в ветке с первого взгляда заметил одни сомнения и тесты, нигде не указаны стабильные билды и всё такое…
Вопрос про трикоптер. Есть новые прошивки? где взять или что править? А то я подсоединял серву хвоста как на картинке ( rcwiki.ru/index.php/MegaPirates ) он вообще не реагирует.
ЗЫ проша MegaPirateNG_2.0.49_Beta5.zip и бета4 так-же не пашет. ЭТО ТОЛЬКО ксаемо трикоптера… квадрика нету
Прошивка 49. По точкам летает, но с вопросами - где-то в теме выкладывал. Домой возвращается отлично. Подымает граммов 400, но специально не тестил, просто цеплял еще батарею на 5А, но не подключал ее.
Исходник-то один. Не суть важно.
Можно взглянуть на ваш? Из рабочих конечно-же.
Ну попробуйте залить прошивку от ардупилота в мегапират, увидите насколько “исходник-то один” 😃
Вот навскидку посты, где я писал о своем коптере: 1, 2. DT750, 10х4,5, сентри 18, нанотех 2200, профиль 10х10х0,8, центральная часть от ХК рамы. И, на будущее, есть поиск, ищете по имени пользователя и все.
А то я подсоединял серву хвоста как на картинке ( rcwiki.ru/index.php/MegaPirates ) он вообще не реагирует.
Пдключай к М5. Но серва будет дергаться. Недолюбливают “трешки” тут. Я вот 49-ю прошиву под трикоптер доработал, хорошо висит… Кинь мылу в личку, сброшу свой проект. Надеюсь, у тебя Black Vortex а не ардупилот мега 😉
там почему было закомментировано offsets
не получается настроть компас в MegaPirateNG_2.0.49_Beta4… сейчас в прошивке оффсеты автоматически настраиваются при работе компаса или это ошибка? пробовал раскомментить offsets и настроить их через CLI перед работой… все равно врет. Может кто проверить и отписаться?
Может кто проверить и отписаться?
Проверил, автоматически. Причем, неплохо настраивают. Раньше я выкидывал нафиг и делал вручную калибровку, но сейчас авто неплохо работает. Авто-сохранение модификации каждую минуту. Чтобы получилось что-то близкое к норма, достаточно покрутить плату туда-сюда. После первого полета уже почти в идеале.
- пытаюсь выдрать драйвер сонара из пирата для 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
}