예제 #1
0
        public ActionClient(TAction action, string actionName, string serverURL, Protocol protocol = Protocol.WebSocketSharp, RosSocket.SerializerEnum serializer = RosSocket.SerializerEnum.JSON, float secondsTimeout = 5f, float secondsTimestep = 0.2f)
        {
            this.action     = action;
            this.actionName = actionName;

            this.millisecondsTimeout  = (int)(secondsTimeout * 1000);
            this.millisecondsTimestep = (int)(secondsTimestep * 1000);

            this.serverURL = serverURL;

            socket = new RosSocket(ProtocolInitializer.GetProtocol(protocol, serverURL), serializer);
        }
예제 #2
0
        public static RosSocket ConnectToRos(Protocols protocolType, string serverUrl, EventHandler onConnected = null, EventHandler onClosed = null, RosSocket.SerializerEnum serializer = RosSocket.SerializerEnum.JSON)
        {
            RosBridgeClient.Protocols.IProtocol protocol = GetProtocol(protocolType, serverUrl);
            protocol.OnConnected += onConnected;
            protocol.OnClosed    += onClosed;

            return(new RosSocket(protocol, serializer));
        }
        public static RosSocket ConnectToRos(Protocol protocolType, string serverUrl, EventHandler onConnected = null, EventHandler onClosed = null, RosSocket.SerializerEnum serializer = RosSocket.SerializerEnum.Microsoft)
        {
            IProtocol protocol = ProtocolInitializer.GetProtocol(protocolType, serverUrl);

            protocol.OnConnected += onConnected;
            protocol.OnClosed    += onClosed;

            return(new RosSocket(protocol, serializer));
        }
예제 #4
0
        private void TransferAsync(Protocols.Protocol protocolType, string serverUrl, int timeout, string urdfPath, string rosPackage, RosSocket.SerializerEnum serializer)
        {
            RosSocket = RosConnector.ConnectToRos(protocolType, serverUrl, OnConnected, OnClose, serializer);

            if (!StatusEvents["connected"].WaitOne(timeout * 1000))
            {
                Debug.LogWarning("Failed to connect to " + serverUrl + " before timeout.");
                RosSocket.Close();
                return;
            }

            string            robotName         = Path.GetFileName(urdfPath);
            UrdfTransferToRos urdfTransferToRos = new UrdfTransferToRos(RosSocket, robotName, urdfPath, rosPackage);

            StatusEvents["robotNamePublished"]        = urdfTransferToRos.Status["robotNamePublished"];
            StatusEvents["robotDescriptionPublished"] = urdfTransferToRos.Status["robotDescriptionPublished"];
            StatusEvents["resourceFilesSent"]         = urdfTransferToRos.Status["resourceFilesSent"];

            urdfTransferToRos.Transfer();
        }
        public void TransferUrdf(Protocols.Protocol protocolType, string serverUrl, int timeout, string assetPath, string urdfParameter, RosSocket.SerializerEnum serializer)
        {
            this.timeout       = timeout;
            this.assetPath     = assetPath;
            this.urdfParameter = urdfParameter;

            // initialize
            ResetStatusEvents();

            rosSocket = RosConnector.ConnectToRos(protocolType, serverUrl, OnConnected, OnClosed, serializer);

            if (!StatusEvents["connected"].WaitOne(timeout * 1000))
            {
                Debug.LogWarning("Failed to connect to ROS before timeout");
                return;
            }

            ImportAssets();
        }
예제 #6
0
        public ActionClient(TAction action, string actionName, string serverURL, Protocol protocol = Protocol.WebSocketSharp, RosSocket.SerializerEnum serializer = RosSocket.SerializerEnum.JSON, float timeStep = 0.2f)
        {
            this.action     = action;
            this.actionName = actionName;
            this.timeStep   = timeStep;

            this.serverURL = serverURL;

            socket = new RosSocket(ProtocolInitializer.GetProtocol(protocol, serverURL), serializer);
        }
예제 #7
0
        public void Transfer(Protocols.Protocol protocolType, string serverUrl, int timeout, string urdfPath, string rosPackage, RosSocket.SerializerEnum serializer)
        {
            if (Path.GetExtension(urdfPath)?.ToLowerInvariant() != ".urdf")
            {
                Debug.LogWarning("Please select a valid URDF file to publish.");
                return;
            }

            Thread transferToRos = new Thread(() => TransferAsync(protocolType, serverUrl, timeout, urdfPath, rosPackage, serializer));

            transferToRos.Start();
        }
예제 #8
0
 public FibonacciActionServer(FibonacciAction action, string actionName, Protocol protocol, string serverURL, RosSocket.SerializerEnum serializer, int timeout, float timeStep) : base(action, actionName, protocol, serverURL, serializer, timeout, timeStep)
 {
 }
        private void OnGUI()
        {
            GUILayout.Label("URDF Transfer (From ROS to Unity)", EditorStyles.boldLabel);

            EditorGUILayout.BeginHorizontal();
            address = EditorGUILayout.TextField("Address", address);
            EditorGUILayout.EndHorizontal();

            showSettings = EditorGUILayout.Foldout(showSettings, "Settings");
            if (showSettings)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUIUtility.labelWidth = 100;
                protocolType = (Protocols.Protocol)EditorGUILayout.EnumPopup("Protocol", protocolType);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                EditorGUIUtility.labelWidth = 100;
                serializerType = (RosSocket.SerializerEnum)EditorGUILayout.EnumPopup("Serializer", serializerType);
                EditorGUILayout.EndHorizontal();

                //TODO URDF Parameter
                EditorGUILayout.BeginHorizontal();
                urdfParameter = EditorGUILayout.TextField("URDF Parameter", urdfParameter);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                timeout = EditorGUILayout.IntField("Timeout [s]", timeout);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                assetPath = EditorGUILayout.TextField("Asset Path", assetPath);
                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.Space();
            if (GUILayout.Button("Reset to Default", GUILayout.Width(150)))
            {
                DeleteEditorPrefs();
                GetEditorPrefs();
            }
            EditorGUILayout.EndHorizontal();

            GUILayout.Space(20);
            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button("Read Robot Description"))
            {
                SetEditorPrefs();

                Thread rosSocketConnectThread = new Thread(() => transferHandler.TransferUrdf(protocolType, address, timeout, assetPath, urdfParameter, serializerType));
                rosSocketConnectThread.Start();
            }
            EditorGUILayout.EndHorizontal();

            GUILayout.Space(20);

            EditorGUIUtility.labelWidth = 300;

            DrawLabelField("Connected:", "connected");
            DrawLabelField("Robot Name Received:", "robotNameReceived");
            DrawLabelField("Robot Description Received:", "robotDescriptionReceived");
            DrawLabelField("Resource Files Received:", "resourceFilesReceived");
            DrawLabelField("Disconnected:", "disconnected");
            DrawLabelField("Import Complete:", "importComplete");
        }
예제 #10
0
        private void OnGUI()
        {
            GUILayout.Label("URDF Transfer (From Unity to ROS)", EditorStyles.boldLabel);

            EditorGUILayout.BeginHorizontal();
            serverUrl = EditorGUILayout.TextField("Server URL", serverUrl);
            EditorGUILayout.EndHorizontal();

            showSettings = EditorGUILayout.Foldout(showSettings, "Settings");
            if (showSettings)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUIUtility.labelWidth = 100;
                protocolType = (Protocols.Protocol)EditorGUILayout.EnumPopup("Protocol", protocolType);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                EditorGUIUtility.labelWidth = 100;
                serializerType = (RosSocket.SerializerEnum)EditorGUILayout.EnumPopup("Serializer", serializerType);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                urdfPath = EditorGUILayout.TextField("URDF to export", urdfPath);
                if (GUILayout.Button("Select", new GUIStyle(EditorStyles.miniButtonRight)
                {
                    fixedWidth = 75
                }))
                {
                    urdfPath = EditorUtility.OpenFilePanel("Select a URDF file", urdfPath, "urdf");
                }
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                timeout = EditorGUILayout.IntField("Timeout [s]", timeout);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                rosPackage = EditorGUILayout.TextField(
                    new GUIContent("ROS package",
                                   "The package where all meshes and resources files will be exported to in ROS."),
                    rosPackage);
                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.Space();
            if (GUILayout.Button("Reset to Default", GUILayout.Width(150)))
            {
                DeleteEditorPrefs();
                GetEditorPrefs();
            }
            EditorGUILayout.EndHorizontal();

            GUILayout.Space(10);
            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button("Publish Robot Description"))
            {
                SetEditorPrefs();
                transferHandler.Transfer(protocolType, serverUrl, timeout, urdfPath, rosPackage, serializerType);
            }
            EditorGUILayout.EndHorizontal();


            GUILayout.Space(20);
            EditorGUIUtility.labelWidth = 225;

            DrawLabelField("Connected: ", "connected");
            DrawLabelField("Robot name published: ", "robotNamePublished");
            DrawLabelField("Robot description published: ", "robotDescriptionPublished");
            DrawLabelField("All resources files published: ", "resourceFilesSent");

            GUILayout.Space(10);
            EditorGUI.BeginDisabledGroup(transferHandler.RosSocket == null || !transferHandler.RosSocket.protocol.IsAlive());
            if (GUILayout.Button("Close Connection"))
            {
                transferHandler.RosSocket?.Close();
            }

            EditorGUI.EndDisabledGroup();
        }
예제 #11
0
        public FileTransferFromRosConsoleClient(FileTransferFromRosAction action, string outPath, string serverURL, Protocol protocol = Protocol.WebSocketSharp, RosSocket.SerializerEnum serializer = RosSocket.SerializerEnum.JSON, float timeStep = 0.2f, int serverWaitTimeout = 3) : base(action, "file_transfer_from_ros", serverURL, protocol, serializer, timeStep)
        {
            this.outPath           = outPath;
            this.serverWaitTimeout = serverWaitTimeout;

            files = new ConcurrentQueue <FileTransferFromRosFeedback>();
        }
예제 #12
0
        public ActionServer(TAction action, string actionName, Protocol protocol, string serverURL, RosSocket.SerializerEnum serializer = RosSocket.SerializerEnum.JSON, int timeout = 10, float timeStep = 0.1f)
        {
            this.action     = action;
            this.actionName = actionName;
            this.timeStep   = timeStep;

            this.serverURL = serverURL;

            socket = new RosSocket(ProtocolInitializer.GetProtocol(protocol, serverURL), serializer);
        }