Прежде всего отмечу что здесь я не имею в виду задачу выбора между виндой и линухом или солярисом - чего ставить на робота.
Так же здесь не интересно обсуждение различных RTOS, поскольку основная интересная мне в этом контексте задача - эффективное разделение ресурсов робота между различными задачами.
К ресурсам я отношу датчики, платформу и т.п.
Кроме того мне интересна организация задач робота между собой - ведь очевидно что у каких-то задач могут возникать подзадачи, может меняться приоритет задач или возникать задачи с более высоким приоритетом (что почти одно и то же) и всё это должен уметь обрабатывать робот, если он хотя-бы немного универсален.
Поэтому попробую разобрать чего сейчас на эту тему напридумывало человечество и прошу всех у кого есть такая информация выкладывать её сюда.
PS: Простейший пример нескольких задач: "Я на 15 минут отбегу, а ты пока уберись в комнате и помешивай суп каждые полчаса".
То есть у нас получается две задачи:
1. Убраться в комнате;
2. Помешивать суп каждые 30 минут;
тут вроде всё ясно - мы должны каждые 30 минут вызывать прерывание и гонять на кухню мешать суп, однако не всё так просто - во-первых надо положить всё чем мы сейчас заняли манипулятор, тем более если мы вторым манипулятором приподнимаем сейчас провод от ноутбука, который навернется, если мы погоним на кухню не положив провод, а еще мы могли в рамках уборки угнать куда-то, откуда за оставшиеся до помешивания 1 минуту не вернутся и т.п. Короче масса заморочек и хочется решать такие задачи опираясь на какую-то серьезную теорию.
Добавлено спустя 16 минут 11 секунд:
Добавлено спустя 19 минут 22 секунды:
Пока скину сюда "поток сознания" возможно это еще один "велосипед"
Ключевые понятия:
1. Ресурс - то чего ограничено;
2. Задача - то чего надо бы выполнить;
3. Райдер:
3.1. постоянный - то чего требует задача чтобы выполнялось всегда между передачей ей активного управления;
3.2. входной - непосредственно перед передачей;
4. Диспетчер - тот кто рулит раздачей ресурсов задачам и т.п.
Добавлено спустя 2 минуты 16 секунд:
Тогда помешивать суп каждые 15 минут может быть повешено задачей по таймеру с входным райдером "находиться на кухне около плиты" + "иметь свободным манипулятор №1".
Добавлено спустя 6 минут 8 секунд:
Требование к ресурсу может быть сформулировано в терминах его состояния (платформа находится в области Х, манипулятор свободен, штанга с видеокамерой поднята и т.п.).
Добавлено спустя 2 минуты 45 секунд:
Каждая задача должна писаться с учетом того, что в любой момент её могут прервать на более важную задачу и вернуться к ней через неизвестное количество времени. Впрочем это не сильно отличается от того, что задача запускается сначала, просто входное состояние в эту задачу может быть более близкое к решению.
Добавлено спустя 19 минут 19 секунд:
В общем получается задачи должны при запуске подписываться на какой-то контракт типа "я тут возьму платформу погонять, обязуюсь вернуть через X минут в радиус 2м от координат (A,B)". Соответственно диспетчер может потребовать с задачи не только подписаться на это, но и расставить серию чек-поинтов так, чтобы если задача ведёт себя неадекватно - забрать у неё управление ресурсом и вернуть его для более важной задачи. Однако, в этом случае, диспетчер должен уметь управлять ресурсами для приведения их в нужное состояние.
В общем можно попробовать разобрать ситуацию на каком-нибудь простом примере:
Пусть есть робот состоящий из:
1. Шасси (пусть колёсное на танковой схеме разворота или гусеничное);
2. Датчики препятствий вокруг (ну или как минимум спереди, тогда шасси круглое);
3. Камера на поворотной платформе на, скажем, штанге торчащей вверх из робота;
4. Манипулятор;
Добавлено спустя 9 минут 29 секунд:
Тогда ресурсов фактически 3:
1. Положение платформы в пространстве;
2. Положение камеры;
3. Положение манипулятора, занятость манипулятора;
Задача уборки в комнате может быть поставлена в основной поток, во вспомогательный поток вешается задача "помешивать суп каждые 30 минут", с райдером "при входе в задачу платформа должна быть максимум в 2м от плиты с супом" + "манипулятор должен быть свободен".
По хорошему весь вопрос начинается при попытке гарантировать выполнение этих райдеров диспетчером, поскольку он должен защищать одни задачи от неадекватных действий других задач. Ну и задачи конечно писать с учетом таких "райдеров" тоже отдельное развлечение.