roboforum.ru

Технический форум по робототехнике.

Как правильно писать сценарии поведения робота?

Re: Как правильно писать сценарии поведения робота?

Scorpio » 24 ноя 2016, 18:02

Не, голос там отстойный. С Алёной не сравнить. Не полохие голоса идут в составе KobaSpeech. Сама говоритка trial, но голоса ставятся в систему и доступны через SAPI.

Re: Как правильно писать сценарии поведения робота?

Angel71 » 25 ноя 2016, 00:16

Dmitry__, с таким же успехом может быть применено почти к большинству сообщений на форуме.
Scorpio, на шарпе сделать вообще проблем мало во всех смыслах. популярных и хорошо зарекомендовавших подходов на самом деле очень мало, тем не менее реализовывают их ооооочень сильно по разному, иногда даже не сразу и понятно, какой подход использован или какие намешаны. да и fsm, goap, strips, htn, behaviour tree,... это одно, а есть ещё куча других вещей, которые куда сильней влияют на всё. наглядней наверно проще будет, вот один из предыдущих вариантов реализаций с деревьями
http://pasteboard.co/1CdJR4kMR.jpg
самый простой вариант - в самом дереве нет событий, прерывателей, автоматической сборки, настройки и кучи других полезных вещей. на всякий, в wait и sleep оно не торчит всё это время - вызвалось, вернуло результат и всё. это работа с итераторами, в данном случае с yield. когда в другом проекте эксперементировал с гуи программированим, было удобней ссылки хранить - ветка задавалась не жестко в коде, все нужные данные заносились в переменные (генератор кода и компиляция конечно вариант, но неоправданно много возни с этим). ещё один момент - к wait или sleep оно может и не вернуться, т.е. хоть никогда. более поздний вариант
http://pasteboard.co/1Cuhb3ivt.jpg
реализация дерева (библиотека деревьев) вообще не менялась, а в общем отличается очень сильно - есть прерыватели, события, код в общем слабо связанный. вот пара примеров как происходит сборка некоторых вещей
http://pasteboard.co/1CsKL5vzP.jpg
http://pasteboard.co/1CtdRAlO7.jpg
внедрения зависимостей тут даёт больше гибкости - сборка и настройка контейнеров может быть автоматической, вручную в коде, с использованием конфигурационных настроек (в файле, базе,...) и комбинировать. если работал где-то с контейнерами, это понимаешь. нет, почитай про внедрение зависимостей (ioc, di и т.д.), посмотри как оно на практике используется, как вариант в wcf или asp.
ещё одна особенность в переделанном коде в том, что активно используются интерфейсы и за счёт этого в дереве ещё менее жестко логика работы задаётся - по данным выбирается наиболее подходящая реализация интерфейсов. может вызваться простенькая ф-я в которой x_new += (t_new - t_old) * speed. а может вызываться что-то очень ресурсоёмкое, с вычислениями сложных траекторий в пространстве или с использованием планировщика пути, который ещё может результат обсчитывать асинхронно, т.е. не сразу результат возвращается. нужно передать сообщение, без разницы где получатель, какие протоколы, по каким интерфейсам (уарт, эзернет, блютуз,...) будет передаваться. работа с датчиками, разделение платформозависимого кода и т.д., т.е. все плюшки интерфейсов. а код дерева при этом не изменен.
так это небольшие изменения. а если сравнишь, допустим с nodecanvas и подобными вещами в unity3d, так сильных различий будет очень много. "есть ещё куча других вещей, которые куда сильней влияют на всё". хорошие библиотеки, которые в играх используются зачастую платные, но если есть желание, некоторые игры элементарно декомпилировать. может помнишь, была такая мертворожденная роботикс студия от майкрософта. по прямому назначанию использовать не стоит, а вот посмотреть как сделаны различные вещи очень даже стоит. с теми контейнерами, что выше показывал используется, рефлексия. иногда она очень полезна и удобна, особенно в связке с использованием атрибутов. держи маленький примерчик, может пригодится для создания локальной или удалённой консоли или ещё для чего полезного
Код: Выделить всёРазвернуть
enum CmdType { immediate, queue }
static List<string> console_commands_names = new List<string>();

[AttributeUsage(AttributeTargets.Method)]
public class CmdAttribute : Attribute
{
    public CmdType cmdtype { get; set; }
    public string ConsoleName { get; set; }
    public string InternalName { get; set; }
}

public static class Commands
{
    [Cmd(cmdtype = CmdType.immediate, InternalName = "cls", ConsoleName = "cls")]
    public static void cls(object parameters)
    {
       ...
    }

    [Cmd(cmdtype = CmdType.queue, InternalName = "help", ConsoleName = "help")]
    public static void help(object parameters)
    {
       Console.Echo("command list:");
       foreach (string s in console_commands_names)
          Console.Echo(s);
    }

    [Cmd(cmdtype = CmdType.immediate, InternalName = "someaction", ConsoleName = "a")]
    public static void someaction(object parameters)
    {
      ...
    }
}

void autoregister()
{
  Type[] alltypes = Assembly.GetExecutingAssembly().GetTypes();
  foreach (Type t in alltypes)
  {
    MethodInfo[] all_mi = t.GetMethods(BindingFlags.Public | BindingFlags.Static);
    foreach (MethodInfo mi in all_mi)
    {
        CmdAttribute attr = mi.GetCustomAttribute<CmdAttribute>();
        if (attr != null)
        {
            CommandInfo ci = new CommandInfo();
            ci.attribute = attr;
            ci.action = new Action<object>((obj) => mi.Invoke(mi.Name, new object[] { obj }));
            RegisterCommand(ci);
        }
    }
}

кстати о дотнетах, пока вспомнил. кроме mono есть .net core (сейчас делится на native и asp). пробовал, мне очень понравилось. всё гладко, не всё гладко с этими mono или core на линуксах, то такое - платки с двух или четырёх ядерными старшими армами сейчас с доставкой примерно от 10$ и на них можно делать намного более сложные вещи, чем на микроконтроллерах. одно из текущих направлений, чем сейчас занимаюсь это как раз разработка фреймворка для использования на недорогих малопотребляющих камушках (старших армах, интел), который можно будет применять в том числе и на различных роботах. таких ограничений по времени как с ботом нет, так что могу позволить полностью заново проработать всю архитектуру и не делать это всё узкоспециализированным.
кроме .net core есть .net mf. ставил давно на 4ю дискавери - интересно, но требовало много памяти и тактов. сейчас намного интересней стало. текущий mf делится на две ветки. первая это интерпретируемый вариант и в данном случае не интересен. вторая ветка "illium" и интересна тем, что код компилируется в машинный код. разница в производительности между не компилированным в машинный код и компилируемым очень значительна. пока эта ветка на начальной стадии разработки, но поэкспериментировать с ней уже можно. недавно для теста подготавливал вот такой кодик
http://pasteboard.co/1CjmF3oHZ.jpg
на 4ю дискавери не интересно, хочется или на 51/52 нрфки или что-то уровня 103стм, чуть позже как будет время продолжу эксперементы с illium.

Re: Как правильно писать сценарии поведения робота?

Dmitry__ » 25 ноя 2016, 00:55

Angel71, как ты не можешь понять простую вещь - любой код должен компилиться в машинный код процессора, а не в очерeдной байт-код обработчика ms.net?

Re: Как правильно писать сценарии поведения робота?

Angel71 » 25 ноя 2016, 01:11

можешь всегда компилировать только в машинный код, я не против. illium не единственная ветка, в которой есть возможность компилировать в машинный код, но пока мне эти варианты не подходят. :pardon: какие на данный момент есть возможности, тем и пользуюсь и пока всё устраивает. хочешь привнести хорошие идеи в дотнет или ускорить разработку, все будут только за, держи https://github.com/Microsoft

Re: Как правильно писать сценарии поведения робота?

Scorpio » 25 ноя 2016, 01:31

Angel, весьма познавательно. Надо попытаться переварить всю эту инфу и систематезировать.
Dmitry_, NET - это всего-лишь уровень абстракции для удобства, о котором можно особо не задумываться. По статистике линуксов все еще не более 1.5%, и даже OSX винда покрывает, как теленок зайца. Так чего мне особо печься о мультисистемности? Будь моя воля - я бы всем XP поставил и запретил бы менять. Не сегодня - завтра полноценный комп с очередной виндой на борту будет помещаться в спичечный коробок и приделываться к электрощетке. И вообще должно быть все равно, на каком языке писать. Лишь бы было удобно и производительно для конкретного проекта. И, главное, чтобы мысли были. А уж, каким способом их оформить - дело десятое.

Re: Как правильно писать сценарии поведения робота?

Angel71 » 25 ноя 2016, 02:08

со спичечный коробок пока не попадалось, а небольшие устройства давно уже есть. sodimm модули (даже с i3, i5 или i7). на интел атомах всё больше интересного. небольшие коробочки (мини-пк/"tv box" - нюки, gigabyte brix и куча других). планшеты вполне вменяемых денег стоят. есть http://www.up-board.org/, asus vivostick/intel compute stick/morefine m1s и много чего другого.

Re: Как правильно писать сценарии поведения робота?

Scorpio » 25 ноя 2016, 02:48

Вот, кстати, у апов правильное направление: железо под любую ОС - ставь, что нравится.

Re: Как правильно писать сценарии поведения робота?

Angel71 » 25 ноя 2016, 02:57

процессор к этому как бы распологает. а вот во второй наличие altera max 10 необычно.

Re: Как правильно писать сценарии поведения робота?

Dmitry__ » 25 ноя 2016, 16:36

Scorpio писал(а):По статистике линуксов все еще не более 1.5%, и даже OSX винда покрывает, как теленок зайца.

Осталось провести статистику ос на роутерах :wink: , железяка куда как ближе к роботам :)
Кста, OSX - линух :)
И андроид - линух :)

Re: Как правильно писать сценарии поведения робота?

Scorpio » 25 ноя 2016, 18:29

Ктож спорит. Заслуги линуха в роботостроении сложно переоценить. Но мы вроде начали разговор про оконные приложения для ПК. Для них кроссплатформенность нужна не очень.

Re: Как правильно писать сценарии поведения робота?

Dmitry__ » 25 ноя 2016, 20:06

линух - это операционная система, а венды - гаджет, поиграться и выкинуть. :)
Вон, люди еще не до конца разобрались в vb6 и винХП, а это уже все сдохло и не поддерживается.
Срань, одним словом... :bad:

Re: Как правильно писать сценарии поведения робота?

Angel71 » 25 ноя 2016, 20:46

vb6? :ROFL: не торопись, все ещё на паскале и турбо си в досе.
Scorpio, забей пытаться верующим разъяснять, почему тебе больше нравиться/подходит что-то - это бесполезно, они иногда просто тупо будут тужится навязывать свои предпочтения вплоть до маразма "я люблю по утрам кактусы слёзно жевать и ты должен любить кактусы жевать". займись лучше чем полезным, чем с повёрнутыми спорить. держи лучше на посмотреть https://github.com/FoC-/GOAP.

Re: Как правильно писать сценарии поведения робота?

Dmitry__ » 25 ноя 2016, 21:17

Ой, ой, ой. Обиделся :)

Re: Как правильно писать сценарии поведения робота?

Scorpio » 26 ноя 2016, 07:33

Вот печально все-таки, что у нас на форуме нет желающих делать умных роботов. За исключением Виктора Казаринова, который скорее фундаменталист, чем практик. Вот начал делать хозяйственного робота, но обнаружил, что хозяйство находится в несовершенном мире, который надо бы сначала изменить :)
Ну хоть Сири какую -нибудь с ножками бы сделать. Хоть с амебными зачатками интеллекта и минимальной способностью к самообучению. У меня мозгов на это дело не хватает. Мой удел - "конечные автоматы", слегка расшевеленные генератором случайных чисел и набитым вручную контентом. Но ведь есть же люди. Наверняка есть. Должны быть...

Re: Как правильно писать сценарии поведения робота?

Dmitry__ » 26 ноя 2016, 08:11

Ты бы привел практический пример, где у тебя происходит затык с алгоритмами.
А вообще, поведение робота сильно зависит от количества датчиков/устройств. Если на роботе из датчиков только кнопка, то и поведение будет на уровне "схватить монетку". А так - поставил датчик давления, вот уже робот может о плохом самочувствии поговорить или о погоде, есть градусник - шикарно, еще добавится интеллект. Гироскопы, аксели ? Уже может кричать "куда вы меня несете", магнитометр - уже бабулька с хроническими заболеваниями, добавил кожу - самому станет страшно от его интеллекта :)
Но самые совершенные и сложные датчики/устройства - это стерео слух, стерео зрение, обоняние, кожа (координатная чувствительность к давлению и температуре), речевой аппарат. Каждое такое устройство - отдельный большой проект, которым можно заниматься всю жизнь.
Если этих датчиков нет - то только говорилка подключенная к интернету ака Сири.
Да, еще надо добавить всякие жизненные процессы. Кого имитируем? Человека? Значит циклы - есть/спать/срать/дышать/бегать за самками. Смотри поведение тамагочи...
После добавления всех этих датчиков/устройств/дефектов, робот будет очень даже сносно себя вести на конечных автоматах, разбавленных генераторами случайных чисел.
Не такой уж человек и вольный. Мы рабы своих инстинктов :) Вот я сегодня ни с кем не посрался, от чего сильно расстраиваюсь. Шутка :)


Rambler\'s Top100 Mail.ru counter