Управление через интернет
Постараюсь завтра подготовить.
Приемник Лавмейт?
схема очень миниатюрная.
Я размер старался сделать чтоб на миниатюрный приемник RC305 модуль вставал без проблем,
а на более крупные тем более.
Приемник Лавмейт?
Ага. он самый.
Попробую впихнуть модуль в корпус приемника, посмотрим что получится.
Начал наполнять папку необходимой информацией для приемника на 1.2 Ггц.
github.com/SerPanRC/multi_modul_arduino.git
Не на всех модулях тюнера в приемниках выведен контакт уровня сигнала, кроме того будут возникать вопросы по цоколевке выводов тюнера.
Делайте подробное фото открытого модуля тюнера и помещайте в теме, я на фото буду указывать какие точки-выводы нужны для подключения.
Готова первая версия программы приемника 1.2Ггц,
практически это “Продвинутый-2” с небольшими усовершенствованиями.
fotki.yandex.ru/users/serpanrc/view/720329/
fotki.yandex.ru/users/serpanrc/view/720330/
Программа и документация на гитхабе.
Я конечно в ардуино не бумбум, так что попрошу не пинать сильно. встал на том что загрузчик не пишется, сообщает “avrdude: AVR Part “atmega168p micro168pa.build.f_cpu=8000000L micro168pa.build.core=arduino” not found.” И компиляция тоже не идёт- пишет выберите плату, а она выбрана “(3.3V, 8 int MHz) w/ ATmega168PA”. Для других плат компиляция идёт. Ардуино 1.0.5.
За отсутствием советов, методом перебора нашёл причину, строки кода что приведены на гитхабе ввиду кодировки или чего-либо ещё не полноценны, а строки взятые из Raw версии заметки заработали. Загрузчик теперь шьётся, а вот с компиляцией беда, но это уже в следующих эпизодах…
строки кода что приведены на гитхабе ввиду кодировки или чего-либо ещё не полноценны
Буду разбираться с гитхабом. Он некоторые строки объединил, из двух сделал одну, я на это после заливки и не обратил внимания.
Но в самой программе этих проблем нет.
Двух строк хватает с избытком для
У меня в первом продвинутом на диапазон 1.2 Ггц подобный индикатор с подобным функционалом.
Там он со своим размером довольно гармоничен. rcopen.com/forum/f8/topic235968/10
Но отказался по ряду причин:
- Офигенно тяжелый
- Большой
- Дороже
- Много ног для подключения, а если с последовательным интерфейсом - то стоит как чугунный мост.
- Прожорливая подсветка
Хотя сейчас едут ко мне современные, они тонкие, легкие, подсветка менее прожорлива. Буду использовать в другом проекте из за размера цифр, там его функционала достаточно.
Собрал макет на базе приемника RC305,
Подкорректировал программу- все работает.
fotki.yandex.ru/users/serpanrc/view/720520/
fotki.yandex.ru/users/serpanrc/view/720521/
Причешу код, подготовлю фото инсталляции и можно будет смотреть на гитхабе.
Это у вас там справа FTDI подключён? Может через него как-то получится атмегу оживить? Скетч то всё-таки залился…
Это у вас там справа FTDI подключён?
В Ардуино через него и льется скетч, для того и загрузчик ардуиновский ставится.
Но я Вас так и не понял, что оживлять?
Чтоб оживить атмегу, которая перестала отвечать usbavr программатору после перепрошивки. Возможно что она перестала программироваться, из-за переназначения выводов ресет и пр? С кодом для boards.txt беда какая-то…в чистом виде выдаёт “C:\arduino-1.0.1\hardware\arduino\cores\arduino/Arduino.h:213:26: error: pins_arduino.h: No such file or directory” …Добавил в самом конце “:standart”, и компиляция продвинулась до ошибки C:\arduino-1.0.1\libraries\Wire/Wire.h:26:20: error: Stream.h: No such file or directory,…и что там про lcd. С дефолтными платами всё нормально компилит.
С дефолтными платами всё нормально компилит.
Из дефолтных выбирайте “Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168” и вливайте.
Разницы после того как зашит загрузчик нет.
Ардуино 1.0.5.
"C:\arduino-1.0.1
???
Завтра еще раз проверю, может что еще при заливке на гитхаб изменилось.
Сообщение от Ahimgeon
"C:\arduino-1.0.1
???
пробую разные версии. Чтобы не писать о проблемах когда даже не проверил в разных версиях.
Я что не могу понять- в личку Вы писали что подключили кварц и влили загрузчик “Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168”.
И что скетч на “Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168” компилится.
В этом случае и влиться должно.
Я что не могу понять- в личку Вы писали что подключили кварц и влили загрузчик “Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168”.
И что скетч на “Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168” компилится.
В этом случае и влиться должно. Или я что то не понял?
Да загрузчик влился, и прошивка влилась в режиме прошивки с помощью программатора- после этого мега не отвечает, не по ISP ни по Serial, экран пуст, и загрузчик и прошивка были сделаны для Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168 . И я пытаюсь понять, что я сделал не так. Не хочется чтоб новая мега овладела же печальной судьбой…
Положил на гитхаб пример файла boards.txt , взятый из рабочего каталога ардуины, с которой я работаю.
С гитхаба взял файл прошивки и попробовал компилировать, все прошло без проблем.
Стало только хуже. Не копилит ни для одной платы. Переделал по образу Pro or pro mini и всё прекрасно заработало. bootloader.low_fuses=0xE2 - этот фьюз отвечает за внутренний тактователь?
##############################################################
micro168pa.name= (3.3V, 8 int MHz) w/ ATmega168PA
micro168pa.upload.protocol=arduino
micro168pa.upload.maximum_size=14336
micro168pa.upload.speed=19200
micro168pa.bootloader.low_fuses=0xE2
micro168pa.bootloader.high_fuses=0xdd
micro168pa.bootloader.extended_fuses=0x00
micro168pa.bootloader.path=atmega
micro168pa.bootloader.file=ATmegaBOOT_168_pro_8MHz.hex
micro168pa.bootloader.unlock_bits=0x3F
micro168pa.bootloader.lock_bits=0x0F
micro168pa.build.mcu=atmega168
micro168pa.build.f_cpu=8000000L
micro168pa.build.core=arduino
micro168pa.build.variant=standard
С этим кодом у меня работает.
Переделал по образу Pro or pro mini и всё прекрасно заработало.
Странно. Вот с этой строчкой загрузчик Вы не сможете загрузить.
micro168pa.build.mcu=atmega168
Если имеете ввиду что стало компилиться- то я уже писал Выше, не заморачивайтесь и выбирайте для компиляции Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168.
Странно. Вот с этой строчкой загрузчик Вы не сможете загрузить.
Ну как минимум, он не выдаёт ошибок до обращения к программатору. И с сигнатурами проблем быть не должно. У меня не PA атмега, иначе бы для про ор про мини бы не лилось. У Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168. стоит pro.build.mcu=atmega168.
Сигнатура проверяется при заливке загрузчика.
При заливке скетча через загрузчик по последовательному интерфейсу - до нее дела нет.
Ну да ладно, все проверил в опубликованном - ошибок нет.
micro168pa.build.variant=standard во это в конце добавьте как минимум.Без неё везде всё глухо. Она есть во всех других платах,и при ошибках,что всплывали у меня в гугле рекомендуют добавить её… Не знаю почему у вас всё работало.
Не знаю почему у вас всё работало.
У меня не только работало- но и работает.
Взято из рабочего каталога откуда шью загрузчик.
И повторю- для компиляции же указываю Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168, там строка pro.build.variant=standard есть.
micro168pa.build.variant=standard во это в конце добавьте как минимум.
Добавил.
Я не настолько компетентен в этом вопросе чтоб спорить с вами) Жаль что желающих ещё повторить пока ноль, так проблемы выискивать было бы легче.
Собрал, облагородил, доволен. Врезал разъём прямо в корпус приёмника лавмейт. Получилось очень аккуратно. Спасибо Сергею за идею и проект.
Контрастность в проекте на гитхабе можно сразу поднять до 15, тем более в коде сразу так не найдёшь её.
С экранами осторожней, в одном экземпляре точно не берите… Из 5 один разбит оказался(внешне не видно)
2й просто не работал. А шлейф вообще туфта, с переходами на изгибе, подсветка отваливается (кстати не яркая и не равномерная) после 5-10 перегибов шлейфа, а дальше вообще всё ломается.
По контрастности- на моих индикаторах- наиболее контрастно получается в районе 0-5, при 15 экран темный.
Брак изредка попадается, но с 5110- хуже много.
Яркость подсветки можно добавить- впаяв поменьше сопротивлением токоограничительный резистор, но я посчитал что так оптимум. На солнце- подсветка и не нужна, а в сумерки, в темноте- вполне достаточно.
Сейчас на подсветку ток 5-7 ма.
вот на этом компе есть акселель wiki.ladyada.net/chumbyhackerboard
его наверно можно использовать?
вот на этом компе есть акселель wiki.ladyada.net/chumbyhackerboard
Интересная вещь, акселерометров я так понимаю не достаточно…
Загрузка точек, слежение и т.п. там есть. Видео можете передавать любым способом (собственно АП с видео не связан, OSD - внешний модуль). Программа жесткая, да. Но и цена 250$ всего.
Управления сервоприводами нет и вообще управления 😉 полет исключительно по точкам, хотелось бы рулить, к тому же это должно работать и на земле. В общем я хочу сказать FY-21AP всех задач не решает, хотя и хорошая штука видимо, я про него еще не дочитал, но сложилось впечатление, что работает не всегда стабильно.
Я конечно понимаю, что буду вглядеть странно, но скажите как может повести себя FY-21AP при скажем 3х часовом полете, накопится ли ошибка определения положения в пространстве, можно ли реинициализировать с компьютера в полете, на сколько его вообще хватит работать без ошибки?
Хотелось бы услышать мысли по расчету азимута,
Азимут, направление движения выдает gps в строчке GPRMC. (или он не подходит?)
Встроил получение текущих GPS координат с приемника и передачу/прием с борта на базу, теперь текущая позиция показывается на карте в реальном времени, можно еще заняться вычислением направления движения, чтобы крутить камеру в 3D режиме в GoogleEarth в соответствии с тем в каком направлении движется модель. Но хочется уже заняться железом для наземных испытаний, подготовить шоссейное авто к тому моменту как сойдет снег. И еще нужно оптимизировать передачу видео.
Азимут, направление движения выдает gps в строчке GPRMC. (или он не подходит?)
Спасибо за совет, я еще не разобрался полностью 😉
Азимут, направление движения выдает gps в строчке GPRMC. (или он не подходит?)
Это то что надо!
В FY21Ap управление серввоприаодами есть (иначе как он моделью управляет? 😉). Коробочка пполностью управляется через UART. Фактически в Вашем случае это полностью упроавляемый PPM контролер, источник информации о об ориентации и положении в пространстве (горизонт, курс, координаты, 2 вида высоты, напревление на цель с воозможностью смены цели в любой ммомент) и готовый алгоритм авттопилота. Причем Вы можете упралять им как угодно… Можете сами выдавать воздействич на сервы, можете включить стабилизацию и рулить только курсом, а можете вообще лишь задавать кооррдинатыиего АП.
В FY21Ap
Со временем я думаю можно встроить поддержку FY21AP. Мне самому ситуация с единственным поддерживаемым серво-контроллером не нравится 😃 Но и зацикливаться на FY я бы не стал (например вполне могут прекратить его производство). А как быть с реинициализацией в воздухе и многочасовым полетом?
Проблем с многочасовым полетом нет. Горизонт фишка держит по гироскопам и акселям - то есть постоянно корректирует. Просто детально рассматрев Инет, как канал сязи, вы еще не касались детально собственно управленя ЛА. А фишка имеет все что для этого требуется. 😃
детально рассматрев Инет, как канал сязи, вы еще не касались детально собственно управленя ЛА
Уже сейчас можно начать разрабатывать автопилот и он будет управлять моделью, но вопрос в том, что первый порыв ветра перевернет ее, и модель разобьется. Смущает то что в FY21 есть много “лишнего”, что у меня уже и так есть, но с другой стороны есть например вот такое изделие www.pololu.com/catalog/product/1263 и к нему www.pololu.com/catalog/product/1254 , что в сумме получается еще дороже, в то время как FY21 имеет все что нужно, в общем я пока в раздумьях.
На что нужно обратить внимание при выборе подобного устройства?
robotshop.com/phidgets-usb-9-dof-accelerometer-gyr…
На что нужно обратить внимание
А оно нужно?
Машинке, вроде, не нужен горизонт, хватит и одного gps’а.
Получается управление +обратная телеметрия, +адаптивное rt-видео через интернет, +еще и своя инерциалка, все это обновременно для земли и полета - не много фич?
Проект рискует остаться не завершенным (имхо) 😃 .
Ну дак он же хочет сделать АП для самолета, а на машинке только провести первые опыты. Для машинки действительно не надо.
А чего проект будет незавершен. У него уже для установки на машинку все +/- готово.
Уже сейчас можно начать разрабатывать автопилот и он будет управлять моделью
А мне кажется надо подумать об альтернативном варианте системы в принципе.
Передача видео и управление ЛА в реальном времени через интернет - это конечно круто, но в большинстве случаев работать не будет.
А вот если сделать систему по типу Гугл локатор? Модель летит сама, на автопилоте, по заданным точкам, записывает себе видео в HD, а вы видите её на карте, кстати наверное не сложно
использовать тот же Гугл, и управлять полётом исключительно по карте, меняя маршрут. Для передачи координат новой точки маршрута достаточно любого канала совтовой связи, и скорость здесь не требуется. Видео правда посмотрите только после приземления, зато получается полноценный UAV. Можно добавить передачу фото высокого разрешения с выбранных точек маршрута.
Ну так я понимаю, что данный режим тоже будет реализован. Не даром же гугл-карту лепили в прогу.
а вы видите её на карте
Зачем отказываться от видео, если его можно передавать.
Кстати нашел баг, теперь наверное получится поднять FPS.
На следующих выходных планирую прокатиться на машине (за рулем) со всем этим хозяйством, дома будет записываться видео, на записи посмотрю как на ходу работает.
Респект топикстартеру! Еще полгода назад мучали мысли реализации данной идеи. Только при отсутствии йоты пытался сделать с 3G-модемом, про видео сразу пришлось забыть, и идея потухла.
UncleSam, по поводу использования ARM и платы Mini2440, у меня есть эта плата, есть камера, есть вафля.
Что хочется сказать, вайля из комплекта не имеет драйверов под линукс.
Транслировал через MJpeg-Streamer картинку с родной камеры в линухе - задержка 0,5+секунд.
Если использовать без ОС- задержки нет, но и сети тоже нет.
Подключить сервы напрямую к платке не получится в линухе (не RTOS)
В общем если хотите, проконсультирую по наработкам в области этой платы.
По теме,
На что нужно обратить внимание при выборе подобного устройства?
3D компасс не нужен.
вот www.sparkfun.com/products/10010 по сути дела представляет из себя датчиковую основу того же FY20, тот же аксель, те же гиры.
Останется софтовая составляющая.
Есть под ЮСБ www.toradex.com/En/…/3_Axes_Acceleration
И вообще можно собрать что то свое.
Самое дешевое что можно найти по подобной теме:
cgi.ebay.com/…/190478609162
тот же аксель, гироскоп получше, но только 2-осевой… в теории такое устройство незаметит только вращения в горизонтальной плоскости без изменения направления, что сложно себе представить в масштабах реальной модели.
Есть под ЮСБ www.toradex.com/En/Products/U...s_Acceleration
У этого устройства есть и акселерометры и гироскопы или только гироскопы?
А что еще можете хорошего/плохого сказать про устройство с компасом по моей ссылке?
И как можно использовать показания компаса?
в теории такое устройство незаметит только вращения в горизонтальной плоскости без изменения направления, что сложно себе представить в масштабах реальной модели
такое можно себе представить, если модель способна зависать в воздухе.
У этого устройства есть и акселерометры и гироскопы или только гироскопы?
Конкретно у этого устройства только аксель, там на сайте отдельно есть гиры, компасс, датчик давления, тока, и прочее…
Но не советую связываться с этим сайтом, интересовался их компьютером размером с пластиковую карту:
www.toradex.com/Robin-Z530L
однако доставка у них не самая дешевая, да и отправляют они DHL’ом, да и есть еще нюансы…
А что еще можете хорошего/плохого сказать про устройство с компасом по моей ссылке?
Лишний компас, как использовать его показания непонятно, цена не гуманная, и нет описания использованных датчиков, хотя параметры вроде ниче.
Вот этот:
robotshop.com/sfe-imu-16g-triple-axis-accel-three-…
по крайней мере на всем известной базе, с известными датчиками, и с последовательным выходом информации.
Компас поможет АП разобраться, что модель летит против ветра хвостом вперед (случай не надуман…).
В последней ссылке, как понял, на плате есть проц, но нет софта…
Вот все жду, надеюсь, может хоть в какой ветке появится обсуждение реальных алгоритмов авиагоризонта…
Подключить сервы напрямую к платке не получится в линухе
ну прямо как дети. используйте один из таймеров процессора напрямую.
#include <time.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/neutrino.h>
#include <gulliver.h>
#include <inttypes.h>
#include <unistd.h>
#include <float.h>
#include <termios.h>
#include <string.h>
#include <errno.h>
#include "main.h"
#include "AT91SAM9260.h"
static const struct sigevent * TC1_intr (void *area, int id){
unsigned int a;
a = ((AT91PS_TCB)TC_base)->TCB_TC1.TC_SR;
if(inPPMchannel < MAX_CH){
inPPMvalues[inPPMchannel] = ((AT91PS_TCB)TC_base)->TCB_TC1.TC_RA;
inPPMvalues_ms[inPPMchannel] = inPPMvalues[inPPMchannel] * 1280 / 1000;
if(inPPMvalues_ms[inPPMchannel] < 1000 || inPPMvalues_ms[inPPMchannel] > 2000){
inPPMchannel = 0;
return 0;
}
inPPMchannel++;
}
if(inPPMchannel == MAX_CH){
values_ms[0] = inPPMvalues_ms[0];
values_ms[1] = inPPMvalues_ms[1];
values_ms[2] = inPPMvalues_ms[2];
values_ms[3] = inPPMvalues_ms[3];
values_ms[4] = inPPMvalues_ms[4];
values_ms[5] = inPPMvalues_ms[5];
}
//это пауза между посылками
if( ((AT91PS_TCB)TC_base)->TCB_TC1.TC_RB > 5000){
inPPMchannel = 0;
// ll++;
}
return 0;
}
//------------------------------------------------------------------------------------
static const struct sigevent * TC0_intr (void *area, int id){
unsigned int a;
int temp;
//read for reset flags
a = ((AT91PS_TCB)TC_base)->TCB_TC0.TC_SR;
//переведем длинну пакета из мСек в тики таймера
if(channel < MAX_CH){
if(values_ms[channel] > 2000) values_ms[channel] = 2000;
if(values_ms[channel] < 1000) values_ms[channel] = 1000;
values[channel] = values_ms[channel] * 1000 / 1280;
}
((AT91PS_TCB)TC_base)->TCB_TC0.TC_RA = pause_len;
((AT91PS_TCB)TC_base)->TCB_TC0.TC_RC = values[channel] - pause_len;
#ifndef SUM_PPM
((AT91PS_TCB)TC_base)->TCB_TC0.TC_RC = values[channel];
((AT91PS_PIO)PIOA_base)->PIO_CODR = CH1 | CH2 | CH3 | CH4 | CH5 | CH6;
switch(channel){
case 0:
((AT91PS_PIO)PIOA_base)->PIO_SODR = CH1;
break;
case 1:
((AT91PS_PIO)PIOA_base)->PIO_SODR = CH2;
break;
case 2:
((AT91PS_PIO)PIOA_base)->PIO_SODR = CH3;
break;
case 3:
((AT91PS_PIO)PIOA_base)->PIO_SODR = CH4;
break;
case 4:
((AT91PS_PIO)PIOA_base)->PIO_SODR = CH5;
break;
case 5:
// ((AT91PS_PIO)PIOA_base)->PIO_SODR = CH6;
break;
}
#endif
channel++;
if(channel >= MAX_CH + 1){
channel = 0;
temp = total_len - values[0] - values[1] - values[2] - values[3] - values[4] - values[5];
#ifdef SUM_PPM
temp += pause_len * MAX_CH;
#endif
((AT91PS_TCB)TC_base)->TCB_TC0.TC_RA = pause_len;
((AT91PS_TCB)TC_base)->TCB_TC0.TC_RC = temp;
}
return 0;
}
//------------------------------------------------------------------------------------
void timers_init(void){
int errvalue;
int TC0_int;
// PPM формирование
errno = EOK;
PIOA_base = mmap_device_memory( 0, 0x100, PROT_READ|PROT_WRITE|PROT_NOCACHE,
MAP_PHYS|MAP_SHARED, (uint64_t)0xFFFFF400 );//AT91C_BASE_PIOA
errvalue = errno;
if (PIOA_base == (unsigned char *) MAP_DEVICE_FAILED){
fprintf(stderr, "Unable to map AT91C_BASE_PIOA\r\n");
fprintf(stderr, "The error generated was %d\r\n", errvalue );
fprintf(stderr, "That means: %s\r\n", strerror( errvalue ) );
exit(1);
}
#ifdef SUM_PPM
// Configure PIO controllers to periph mode
fprintf(stderr, "UAV: summary PPM output\r\n");
((AT91PS_PIO)PIOA_base)->PIO_ASR = AT91C_PA26_TIOA0 | AT91C_PA27_TIOA1;
((AT91PS_PIO)PIOA_base)->PIO_BSR = 0;
((AT91PS_PIO)PIOA_base)->PIO_PDR = AT91C_PA26_TIOA0 | AT91C_PA27_TIOA1; // Set in Periph mode
#else
// Configure PIO controllers to output
fprintf(stderr, "UAV: channel PPM output\r\n");
((AT91PS_PIO)PIOA_base)->PIO_PER = CH1 | CH2 | CH3 | CH4 | CH5 | CH6;
((AT91PS_PIO)PIOA_base)->PIO_OER = CH1 | CH2 | CH3 | CH4 | CH5 | CH6;
((AT91PS_PIO)PIOA_base)->PIO_CODR = CH1 | CH2 | CH3 | CH4 | CH5 | CH6;
((AT91PS_PIO)PIOA_base)->PIO_ASR = AT91C_PA27_TIOA1;
((AT91PS_PIO)PIOA_base)->PIO_BSR = 0;
((AT91PS_PIO)PIOA_base)->PIO_PDR = AT91C_PA27_TIOA1; // Set in Periph mode
#endif
//-------------------------------------
//TC0 Configure
errno = EOK;
TC_base = mmap_device_memory( 0, 0x100, PROT_READ|PROT_WRITE|PROT_NOCACHE,
MAP_PHYS|MAP_SHARED, (uint64_t)0xFFFA0000 );//AT91C_BASE_TC0
errvalue = errno;
if (TC_base == (unsigned char *) MAP_DEVICE_FAILED){
fprintf(stderr, "Unable to map AT91C_BASE_TC\r\n");
fprintf(stderr, "The error generated was %d\r\n", errvalue );
fprintf(stderr, "That means: %s\r\n", strerror( errvalue ) );
exit(1);
}
//TC Block Mode Register
((AT91PS_TCB)TC_base)->TCB_BMR = 0;//TCLK0, TCLK1, TCLK2
((AT91PS_TCB)TC_base)->TCB_TC0.TC_IDR = 0xFFFFFFFF; //disable all ints
// MCK/128
#ifdef SUM_PPM
((AT91PS_TCB)TC_base)->TCB_TC0.TC_CMR = AT91C_TC_CLKS_TIMER_DIV4_CLOCK | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_WAVE
| AT91C_TC_ACPA_SET | AT91C_TC_ACPC_CLEAR;
#else
((AT91PS_TCB)TC_base)->TCB_TC0.TC_CMR = AT91C_TC_CLKS_TIMER_DIV4_CLOCK | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_WAVE;
#endif
errno = EOK;
if(ThreadCtl( _NTO_TCTL_IO, 0 ) == -1){
errvalue = errno;
fprintf(stderr, "Unable to ThreadCtl( _NTO_TCTL_IO, 0 );\r\n");
fprintf(stderr, "The error generated was %d\r\n", errvalue );
fprintf(stderr, "That means: %s\r\n", strerror( errvalue ) );
}
// Attach interrupt
errno = EOK;
fprintf(stderr, "UAV: InterruptAttach TC0 ");
TC0_int = InterruptAttach(AT91C_ID_TC0, TC0_intr, NULL, 0, 0);
if(TC0_int == -1){
fprintf(stderr, "\r\nCan`t attach interrupt 0x%x\r\n", AT91C_ID_TC0);
fprintf(stderr, "The error generated was %d\r\n", errvalue );
fprintf(stderr, "That means: %s\r\n", strerror( errvalue ) );
}else{
fprintf(stderr, "OK\r\n");
}
((AT91PS_TCB)TC_base)->TCB_TC0.TC_IER = AT91C_TC_CPCS;// RC Compare
((AT91PS_TCB)TC_base)->TCB_TC0.TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG;
//-------------------------------------
// разрешим вывод TIOA1 на вход in a TC0 init
//TC1 Configure
((AT91PS_TCB)TC_base)->TCB_TC1.TC_IDR = 0xFFFFFFFF; //disable all ints
// MCK/128
((AT91PS_TCB)TC_base)->TCB_TC1.TC_CMR = AT91C_TC_CLKS_TIMER_DIV4_CLOCK | AT91C_TC_ABETRG |
AT91C_TC_ETRGEDG_RISING | AT91C_TC_LDRB_RISING | AT91C_TC_LDRA_FALLING | AT91C_TC_CPCTRG;
// установим обработчик прерывания на TC1 для захвата РРМ пакета
errno = EOK;
if(ThreadCtl( _NTO_TCTL_IO, 0 ) == -1){
errvalue = errno;
fprintf(stderr, "Unable to ThreadCtl( _NTO_TCTL_IO, 0 );\r\n");
fprintf(stderr, "The error generated was %d\r\n", errvalue );
fprintf(stderr, "That means: %s\r\n", strerror( errvalue ) );
}
errno = EOK;
fprintf(stderr, "UAV: Interrupt Attach TC1 ");
TC0_int = InterruptAttach(AT91C_ID_TC1, TC1_intr, NULL, 0, 0);
if(TC0_int == -1){
fprintf(stderr, "\r\nCan`t attach interrupt 0x%x\r\n", AT91C_ID_TC1);
fprintf(stderr, "The error generated was %d\r\n", errvalue );
fprintf(stderr, "That means: %s\r\n", strerror( errvalue ) );
}else{
fprintf(stderr, "OK\r\n");
}
// установим уровень срабатывания
((AT91PS_TCB)TC_base)->TCB_TC1.TC_IER = AT91C_TC_ETRGS;// External Trigger
((AT91PS_TCB)TC_base)->TCB_TC1.TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG;
}
Ну дак он же хочет сделать АП для самолета, а на машинке только провести первые опыты.
Уточнение: не предлагаю совсем отказатся от горизонта и полета. По-моему лучше сначала проверить сколько ресурсов занимает видео. Если мало, то можно нагрузить основной проц расчетом ориентации (и м.б. платку с датчиками подключить по i2c, без usb, ~100$), если много - то придется обсчитывать датчики на другом проце (типа fy21, ~300$).
В последней ссылке, как понял, на плате есть проц, но нет софта…
Исходник во вкладке “Useful links”, внизу ссылка “Source code”.
Вот все жду, надеюсь, может хоть в какой ветке появится обсуждение реальных алгоритмов авиагоризонта…
Вроде сделано два АПа (не ком.разр.), msv(?) и Dikoy, Вам и начинать такую ветку 😃
В последней ссылке, как понял, на плате есть проц, но нет софта…
The board comes programmed with the 8MHz Arduino bootloader and example firmware that tests the outputs of all the sensors. Simply connect to the serial TX and RX pins with a 3.3V FTDI Basic Breakout, open a terminal program to 38400bps and a menu will guide you through testing the sensors.
такое можно себе представить, если модель способна зависать в воздухе.
Я бы сказал что на данном этапе развития проекта, задача слегка неординарная.
Компас поможет АП разобраться, что модель летит против ветра хвостом вперед (случай не надуман…).
Даже если допустить что случай не надуман, компас все равно не поможет… ну представьте, летит самолет, и вдруг начинает лететь назад хвостом вперед (опустим как это могло произойти), что произойдет с данными с компаса? да ничего, вектор не изменится.
Вот все жду, надеюсь, может хоть в какой ветке появится обсуждение реальных алгоритмов авиагоризонта…
Боюсь вызвать возмущение у общественности, но ИМХО нет в них ничего экстраординарного, если вникнуть, сплошные треугольники, и ко- синусы, а в формулы думаю большинству вникать просто незачем… (это то что касается только авиагоризонта, без АП).
Вот интересный открытый проект автопилота code.google.com/p/ardupilot-mega/
и ещё paparazzi.enac.fr/wiki/Main_Page
The board comes programmed with the 8MHz Arduino bootloader and example firmware that tests the outputs of all the sensors.
Т.е. в моем понимании софта нет…
вдруг начинает лететь назад хвостом вперед (опустим как это могло произойти), что произойдет с данными с компаса? да ничего, вектор не изменится.
Скорость встречного ветра больше скорости самолета. АП по направлению полета считает, что самолет правильно ориентирован и продолжает удерживать против ветра (реальная ситуация была). По показанию компаса он бы смог сообразить, что нос самолета ориентирован в противоположенную сторону от базы.
но ИМХО нет в них ничего экстраординарного, если вникнуть, сплошные треугольники, и ко- синусы,
Ну можно так же сказать, что любая прога это только сложения, вычитания и пересылки… 😃 Пока не представляю простого алгоритма (а вдруг он есть?). А калмана боюсь не потяну ни я, ни мой проц…
Уточнение: не предлагаю совсем отказатся от горизонта и полета. По-моему лучше сначала проверить сколько ресурсов занимает видео. Если мало, то можно нагрузить основной проц расчетом ориентации (и м.б. платку с датчиками подключить по i2c, без usb, ~100$), если много - то придется обсчитывать датчики на другом проце (типа fy21, ~300$).
С учетом, что на самолете будет стоят нетбук, то думаю нагрузка от работы АП на проц ничтожно мала. В FY-21, как я понимаю, с этим справляется Атмел с тактовой 8-16 Мгц. В пплане надежности и конфигурируемости системы я бы конечно предпочел многомодульную архитектуру, где каждый модуль выполняет свою ф-ю, но так будет явно дороже и больше весить (и то и то намного).
Компас поможет АП разобраться, что модель летит против ветра хвостом вперед (случай не надуман…).
Задачу, кот. вы хотите решить по идее надо реализововать через ДИСС (Доплеровской измеритель скорост и сноса) или АРК (автоматический радио компас), но в модельных масштабах это нереально. На практике есть ЖПС. Полет модели хвостом вперед вне видимости земли я могу представить с трудом. Да и не забыываем, что наша инет-система работает на высотах до 300-500м, т.е. скорее всего полет ниже облаков.
Компас конечно интересен, но тогда надо здорово лезть в теорию навигации (всякие магнитные склонения и т.п.). Да и датчик компаса выносить надо далеко от метала, т.е. куда-то на конец крыла или киль.
Вот интересный открытый проект автопилота code.google.com/p/ardupilot-mega/
и ещё paparazzi.enac.fr/wiki/Main_Page
По 2-му проекту есть на форуме человек, кот. собрал железо и скоро наверно будут опыты.
Боюсь вызвать возмущение у общественности, но ИМХО нет в них ничего экстраординарного, если вникнуть, сплошные треугольники, и ко- синусы, а в формулы думаю большинству вникать просто незачем… (это то что касается только авиагоризонта, без АП).
АП - это ПИД регулятор. Естественно коэф. настройки надо подбирать. А навигация - действительно треугольники, только надо фильтровать шумы от датчикв, кот. вызваны вибрациями и т.п.