roboforum.ru

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

РОЖДЕНИЕ РОБОТА

При массовом производстве такой робот:

Затмит по популярности тамагочи
7
17%
Вероятно будет пользоваться стабильным спросом какое-то время
7
17%
Может понравится детям и долбанутым гикам, типа автора темы
18
44%
Вряд ли кого-нибудь заинтересует
5
12%
Фигня это все, т.к. реализовать идею все равно не получится
4
10%
 
Всего голосов : 41

Re: РОЖДЕНИЕ РОБОТА

Vlad-I » 13 сен 2015, 21:35

Ну вообще-то Java тут ни при чем, это концепция ООП. По идее, именно с изучения ООП и нужно начинать. Лучше описать задачу конкретнее, и тогда возможны и другие варианты :) При грамотной архитектуре вполне возможно, что классу B совсем необязательно понадобится вызывать методы класса А

Re: РОЖДЕНИЕ РОБОТА

elmot » 13 сен 2015, 23:04

Scorpio писал(а):Датчики симпатичные, но дороговатые.

Ну что за детский сад? Датчики расстояния по 5 евро дороговатые...

Re: РОЖДЕНИЕ РОБОТА

Scorpio » 13 сен 2015, 23:05

Наверное ООП. Но у явы есть только ООП без всяких альтернатив. ООП поддерживается практически во всех современных языках, включая C++ и VB, с которыми я хорошо знаком. Но нигде таких трудностей не возникало.
Конкретнее. Допустим, есть класс TTS, который предназначен для воспроизведения речи, в нем есть метод для запуска синтезатора и событие по окончанию воспроизведения. Из другого класса мы должны запустить воспроизведение и получить подтверждение об его окончании, чтобы двигаться дальше. Как это лучше организовать?

Добавлено спустя 49 секунд:
elmot писал(а):Датчики расстояния по 5 евро дороговатые...

А где там 5? 19 вроде.

Re: РОЖДЕНИЕ РОБОТА

elmot » 13 сен 2015, 23:14

Scorpio писал(а):Конкретнее. Допустим, есть класс TTS, который предназначен для воспроизведения речи, в нем есть метод для запуска синтезатора и событие по окончанию воспроизведения.

Listener'ы на события. Послать событие запуска плейера, получить событие окончания звука. Кстати, оч быстро так приедешь в архитектуру ROS.

Scorpio писал(а):А где там 5? 19 вроде.

На маусере _пара_ датчиков, уже распаянных на платки - 15 евро.
там же, сам чип, в партии 10 шт - 5 евро/шт.

Re: РОЖДЕНИЕ РОБОТА

Scorpio » 13 сен 2015, 23:28

elmot писал(а):Listener'ы на события.

Слушатель и так есть, в классе TTS, теперь он хочет поделиться этим событием с другими классами. В т.ч. и с тем, который его запускал. Что-то я туплю с этой явой. Вот есть 2 объекта, которые хотят общаться друг с другом. Что тут сложного? Но, как это просто и прозрачно сделать без всяких хелперов и меседжей. Хоть в одном классе всю прогу пиши. Видимо я до ООП еще не дорос :o

Re: РОЖДЕНИЕ РОБОТА

elmot » 13 сен 2015, 23:45

Scorpio писал(а):
elmot писал(а):Listener'ы на события.

Слушатель и так есть, в классе TTS, теперь он хочет поделиться этим событием с другими классами. В т.ч. и с тем, который его запускал. Что-то я туплю с этой явой. Вот есть 2 объекта, которые хотят общаться друг с другом. Что тут сложного?

Да ничего. Либо как тебе раньше сказали, создал оба класса, потом друг другу их проставил через сеттеры. Нормальный ООПшный подход, но оч быстро таких классов и сеттеров станет с перебором, так что лучше сразу мессаджами(эвентами). Если впадлу самому писать поддержку сообщений, возьми гуаву, там уже оно есть.
Но, как это просто и прозрачно сделать без всяких хелперов и меседжей. Хоть в одном классе всю прогу пиши.

Ну пиши, через полдня получишь спагетти, который сам уже не разберешь:)
Видимо я до ООП еще не дорос :o

Может и так.

Re: РОЖДЕНИЕ РОБОТА

Scorpio » 13 сен 2015, 23:50

и на том спасибо...

Re: РОЖДЕНИЕ РОБОТА

elmot » 13 сен 2015, 23:57

кстати, если четко уверен, что твоих классов тебе надо по одной штуке ровно, сделай через статические методы. Будет тебе не ООП.
Но это плохой совет, потом поймешь почему:)

Re: РОЖДЕНИЕ РОБОТА

Scorpio » 14 сен 2015, 00:18

Дык статические методы только со статическими данными работают.
Короче сделал так:
Сначала в активити создал экземпляры всех вспомогательных классов через их конструкторы,
Последним создал экземпляр диспетчера (с выдачей ему ссылок на все вспомогательные классы), который работает в основном потоке и будет со всеми общаться,
Раздал на него ссылку всем вспомогательным классам, чтобы они могли ему отвечать,
Диспетчер на прямую выполняет методы из вспомогательных классов (типа "сказать фразу"),
Возникающие во вспомогательных классах события, посылают сообщения диспетчеру в его хендлер.

Возможно грубо и тупо, но работает. Хотелось бы все-таки узнать, как это делают нормальные люди.

Re: РОЖДЕНИЕ РОБОТА

elmot » 14 сен 2015, 07:39

Ну я тебе уже рассказал:) Лучше "туда" тоже через диспетчер и события. Хотя бы из соображений, что вдруг "говорилок" будет больше одной.

Re: РОЖДЕНИЕ РОБОТА

Scorpio » 14 сен 2015, 21:33

Вот, скажите мне лучше такую вещь, если кто-то из читающих разбирался с распознавалкой речи под андроид, т.к. мне кажется, что я столкнулся с неразрешимой проблемой…
После долгого гугленья и экспериментов, я сделал для себя следующие вывод:
Гугловский движок не рассчитан на возможность непрерывного распознавания. Обычный сеанс проходит так: вызвали распознавалку, появилось окошко с микрофоном одновременно со звуковым оповещением и через пару секунд пошла запись. Если в течении 5 секунд ничего не услышано, либо не удалось ничего распознать, то появится соответствующая объява с предложением повторить сеанс распознования.
Нам такой вариант не подходит, т.к. робот должен слушать эфир непрерывно, когда сам не говорит. И тыкать ему пальцами в экран не предполагается. Т.е. сервис надо все время автоматически перезапускать.
От гугловских окошек с микрофонов удалось избавиться с помощью RecognitionListener. От писка, оповещающего о начале процесса распознавания избавиться не удается, можно только его приглушить, отключив звук на время писка. Факт в том, что движок распознавалки делает секундную паузу после запуска, перед тем, как начать слушать. Получается цикл 5 секунд слушает, 1 секунду глухой. Время в 5 секунд теоретически можно увеличить. Однако на практике ничего не меняется, по крайней мере в моем телефоне.
Отношение 5:1 конечно не маленькое, но на практике куски фраз часто пропадают, если начал говорить в ту злосчастную секунду.
Как решение этой проблемы записывать речь во FLAC и отправлять на онлайн распознавалку. Но, это значит сделать робота полностью интернетозависимым, чего не хотелось бы.
У кого-нибудь есть мысли по этому поводу?

Re: РОЖДЕНИЕ РОБОТА

elmot » 14 сен 2015, 21:37

Распознавалка и так инет-зависмая ЕМНИП.
Все время слушать и распознавать тоже не вариант - а)будет жрать батарею по-дикому, б) он тебе там нараспознает и навыполнят - рад не будешь. Не зря же они свой "окей, гугл" придумали

Re: РОЖДЕНИЕ РОБОТА

Scorpio » 14 сен 2015, 21:50

elmot писал(а):Распознавалка и так инет-зависмая

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

Re: РОЖДЕНИЕ РОБОТА

Scorpio » 16 сен 2015, 00:35

Похоже я тут один остался. :cry:
Для затравки хочу попросить протестировать «умника» на разных смартфонах на предмет синтеза/распознавания голоса. Желательно разными голосами, на разных расстояниях. Чтобы сделать выводы, стоит ли игра свеч.
Последний раз редактировалось Scorpio 20 сен 2015, 18:07, всего редактировалось 1 раз.

Re: РОЖДЕНИЕ РОБОТА

elmot » 16 сен 2015, 10:23

Издеваисси? Ты выложи куда-нибудь .apk, а здесь штрих-код и короткую ссылку положи. А то ведь это аццкий геморрой с форума через zip в телефон загонять.
Ты, кста, не один. Я тут подумал - наверное постараюсь забабахать аппаратную платформу. И датчики те на пробу закажу. Но вот твои архитектурные подходы меня совсем не радуют. Поэтому молчу.

ЗЫ. нужна идея по моторам. простые, дешевые, с энкодерами, под 3В питания, со внятной надежностью.


Rambler\'s Top100 Mail.ru counter