подключение Wi-Fi rosserial_server к Raspberry pi ESP8266

#raspberry-pi #ros #esp8266 #arduino-esp8266

#raspberry-pi #ros #esp8266 #arduino-esp8266

Вопрос:

Этот пост связан с ROS (операционной системой робота) и ESP8266, а также был перекрестно размещен на ROS Answers и Robotics Stack Exchange.

У меня ROS Melodic работает на Raspberry Pi 4, и мне нужно отправить информацию (в виде строк) по Wi-Fi на несколько ESP8266. Я только начинаю, так что пока это всего лишь один ESP8266. Для связи я использую, socket_node найденный в пакете ROS rosserial_server (wiki пакета).

Ссылаясь на изображение ниже, подчиненный узел публикует в теме, /Topic_data_over_wifi на которую подписан узел, работающий на ESP8266: фотографии из rqt_graph

Проблема в том, что узел /rosserial_server_socket_node остается плавающим!

Я дважды проверил названия тем и IP-адреса и в какой-то момент заставил узел /rosserial_server_socket_node фактически подключиться к остальной сети ROS, как показано в разделе «Что я хочу». Однако это было всего один раз (случайность?) и я больше никогда не мог /rosserial_server_socket_node подключиться к сети ROS.

rosserial_server socket_node используется с настройками по умолчанию (порт 11411). Я пробовал другие номера портов, но разницы не было. После запуска всех узлов вот выходные данные rostopic list (кроме обычных /rosout и /rosout_agg):

  • /commands_from_master_node
  • /topic_data_over_wifi

Цель: мне нужно найти способ подключить ESP8266 и Raspberry pi 4 через Wi-Fi с использованием ROS. Более конкретно, мне нужно получить данные с подчиненного узла (на Raspberry Pi) на узел, работающий на ESP8266.

Я уже просмотрел этот пост с несколькими TCP-соединениями, но не нашел ничего, что могло бы решить мою проблему.

Любые входные данные / предложения будут очень оценены.

Ответ №1:

В зависимости от программного обеспечения, работающего на ESP, может быть вариантом использовать мост ROS MQTT. Недостатком является то, что вам понадобится дополнительный брокер MQTT (я не уверен, но, насколько я помню, mqtt_bridge является клиентом MQTT и требует такого брокера, как Mosquitto). Вы можете добавлять клиентов MQTT в ESP и подключать их к одному брокеру и подписываться на сообщения MQTT. Другими словами, вы создаете сеть MQTT для ESP с помощью их боркера и добавляете ROS в эту сеть через mqtt_bridge. Если вы не используете специальное программное обеспечение ROS на ESP, оно должно работать нормально.

Комментарии:

1. Спасибо за это предложение, MQTT действительно помог мне достичь того, чего я хотел. Однако, есть ли у вас какие-либо идеи, почему rosserial_server socket_node не работает? Мне нравится использовать как можно меньше «внешних инструментов», и теперь я должен использовать MQTT pub-sub для этой единственной цели, в то время как у меня уже есть другая хорошо настроенная система pub-sub!

2. Не уверен, почему это не сработало, Вы проверили это github.com/agnunez/espros

3. Я действительно сталкивался с этим, но я думаю, что это только для одного подключения (это верно?). В конечном итоге мне нужно будет подключиться к нескольким ESP8266, поэтому я на самом деле не пробовал.