Технический форум по робототехнике.
Scorpio » 11 сен 2015, 19:14
В любом случае, разговоры про модульность будущего приложения, это рассуждения на тему КАК нам это сделать, когда мы еще не решили вопрос ЧТО мы будем делать.
=DeaD= » 11 сен 2015, 19:25
Scorpio писал(а):В любом случае, разговоры про модульность будущего приложения, это рассуждения на тему КАК нам это сделать, когда мы еще не решили вопрос ЧТО мы будем делать.
Моё предложение - на первом этапе ядро будем делать + некоторый простенький набор модулей.
Scorpio » 11 сен 2015, 21:49
Для наачала надо сам механизм обмена данными отработать и сваять простенький пример типа hellow word. Чтобы понять общие принципы и что из себя будут представлять ядро и модули (активити, сервисы, фоновые процессы). Надеюсь, что тот кто глубоко разбирается в яве и андроиде, посоветует, как это лучше организовать.
Добавлено спустя 17 минут 41 секунду:Несколько ссылок по теме:
http://www.compulog.ru/public_po/moduln ... a_programmhttp://habrahabr.ru/post/123306/http://gurumagento.varshevsky.com/andro ... rplate.htm
=DeaD= » 11 сен 2015, 21:52
Да там в принципе не так много вариантов. Тем более, если следовать идеологии ROS, у которой всё общение идет через TCP/IP, насколько я помню.
Единственное, что меня пока волнует - как быть с относительно большим потоком данных - те же распознавалки лиц и меток одновременно чтобы запустить - надо каждому модулю будет передать видеоряд, что на смартах, и тем более старых, весьма накладно. Возможно я не в курсе каких-то технологий.
Scorpio » 11 сен 2015, 21:56
"виртуальный конструктор, с помощью которого пользователь подбирает необходимый набор функций" тоже мысль. Как-то визуализировать этот процесс.
Тяжелых потоков данных лучше избегать. Модуль распоснавалки д.б. самодостаточным и сам захватывать изображение. Но, как-то надо синхронизировать доступ к камере из разных модулей. Там есть еще сложности, что типа приложение, не владеющее экраном в данный момент не может сделать снимок. Надо во всем этом разбираться.
=DeaD= » 11 сен 2015, 22:46
Доступ к камере из разных модулей невозможен, насколько я знаю, другое дело, что один модуль может снимать картинку и раздавать остальным, но это серьезные потоки информации, которые могут тормозить. Да и сами распознавалки тоже будут жестко тормозить на старых смартах.
PS: Так-то конечно в андроиде есть IPC, но это менее кросс-платформенная технология.
Добавлено спустя 21 минуту 41 секунду:Вот, кстати, свежее на хабре в том же духе, о чем я говорю:
http://habrahabr.ru/company/1cloud/blog/266699/
Scorpio » 11 сен 2015, 22:47
Из разных модулей невозможен одновременно. Ты так говоришь, будто модули будут расположены на разных смартфонах. Мы же картинки не по UARTу будем передавать. А по интенту, это все равно, что обмен данными между классами одного приложения. Как я понимаю.
=DeaD= » 11 сен 2015, 23:20
Scorpio писал(а):А по интенту, это все равно, что обмен данными между классами одного приложения. Как я понимаю.
Между классами можно по указателю кидать данные, а у процессов нет общей памяти.
Виктор Казаринов » 12 сен 2015, 20:17
В ROS2 декларирована поддержка протокола RTPS (Real-Time Publish-Subscribe Protocol), который может действовать поверх TCP, USB, RS-485 или еще более простых интерфейсов. Это позволит осуществлять публикацию данных и подписку на сервисы в реальном времени, что особенно важно для роботов.
elmot » 12 сен 2015, 22:15
Ну, прямо скажем, ROS долго жил и без реального времени:) На самом деле не так-то оно важно.
Вот лучше взгляните на новые датчики - оптический измеритель расстояния. Я его в деле видел - весьма убедительно.
Сам датчик.
http://www.st.com/web/catalog/mmc/FM132/SC1934/PF260441Плата попробовать с ардуиной или nucleo.
http://www.st.com/web/en/catalog/tools/PF261465набор из 2 плат, чтобы маленькое и с пайкой корпуса не мудохаться.
http://www.st.com/web/en/catalog/tools/PF261466#
Scorpio » 12 сен 2015, 23:31
Датчики симпатичные, но дороговатые.
=DeaD= писал(а):Между классами можно по указателю кидать данные, а у процессов нет общей памяти.
"Самая большая и шокирующая новость для тех, кто раньше программировал на С, а теперь занялся изучением Java, это то, что в языке Java нет указателей"
Но я имелл ввиду конечно между потоками одного приложения, а не между классами.
=DeaD= » 13 сен 2015, 07:51
Scorpio писал(а):Датчики симпатичные, но дороговатые.
=DeaD= писал(а):Между классами можно по указателю кидать данные, а у процессов нет общей памяти.
"Самая большая и шокирующая новость для тех, кто раньше программировал на С, а теперь занялся изучением Java, это то, что в языке Java нет указателей"
В синтаксисе нет, а в движке есть. Все объекты при передаче в качестве параметров в какие либо методы передаются указателями, что невозможно при IPC, поскольку некуда указывать, нет "обычной" общей памяти.
Кстати, нашел, что в принципе "shared memory" можно устроить для процессов, например, библиотекой "ashmem" под Си или "MemoryFile" - её оберткой под Java.
Scorpio » 13 сен 2015, 20:20
Боюсь показаться совсем тупым, но действительно не могу никак врубиться в эту яву. Вроде элементарная вещь. У меня есть 2 класса А и В. Класс А должен запускать метод класса В. Значит в классе А делаем экземпляр В и инициализируем его через конструктор В. Но, классу В тоже нужно запускать методы класса А. Значит он у себя должен создать экземпляр класса А, запустив его конструктор. Но в конструкторе А запускается конструктор В. Получается замкнутый круг. Короче, как установить двухстороннюю связь между 2-мя классами? До сих пор обходился односторонней, но тут стал делать класс - диспетчер, который имеет 2-х стороннюю связь со всеми классами.
- Код: Выделить всё • Развернуть
public class A(){
B b;
//конструктор
A(){b=new B();}
private void a1(){
b.b1();
}
public void a2(){
}
}
public class B(){
A a;
//конструктор
B(){a=new A();}
public void b1(){
}
private void b2(){
a.a2();
}
}
Vlad-I » 13 сен 2015, 20:51
Зачем вызывать конструктор класса A в B? Просто нужно создать метод в B для передачи ссылки на существующий экземпляр класса A
- Код: Выделить всё • Развернуть
public void setA(A aExisting) {
a = aExisting;
}
Scorpio » 13 сен 2015, 21:21
А кто его будет запускать? Т.е. класс А должен запустить b.setA, и передать ему собственный экземпляр? Как то тупо все...