Пример #1
0
    /// <summary>
    /// Adds a ROS Actor aka. Publisher, Subscriber, Service to the ROSBridge. Is public so a ROSObject can invoke it after Awake.
    /// </summary>
    /// <param name="rosObject"></param>
    public void AddROSActor(ROSObject rosObject)
    {
        if (!m_ROSInitialized)
        {
            // add the cached rosobjects so we can add them later
            m_ROSObjectsToAdd.Add(rosObject);
            return;
        }

        if (m_ROSObjects.Contains(rosObject))
        {
            return;
        }

        var subscribers = rosObject.GetComponents <ROSBridgeSubscriber>();
        var publishers  = rosObject.GetComponents <ROSBridgePublisher>();
        var services    = rosObject.GetComponents <ROSBridgeService>();

        foreach (var sub in subscribers)
        {
            m_ROS.AddSubscriber(sub.GetType());
        }

        foreach (var pub in publishers)
        {
            m_ROS.AddPublisher(pub.GetType());
        }

        foreach (var serv in services)
        {
            m_ROS.AddServiceResponse(serv.GetType());
        }

        m_ROSObjects.Add(rosObject);
    }
Пример #2
0
    /// <summary>
    /// Removes a ROS Actor. Is useful so objects can disconnect from the ROSBridge if they are not active and do not need to be to connected again.
    /// </summary>
    /// <param name="rosObject"></param>
    public void RemoveROSActor(ROSObject rosObject)
    {
        if (!m_ROSInitialized)
        {
            return;
        }

        if (!m_ROSObjects.Contains(rosObject))
        {
            return;
        }

        var subscribers = rosObject.GetComponents <ROSBridgeSubscriber>();
        var publishers  = rosObject.GetComponents <ROSBridgePublisher>();
        var services    = rosObject.GetComponents <ROSBridgeService>();

        foreach (var sub in subscribers)
        {
            m_ROS.RemoveSubscriber(sub.GetType());
        }

        foreach (var pub in publishers)
        {
            m_ROS.RemovePublisher(pub.GetType());
        }

        foreach (var serv in services)
        {
            m_ROS.RemoveServiceResponse(serv.GetType());
        }

        m_ROSObjects.Remove(rosObject);
    }