Как передать действия пользователя с сервера на внешнее устройство
У меня есть веб-интерфейс, который позволяет пользователю отправлять удаленные команды 1 или 2 роботам. В настоящее время задания сохраняются в базе данных (также для ведения журнала), а робот(ы) опрашивает(ют) бэкенд django, используя GET запросы каждые 125 мс, что дает приемлемое время отклика без чрезмерной нагрузки на бэкенд. Вкратце:
Action(User) -> [Remote Control UI] -> Django -> DB (based on user input)
Для получения действий робот затем выполняет GET-запрос к Django в виде чего-то вроде:
while(ros::ok())
{
response = requests.get(task_url, timeout=5)
// input task(s) to state machine
// execute task if possible
rate.sleep();
}
Мой вопрос: есть ли лучший способ? Пульт дистанционного управления иногда отключается, когда робот выходит за пределы Wi-Fi, поэтому решение должно обладать определенной степенью гибкости к повторному подключению, смене IP и ошибкам подключения. Я думал о возможных альтернативах, но не уверен, что они осуществимы:
- Запросить роботов зарегистрироваться и сохранить свой IP (?) и отправить команду роботу, если он зарегистрирован
- Многоадресная рассылка команды по всей подсети Wi-Fi (?) и позволить роботу прочитать ее
- Использовать django channels или какую-то похожую технологию? Я нашел только примеры с [django или flask] + javascript. Я не уверен, что это возможно сделать, например, с Django на Flask или что-то подобное. .
Любая обратная связь приветствуется
Поисковая мультимашина ROS поможет в этом деле.
http://wiki.ros.org/ROS/Tutorials/MultipleMachines
Кроме того, вы задаете IP других устройств в локальном файле /etc/hosts. В этом файле вы можете назначить правильные IP друг другу
Сделайте это для всех устройств.
Затем на одной машине запускается roscore
В этом roscore, у вас будет rosip видите сообщение выходящее из roscore обычно вы ядро IP адрес + 11311
Затем на второй машине установите ROS_MASTER_URI на ros IP + порт, который вы нашли.
Тогда две машины могут совместно использовать темы и службы.
Ps. если вы столкнулись с проблемой порта 22 при попытке ssh, следуя руководству. переустановите open-ssh-server и open-ssh-client