Вот что еще подумалось необходимо для JumpStart'a в робототехнике:
1. Выбор нескольких сред разработки под которые в первую очередь будут реализовываться программные модули из которых можно будет быстро собрать необходимый набор для реализации конкретных задач. Тщательное прописание всех вопросов установки этих сред и работы с ними.
2. Под каждую из этих сред разработки в вики выкладываются либо указания как использовать сторонние программные модули, либо пишутся программные модули "собственного приготовления", которые можно использовать для разработки своего робота. Никаких приоритетов собственным модулям отдаваться не должно - только объективная конкуренция, если одно из решений по всем показателям не превосходит другое - выкладываются все варианты.
3. Для улучшенного понимания возможностей - создается репозитарий выполненных проектов с использованием программных модулей (тут по полной будут использованы категории вики - в каждом проекте прописываются все модули которые там использовались, по каждому модулю можно найти все проекты, которые его используют).
Первый программный модуль общего использования - уже готовый OpenCV для ПК.
Дальше надо смотреть типовые библиотеки работы с периферией AVR и выкладывать программные модули для них. Контроллер движения с ПИД-регулятором для AVR опять же.
Я попробую оформить в виде программных модулей свой детектор визуальных QCode-маяков.
Думаю еще можно будет написать модуль для навигации (по крайней мере там все теоретические вопросы приземлены кроме случая шасси без танкового разворота).
на вики-странице модуля пишем краткую информацию + ссылку на оф. сайт (если не свой модуль) + ссылку на cvs/svn/zip модуля (svn предпочтительней) + ссылку на документацию (для своих модулей предлагаю использовать doxygen, размещать на робофоруме буду)
на вики-странице модуля пишем краткую информацию + ссылку на оф. сайт (если не свой модуль) + ссылку на cvs/svn/zip модуля (svn предпочтительней) + ссылку на документацию (для своих модулей предлагаю использовать doxygen, размещать на робофоруме буду)
А как с этим репозитанием работать? Веб-интерфейс или клиента надо будет ставить? Вообще не думаю что так всё сразу попрет, что без репозитария не обойдемся... его же нужно когда куча народу одновременно хотят одно и то же править... хотя фиг знает...
Добавлено спустя 17 минут 34 секунды:
Digit писал(а):грандиозно! это не в плюс, а в минус мне кажется, слишком сложно реализовать. хотя в целом достаточно интересно
А что именно сложно реализовать? Выложить 2 описания готовых программных пакетов и 5 своих функций? Я же не обещал выложить исходники искусственного интеллекта или программные модули из которых за вечер можно собрать робота уровня победителя Grand Challenge.
=DeaD= писал(а):(1) А как с этим репозитанием работать? Веб-интерфейс или клиента надо будет ставить? (2) Вообще не думаю что так всё сразу попрет, что без репозитария не обойдемся... (3) его же нужно когда куча народу одновременно хотят одно и то же править... хотя фиг знает...
клиент нужен для полноценной работы, веб только для просмотра и слива архивов (пока не запущен).
удобно иметь возиожность откатиться к старой версии.
заблуждение, удобно использовать даже одному человеку, у меня например исходники робофорума лежат под контролем svn - удобно, больше не приходится держать кучу бекапов как со старым форумом.
=DeaD= писал(а):(1) А как с этим репозитанием работать? Веб-интерфейс или клиента надо будет ставить? (2) Вообще не думаю что так всё сразу попрет, что без репозитария не обойдемся... (3) его же нужно когда куча народу одновременно хотят одно и то же править... хотя фиг знает...
клиент нужен для полноценной работы, веб только для просмотра и слива архивов (пока не запущен).
удобно иметь возиожность откатиться к старой версии.
заблуждение, удобно использовать даже одному человеку, у меня например исходники робофорума лежат под контролем svn - удобно, больше не приходится держать кучу бекапов как со старым форумом.
Ну давайте попробуем
Добавлено спустя 36 минут 32 секунды: Давайте еще определимся со средой разработки - под что пишем в основном библиотеки.
Младшие МК:
С младшим 8-битными МК вроде всё ясно - AVR, начиная с ATMega8 (на ATTiny не размениваемся, памяти все равно ни для каких "библиотек" там не хватит ) Язык - очевидно С/С++. Среда разработки - предлагаю WinAVR, потому что воровать не надо и библиотек под неё уже немало.
Средние МК (ARM*):
Тут пока можно вообще проблем оставить, либо кто-то возьмется тянуть эту тему. Пока не видел особой нужды у начинающих в этих микроконтроллерах/микропроцессорах.
КПК:
Тут тоже для меня пока темный лес. Нужен специалист.
ПК:
Язык - очевидно С/С++;
По поводу ОС - предлагается действовать по возможности как OpenCV - сразу писать основные библиотеки и под винды и под линукс (как минимум то, что не связано с периферией - в том числе типы использовать так как это делают разработчики OpenCV).
Однако не факт что всё пройдет гладко. Поэтому предложение для проектов по возможности использовать платформу C++ Builder. Если у кого противопоказания или есть мысли по этому поводу - обязательно говорите.
для avr - avr-gсс (С компилятор) или avr-g++ (C++ компилятор, я сейчас больше использую этот) - все это есть в WinAVR'е сейчас я осваиваю С++, вот исходник для работы с USART'ом svn://roboforum.ru/Vooon/public/usart работает как с младшими мегами (с одним УАСПП) так и со старшими. определяет два namespace'a usart0 и usart1 а также константы для задания скоростей. сильно настраивается макросами.
для ARM/AVR32 тоже есть порты GCC, WinARM
для PC С/С++, очень желательно чтоб были совместимыми с GCC хотя для задач не требующих большой скорости удобно использовать Python кстати его интерпретатор можно встроить в свою программу на С/С++, и можно встроить свой код на C/C++/OCaml в питон. пример - библиотека PIL
для avr - avr-gсс (С компилятор) или avr-g++ (C++ компилятор, я сейчас больше использую этот) - все это есть в WinAVR'е сейчас я осваиваю С++, вот исходник для работы с USART'ом svn://roboforum.ru/Vooon/public/usart работает как с младшими мегами (с одним УАСПП) так и со старшими. определяет два namespace'a usart0 и usart1 а также константы для задания скоростей. сильно настраивается макросами.
Итого WinAVR принимается. Если не будет серьезных возражений. Кто нибудь сможет написать хорошую инструкцию по установке?
Vooon писал(а):для ARM/AVR32 тоже есть порты GCC, WinARM
То есть тут скорее всего WinARM, но не думаю что нужно спешить.
Vooon писал(а):для PC С/С++, очень желательно чтоб были совместимыми с GCC хотя для задач не требующих большой скорости удобно использовать Python кстати его интерпретатор можно встроить в свою программу на С/С++, и можно встроить свой код на C/C++/OCaml в питон. пример - библиотека PIL
Совместимость библиотек с GCC будем требовать. Вопрос как проверять быстро эту совместимость, скажем, под C++ Builder'ом, или ставить второй компилятор рядом? И Python чем вообще хорош по отношению к С++? Лучше наверное под С++ писать всё, чем расползаться на несколько языков. К тому же если выбирать второй язык - то скорее всего надо будет java брать, там хоть кросс-платформенность. Хотя OpenCV в Java нету, порты только пишутся.
удобен для быстрого прототипирования, более нагляден. приведу свою програмку - генерирует набор битмапов для шрифта. пока не готова на "все сто" ну и несколько корявая - первый опыт работы с изображениями
class GenBitmaps: def __init__(self, font, size, charlist=u""" !"#$%\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXTZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¢£¤¥§¨«°±²³´µ¶¹º»¼½¾×÷ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё""", pwd="./"): self.size = size self.font = font self.charlist = [x for x in charlist] self.charlist.sort() self.pwd = pwd
def _get_start(self, im): (w,h) = im.size for wi in range(w): for hi in range(h): i = im.getpixel((wi,hi)) #print "%3dx%3d - "%(wi,hi), i, _SW < i if not _SW < i: return wi return 0
def _get_end(self, im): (w,h) = im.size for wi in range(w-1,0,-1): for hi in range(h): i = im.getpixel((wi,hi)) #print "%3dx%3d - "%(wi,hi), i, _SW < i if not _SW < i: return wi+2 return w-1
def _gen_bitmap(self, im): out = [] (w,h) = im.size (s,e) = (self._get_start(im), self._get_end(im)) w = e-s for hi in range(h): o = [] for wi in range(s,e): o.append((not _SW < im.getpixel((wi,hi)))) out.append(o) return (w, out)
def _gen_comment(self, bitmap): (w, bt) = bitmap out = "/* charwidth: %d\n" % w for l in bt: out += " * [" for b in l: if b: out += '*' else: out += ' ' out += "]\n" out += " */\n" return out
def main(self): font = ImageFont.truetype(_FONTDIR+self.font, self.size) for ch in self.charlist: im = Image.new('RGB', (20,20), 0xffffff) draw = ImageDraw.Draw(im) (w,h) = draw.textsize(" %s " % ch, font=font) if ch == ' ': (w,h) = draw.textsize("%s" % ch, font=font) del draw im = im.resize((w,h)) draw = ImageDraw.Draw(im) draw.text((0,0), " %s " % ch, 0, font=font) im.save("%schr%03x.png" % (self.pwd, ord(ch))) #print "%02dx%02d - %schr%03x.png" % (w, h, self.pwd, ord(ch))
if __name__ == "__main__": bmps = GenBitmaps("FreeSansBold.ttf", 15, pwd="./img/")
кстати инсталл WinAVR-a прост - обычный setup.exe ставится и работает отлично.
что касается симулирования то тут нужно советовать авр-студию, сказать про протеус и вмлаб
прошивание - тут кому что больше нравится, стоит сказать о uisp/avrdude/avreal и о гуевых cvavr, pony prog я пользуюсь uisp'ом с altera byte blaster - переключаться в вин не всегда охота, да и оболочку cipproga считаю неудобной, кокда тебе надо просто зашить микру.
Vooon писал(а):кстати инсталл WinAVR-a прост - обычный setup.exe ставится и работает отлично.
что касается симулирования то тут нужно советовать авр-студию, сказать про протеус и вмлаб
прошивание - тут кому что больше нравится, стоит сказать о uisp/avrdude/avreal и о гуевых cvavr, pony prog я пользуюсь uisp'ом с altera byte blaster - переключаться в вин не всегда охота, да и оболочку cipproga считаю неудобной, кокда тебе надо просто зашить микру.
Сказать о куче вариантов надо будет в справочнике решений, и туда сослаться, а тут по хорошему надо будет предложить наиболее распространенное, предлагать несколько только в крайних случаях (огромная разница в цене, риски сжечь оборудование).
Вот что-то типа такого: [[Рабочее место для разработки в WinAVR]] Чтобы новичек мог с понятными затратами как денег, так и времени, за 1 вечер начать разработку под AVR.
Добавлено спустя 5 минут 22 секунды: PS: Про питон - ну я бы не сказал, что я уже увидел чем этот язык хорош для робототехники про быстрое прототипирование - не увидел пока особых приемов, позволяющих делать это быстрее чем в С++ при наличии там навыков. А потом где-нибудь уткнуться в производительность - не хотелось бы. Другое дело если использовать Python как скриптовой язык внутри С++ для целей изменения подпрограммы действий уже в ходе выполнения основной программы - тут может и нашлось бы ему интересное применение.
как я говорил - ничто не мешает реализовать критичные места на C/C++ и встроить в интерпретатор. быстрое прототипирование - то что язык лаконичен, вот небольшой примерчик:
есть массив, нужно его представить как строку 0,0,...,0 причем исключить из него числа 2 < x < 6 решение:
Vooon писал(а):как я говорил - ничто не мешает реализовать критичные места на C/C++ и встроить в интерпретатор. быстрое прототипирование - то что язык лаконичен, вот небольшой примерчик:
есть массив, нужно его представить как строку 0,0,...,0 причем исключить из него числа 2 < x < 6 решение:
>>> m=(0,1,2,3,4,5,6,7,8,9) >>> m (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) >>> ', '.join([str(n) for n in m if not 2<n<6]) '0, 1, 2, 6, 7, 8, 9' >>>
А как с распространенностью этого языка, где его преподают как один из основных? Сколько человек им владеет, сколько уже проектов на нем выполнено для робототехники? Не знаю как у вас, а у меня нет желания осваивать еще один язык программирования, к тому же вы сами выше говорите, что С/С++ все равно придется учить, чтобы критичные места реализовывать на нем, уж и не говорю про то что под AVR все равно на С/С++ писать надо будет. Поэтому пока не вижу особых причин на Питон закладываться.
PS: а про конкретные пример - так в Перле например регулярные выражения тоже чего стоят. Не будем же мы перл пользовать? К тому же, как показывает практика, такие извороты обычно приводят только к плохой читабельности кода и одноразовому его характеру (править такой "прототипный код" - проще застрелиться или переписать - в том числе это касается однобуквенных имен переменных )