Не могу подписаться на узлы RosSharp C # Unity - PullRequest
0 голосов
/ 24 октября 2018

Я не могу подписаться на какие-либо темы, используя RosSharp.Я работаю полностью локально - на той же машине.Я вполне уверен, что у меня есть правильный URI с правильным портом и не могу получить никакой связи.Я использую ROS через Win-ROS: https://ros -win.visualstudio.com / _git / ros-win? Path =% 2Fdoc% 2FSetup.md & version = GBmaster

На моем локальном компьютереХост-компьютер Windows, я запускаю roscore и публикую узел с: rostopic pub -r 10 /testtopic std_msgs/String "whatever".

Я могу запустить подписчика из командной строки с rostopic echo /testtopic и получить правильные данные обратно, но не могу заставить этого подписчика работать в Unity.Я ожидаю, что SubscriptionHandler по крайней мере будет вызван.Это код, который я пытаюсь повторить: https://github.com/siemens/ros-sharp/blob/a45e847f96d7dd1a7859dd9595e05ef27b27b5c3/Libraries/RosBridgeClientTest/RosSocketTests.cs

Ниже мой код, прикрепленный к GameObject, любая помощь будет признательна.Спасибо.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RosSharp.RosBridgeClient;
using std_msgs = RosSharp.RosBridgeClient.Messages.Standard;

public class BasicROS : MonoBehaviour {

    public string uri = "ws://18.40.26.172:11311";
    private RosSocket rosSocket;
    string subscriptionId = "";

    void Start () {
        rosSocket = new RosSocket(new 
        RosSharp.RosBridgeClient.Protocols.WebSocketNetProtocol(uri)); // 10.189.42.225:9090
        Subscribe("/testtopic");
    }

    public void Subscribe(string id)
    {
        subscriptionId  = rosSocket.Subscribe<std_msgs.String>(id, SubscriptionHandler);
        StartCoroutine(WaitForKey());     
    }

    private IEnumerator WaitForKey()
    {
        Debug.Log("Press any key to close...");

        while (!Input.anyKeyDown)
        {
            yield return null;
        }

        Debug.Log("Closed");
       // rosSocket.Close();
    }

    private void SubscriptionHandler(std_msgs.String message)
    {
        Debug.Log("Message received!");
        Debug.Log(message.data);
    }
}

1 Ответ

0 голосов
/ 25 октября 2018

На момент написания этой статьи ros-win не поддерживает rosbridge, который является мостом ros-websocket, с которым rosSharp может взаимодействовать.Если вы должны использовать ros-win и RosSharp для единой связи через веб-сокет, вам нужно подождать или написать свой собственный порт rosbridge.

Если вы можете заменить ros-win на ros onWSL , тогда вы можете сделать следующее:

Установить мост ros-websocket

sudo apt-get install ros-<rosdistro>-rosbridge-suite

например,

sudo apt-get install ros-melodic-rosbridge-suite

Запустить его с roslaunch rosbridge_server rosbridge_websocket.launchчтобы сообщения веб-сокета доходили до сети рос.

Это создаст прослушиватель веб-сокетов на порту 9090, поэтому вам нужно изменить свой URI на порт 9090.

Также вы можете захотеть использовать localhost,т. е. uri = "ws://localhost:9090";, чтобы избежать проблем с маршрутизацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...