ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

stevefturner's profile - activity

2015-04-15 14:42:45 -0500 received badge  Notable Question (source)
2015-04-15 14:42:45 -0500 received badge  Famous Question (source)
2013-04-22 21:46:11 -0500 received badge  Famous Question (source)
2013-02-20 04:45:30 -0500 received badge  Popular Question (source)
2012-09-16 07:56:34 -0500 received badge  Famous Question (source)
2012-09-16 07:56:34 -0500 received badge  Popular Question (source)
2012-09-16 07:56:34 -0500 received badge  Notable Question (source)
2012-09-10 06:08:59 -0500 asked a question Repeated calls to rosjava parameter server produce unexpected results.

During repeated runs with a rosjava master mixing java and C++ nodes (all on Windows, compiled with MSVC), it appeared that a socket connection was dying within the Java code. After some period of time one or more of the C++ nodes would appear to block somewhere down in OS code. Was unable to debug effectively. However, it was noted that the C++ nodes affected were making multiple default parameter calls at 1HZ to the rosjava master:

nh.param<std::string>("default_param", default_param, "default_value");

After removing these calls, the nodes worked reliably. It seems like repeated calls to the java implementation of the parameter server was causing some kind of hang up. Anyone experienced this? I'll try to debug more and get a stack trace as time allows.

2012-09-10 05:57:01 -0500 received badge  Supporter (source)
2012-09-05 05:44:30 -0500 received badge  Famous Question (source)
2012-08-20 21:15:36 -0500 received badge  Notable Question (source)
2012-08-16 00:40:01 -0500 received badge  Popular Question (source)
2012-06-25 09:47:48 -0500 asked a question rosjava CallerID in MessageListener

Is there a simple way to get a publisher's callerID within a Subscriber/Message Listener in rosjava? I see that it gets stored in the publisher while in TcpServerHandshakeHandler.java:handleSubscriberHandshake() but do not see the subscriber having access to this.

Thanks, Steve

2012-06-25 09:42:22 -0500 commented question Multiple Publishers, single subscriber - pubUpdate call fails.

Damon, I ended up modifying the pubUpdate calls in topic_manager.cpp:583 to return sub->pubUpdate(pubs); so that it returns true and thus constructs the response properly.

2012-05-07 06:46:43 -0500 received badge  Notable Question (source)
2012-04-09 11:35:08 -0500 commented question Multiple Publishers, single subscriber - pubUpdate call fails.

Looking at topic_manager.cpp:pubUpdateCallback, I see the request come in, but it will only ever return a successful XMLRPC response if pubUpdate returns true. pubUpdate always returns false in this case. Bug -- or am I missing something here?

2012-04-09 07:59:25 -0500 asked a question Multiple Publishers, single subscriber - pubUpdate call fails.

Here's my scenario: I have a rosjava master running on 192.168.1.2.

I create a publisher running on 192.168.1.3 with ROS_IP=192.168.1.3. (Using rostopic)

I create a subscriber on 192.168.1.2 with ROS_IP=192.168.1.2, the subscriber connects successfully and starts receiving messages. (Using roscpp).

I create a subscriber on 192.168.1.3 with ROS_IP=192.168.1.3, the subscriber connects successfully and starts receiving messages. (Using rostopic).

I create another publisher on the same topic on 192.168.1.3 using rostopic. The subscriber on 192.168.1.3 replies successfully to the rosjava master's publisherUpdate XMLRPC call in SlaveClient.java. However, the roscpp node running on 192.168.1.2 returns a failure code to the master's call to publisherUpdate causing the second rostopic publisher to fail registration with the master.

Any ideas on what might be causing this?

2012-04-07 18:50:28 -0500 received badge  Popular Question (source)
2012-01-18 06:53:14 -0500 commented question RosJava Tutorial Integration / Multiple Listeners
I've narrowed it down to a the publisherUpdate call in SlaveClient. If I attempt to register two publishers on the same topic on two different hosts, I get the failure: org.apache.xmlrpc.common.XmlRpcInvocationException: Failed to invoke method registerPublisher in class org.ros.internal.node.xmlrpc
2012-01-18 02:05:36 -0500 commented answer RosJava Tutorial Integration / Multiple Listeners
Roger that -- condensed the postings. Did not see that ASKBOT supports editing posts either otherwise I would have done so to provide additional information since comments are limited in size just like on SO. Thanks for the heads up.
2012-01-18 02:00:26 -0500 received badge  Editor (source)
2012-01-17 11:19:39 -0500 answered a question RosJava Tutorial Integration / Multiple Listeners

Running the same test, but with a CPP publisher and a CPP listener on another host in addition to the two subscribers on the same host as the master, I get the following errors:

Jan 17, 2012 6:15:04 PM org.ros.internal.node.server.MasterServer registerPublisher
INFO: Registering publisher: PublisherIdentifier<SlaveIdentifier</subscriber2, http://192.168.1.113:56473>, TopicIdentifier</rosout>>
Jan 17, 2012 6:15:04 PM org.ros.internal.node.server.MasterServer publisherUpdate
INFO: Publisher update: /rosout
Jan 17, 2012 6:15:04 PM org.apache.xmlrpc.server.XmlRpcErrorLogger log
SEVERE: Failed to invoke method registerPublisher in class org.ros.internal.node.xmlrpc.MasterXmlRpcEndpointImpl: 
org.apache.xmlrpc.common.XmlRpcInvocationException: Failed to invoke method registerPublisher in class org.ros.internal.node.xmlrpc.MasterXmlRpcEndpointImpl: 
    at org.apache.xmlrpc.server.ReflectiveXmlRpcHandler.invoke(ReflectiveXmlRpcHandler.java:129)
    at org.apache.xmlrpc.server.ReflectiveXmlRpcHandler.execute(ReflectiveXmlRpcHandler.java:106)
    at org.apache.xmlrpc.server.XmlRpcServerWorker.execute(XmlRpcServerWorker.java:46)
    at org.apache.xmlrpc.server.XmlRpcServer.execute(XmlRpcServer.java:86)
    at org.apache.xmlrpc.server.XmlRpcStreamServer.execute(XmlRpcStreamServer.java:200)
    at org.apache.xmlrpc.webserver.Connection.run(Connection.java:208)
    at org.apache.xmlrpc.util.ThreadPool$Poolable$1.run(ThreadPool.java:68)
Caused by: org.ros.exception.RemoteException: 
    at org.ros.internal.node.response.Response.fromListChecked(Response.java:115)
    at org.ros.internal.node.client.SlaveClient.publisherUpdate(SlaveClient.java:119)
    at org.ros.internal.node.server.MasterServer.publisherUpdate(MasterServer.java:195)
    at org.ros.internal.node.server.MasterServer.registerPublisher(MasterServer.java:259)
    at org.ros.internal.node.xmlrpc.MasterXmlRpcEndpointImpl.registerPublisher(MasterXmlRpcEndpointImpl.java:103)
    at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.xmlrpc.server.ReflectiveXmlRpcHandler.invoke(ReflectiveXmlRpcHandler.java:115)
    ... 6 more
Caused by:
org.ros.exception.RemoteException: 
    at org.ros.internal.node.response.Response.fromListChecked(Response.java:115)
    at org.ros.internal.node.client.SlaveClient.publisherUpdate(SlaveClient.java:119)
    at org.ros.internal.node.server.MasterServer.publisherUpdate(MasterServer.java:195)
    at org.ros.internal.node.server.MasterServer.registerPublisher(MasterServer.java:259)
    at org.ros.internal.node.xmlrpc.MasterXmlRpcEndpointImpl.registerPublisher(MasterXmlRpcEndpointImpl.java:103)
    at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.xmlrpc.server.ReflectiveXmlRpcHandler.invoke(ReflectiveXmlRpcHandler.java:115)
    at org.apache.xmlrpc.server.ReflectiveXmlRpcHandler.execute(ReflectiveXmlRpcHandler.java:106)
    at org.apache.xmlrpc.server.XmlRpcServerWorker.execute(XmlRpcServerWorker.java:46)
    at org.apache.xmlrpc.server.XmlRpcServer.execute(XmlRpcServer.java:86)
    at org.apache.xmlrpc.server.XmlRpcStreamServer.execute(XmlRpcStreamServer.java:200)
    at org.apache.xmlrpc.webserver.Connection.run(Connection.java:208)
    at org.apache.xmlrpc.util.ThreadPool$Poolable$1.run(ThreadPool.java:68)

Jan 17, 2012 6:15:04 PM org.ros.internal.node.client.Registrar callMaster
SEVERE: Exception caught while communicating with master.
Jan 17, 2012 6:15:04 PM org.ros.internal.node.topic.DefaultPublisher$1 onMasterRegistrationFailure
INFO: Publisher registration failed: Publisher<PublisherDefinition<PublisherIdentifier<SlaveIdentifier</subscriber2, http://192.168.1.113:56473>, TopicIdentifier</rosout ...
(more)
2012-01-17 11:16:31 -0500 answered a question RosJava Tutorial Integration / Multiple Listeners

Some more information...

I added another test where I use the standard publisher/subscribers.

public void testOnePublisherToManySubscriberNoLatch()
        throws InterruptedException {
    nodeConfiguration.setNodeName("publisher");
    Node publisherNode = nodeFactory.newNode(nodeConfiguration);

    final Publisher<org.ros.message.std_msgs.String> publisher = publisherNode
            .newPublisher("foo", "std_msgs/String");

    final org.ros.message.std_msgs.String msg = new org.ros.message.std_msgs.String();

    publisherNode.executeCancellableLoop(new CancellableLoop() {
        private int sequenceNumber;

        @Override
        protected void setup() {
            sequenceNumber = 0;
        }

        @Override
        protected void loop() throws InterruptedException {

            msg.data = "Hello! " + sequenceNumber;

            publisher.publish(msg);
            sequenceNumber++;
            Thread.sleep(1000);
        }
    });

    nodeConfiguration.setNodeName("subscriber1");
    Node subscriberNode1 = nodeFactory.newNode(nodeConfiguration);

    Subscriber<org.ros.message.std_msgs.String> subscriber1 = subscriberNode1
            .newSubscriber("foo", "std_msgs/String");
    subscriber1
            .addMessageListener(new MessageListener<org.ros.message.std_msgs.String>() {
                @Override
                public void onNewMessage(
                        org.ros.message.std_msgs.String message) {
                    System.out.println("Listener1:" + message.data);
                }
            });

    nodeConfiguration.setNodeName("subscriber2");
    Node subscriberNode2 = nodeFactory.newNode(nodeConfiguration);
    Subscriber<org.ros.message.std_msgs.String> subscriber2 = subscriberNode2
            .newSubscriber("foo", "std_msgs/String");
    subscriber2
            .addMessageListener(new MessageListener<org.ros.message.std_msgs.String>() {
                @Override
                public void onNewMessage(
                        org.ros.message.std_msgs.String message) {
                    System.out.println("Listener2:" + message.data);
                }
            });

    subscriber1.shutdown();
    subscriber2.shutdown();
    publisher.shutdown();

}

This works as desired. Is it somehow related to the node configuration / hostname resolution? I don't have these issues if I use the regular rosmaster in linux.

Will post an answer if I figure it out...

Thanks

2012-01-17 10:26:52 -0500 received badge  Student (source)
2012-01-17 10:08:15 -0500 asked a question RosJava Tutorial Integration / Multiple Listeners

I have a problem with topic publisher/subscriber integration in RosJava when using the rosjava version of RosCore. I can execute the following test successfully where multiple subscribers attach to a publisher.

public void testOnePublisherToManySubscriber() throws InterruptedException {
        nodeConfiguration.setNodeName("publisher");
        Node publisherNode = nodeFactory.newNode(nodeConfiguration);

        CountDownPublisherListener<org.ros.message.std_msgs.String> publisherListener =
            CountDownPublisherListener.newDefault();
        Publisher<org.ros.message.std_msgs.String> publisher =
            publisherNode.newPublisher("foo", "std_msgs/String");
        publisher.addListener(publisherListener);

        final org.ros.message.std_msgs.String helloMessage = new org.ros.message.std_msgs.String();
        helloMessage.data = "Hello, ROS!";

        final CountDownLatch messageReceived = new CountDownLatch(1);
        nodeConfiguration.setNodeName("subscriber");
        Node subscriberNode = nodeFactory.newNode(nodeConfiguration);

        CountDownSubscriberListener<org.ros.message.std_msgs.String> subscriberListener =
            CountDownSubscriberListener.newDefault();

        CountDownSubscriberListener<org.ros.message.std_msgs.String> subscriberListener2 =
                CountDownSubscriberListener.newDefault();

        Subscriber<org.ros.message.std_msgs.String> subscriber1 =
            subscriberNode.newSubscriber("foo", "std_msgs/String");
        subscriber1.addMessageListener(new MessageListener<org.ros.message.std_msgs.String>() {
          @Override
          public void onNewMessage(org.ros.message.std_msgs.String message) {
            assertEquals(helloMessage, message);
            messageReceived.countDown();
          }
        });
        subscriber1.addSubscriberListener(subscriberListener);

        Subscriber<org.ros.message.std_msgs.String> subscriber2 =
                subscriberNode.newSubscriber("foo", "std_msgs/String");
            subscriber2.addMessageListener(new MessageListener<org.ros.message.std_msgs.String>() {
              @Override
              public void onNewMessage(org.ros.message.std_msgs.String message) {
                assertEquals(helloMessage, message);
                messageReceived.countDown();
              }
            });
            subscriber2.addSubscriberListener(subscriberListener2);

        assertTrue(publisherListener.awaitMasterRegistrationSuccess(1, TimeUnit.SECONDS));
        assertTrue(subscriberListener.awaitMasterRegistrationSuccess(1, TimeUnit.SECONDS));

        RepeatingPublisher<org.ros.message.std_msgs.String> repeatingPublisher =
            new RepeatingPublisher<org.ros.message.std_msgs.String>(publisher, helloMessage, 1000,
                executorService);
        repeatingPublisher.start();

        assertTrue(messageReceived.await(1, TimeUnit.SECONDS));

        repeatingPublisher.cancel();
        publisher.shutdown();
        subscriber1.shutdown();
        subscriber2.shutdown();
      }

However, if I fire up a RosCore on my own with something like:

  public static void main(String[] argv){
        RosCore core;
        if(argv.length == 1)
            core = newPublic(Integer.valueOf(argv[0]));
        else
            core = newPublic(11311);

        core.start();
      }

And then I use RosRun to execute the Talker node, it registers successfully. But then if I attempt to start multiple listeners an after the first fail. Subsequently... other pub/sub features fail to work properly. For example, starting a listener prior to a publisher. What am I doing wrong?

I'm executing the code in Eclipse on Windows, where I execute RosRun and then pass the package as an argument. After executing the second listener I get the following from RosCore:

Jan 17, 2012 5:02:11 PM org.ros.internal.node.server.MasterServer start
INFO: Starting master server.
Jan 17, 2012 5:02:20 PM org.ros.internal.node.server.MasterServer registerPublisher
INFO: Registering publisher: PublisherIdentifier<SlaveIdentifier</talker, http://127.0.0.1:55060>, TopicIdentifier</chatter>>
Jan 17, 2012 5:02:20 PM org.ros.internal.node.server.MasterServer publisherUpdate
INFO: Publisher update: /chatter
Jan 17, 2012 5:02:20 PM org.ros.internal.node.server.MasterServer registerPublisher
INFO: Registering publisher: PublisherIdentifier<SlaveIdentifier</talker, http://127.0.0.1:55060>, TopicIdentifier</rosout>>
Jan 17, 2012 5:02:20 PM org.ros.internal.node.server.MasterServer publisherUpdate
INFO: Publisher update: /rosout
Jan 17, 2012 5:02:26 PM org.ros.internal.node.server.MasterServer registerPublisher
INFO: Registering publisher: PublisherIdentifier<SlaveIdentifier</Listener1, http://127.0.0.1:55070>, TopicIdentifier</rosout>>
Jan ...
(more)
2011-07-06 03:39:37 -0500 answered a question Openni rosmake failing on OSX

Replacing sed with GSed in OSX 10.6 appears to work for me in getting compilation going. I also had to execute: sudo port install libusb-devel +universal otherwise linking fails.