public UiPacketToRosMsgRedirector(DRCRobotModel robotModel, URI rosCoreURI, PacketCommunicator rosAPI_communicator, PacketRouter<PacketDestination> packetRouter, String namespace) { ROS_NAMESPACE = namespace; rosMainNode = new RosMainNode(rosCoreURI, ROS_NAMESPACE, true); this.nodeConfiguration = NodeConfiguration.newPrivate(); this.messageFactory = nodeConfiguration.getTopicMessageFactory(); this.publishers = new ArrayList<RosTopicPublisher<?>>(); packetRouter.setPacketRedirects(PacketDestination.CONTROLLER, PacketDestination.ROS_API); setupMsgTopics(rosAPI_communicator); rosMainNode.execute(); // rosAPI_communicator.attachGlobalListener(this); }
/** * Create NodeConfiguration according to ROS command-line and environment * specification. */ public NodeConfiguration build() { parseRemappingArguments(); // TODO(damonkohler): Add support for starting up a private node. NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(getHost()); nodeConfiguration.setParentResolver(buildParentResolver()); nodeConfiguration.setRosRoot(getRosRoot()); nodeConfiguration.setRosPackagePath(getRosPackagePath()); nodeConfiguration.setMasterUri(getMasterUri()); if (specialRemappings.containsKey(CommandLineVariables.NODE_NAME)) { nodeConfiguration.setNodeName(specialRemappings.get(CommandLineVariables.NODE_NAME)); } return nodeConfiguration; }
@Override public void execute(final NodeMain nodeMain, final NodeConfiguration nodeConfiguration, final Collection<NodeListener> nodeListeners) { // NOTE(damonkohler): To avoid a race condition, we have to make our copy // of the NodeConfiguration in the current thread. final NodeConfiguration nodeConfigurationCopy = NodeConfiguration.copyOf(nodeConfiguration); nodeConfigurationCopy.setDefaultNodeName(nodeMain.getDefaultNodeName()); Preconditions.checkNotNull(nodeConfigurationCopy.getNodeName(), "Node name not specified."); if (DEBUG) { log.info("Starting node: " + nodeConfigurationCopy.getNodeName()); } scheduledExecutorService.execute(new Runnable() { @Override public void run() { Collection<NodeListener> nodeListenersCopy = Lists.newArrayList(); nodeListenersCopy.add(new RegistrationListener()); nodeListenersCopy.add(nodeMain); if (nodeListeners != null) { nodeListenersCopy.addAll(nodeListeners); } // The new Node will call onStart(). Node node = nodeFactory.newNode(nodeConfigurationCopy, nodeListenersCopy); nodeMains.put(node, nodeMain); } }); }
public static NodeConfiguration createNodeConfiguration(URI master) { InetAddress listenAddress = getMyIP(master); NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(listenAddress.getHostAddress(), master); nodeConfiguration.setMasterUri(master); return nodeConfiguration; }
/** * Creates a new {@link NodeConfiguration} for a {@link Node} that is only * accessible on the local host. * * @param masterUri * the {@link URI} for the master that the {@link Node} will register * with * @return a new {@link NodeConfiguration} for a private {@link Node} */ public static NodeConfiguration newPrivate(URI masterUri) { NodeConfiguration configuration = new NodeConfiguration(); configuration.setXmlRpcBindAddress(BindAddress.newPrivate()); configuration.setXmlRpcAdvertiseAddressFactory(new PrivateAdvertiseAddressFactory()); configuration.setTcpRosBindAddress(BindAddress.newPrivate()); configuration.setTcpRosAdvertiseAddressFactory(new PrivateAdvertiseAddressFactory()); configuration.setMasterUri(masterUri); return configuration; }
this.nodeConfiguration = NodeConfiguration.copyOf(nodeConfiguration); this.nodeListeners = new ListenerGroup<NodeListener>(scheduledExecutorService); this.nodeListeners.addAll(nodeListeners); this.scheduledExecutorService = scheduledExecutorService; masterUri = nodeConfiguration.getMasterUri(); masterClient = new MasterClient(masterUri); topicParticipantManager = new TopicParticipantManager(); parameterManager = new ParameterManager(scheduledExecutorService); GraphName basename = nodeConfiguration.getNodeName(); NameResolver parentResolver = nodeConfiguration.getParentResolver(); nodeName = parentResolver.getNamespace().join(basename); resolver = new NodeNameResolver(nodeName, parentResolver); slaveServer = new SlaveServer(nodeName, nodeConfiguration.getTcpRosBindAddress(), nodeConfiguration.getTcpRosAdvertiseAddress(), nodeConfiguration.getXmlRpcBindAddress(), nodeConfiguration.getXmlRpcAdvertiseAddress(), masterClient, topicParticipantManager, serviceManager, parameterManager, scheduledExecutorService); slaveServer.start(); nodeConfiguration.getTopicMessageFactory(), scheduledExecutorService); subscriberFactory = new SubscriberFactory(nodeIdentifier, topicParticipantManager, scheduledExecutorService);
private NodeConfiguration() { MessageDefinitionProvider messageDefinitionProvider = new MessageDefinitionReflectionProvider(); setTopicDescriptionFactory(new TopicDescriptionFactory(messageDefinitionProvider)); setTopicMessageFactory(new DefaultMessageFactory(messageDefinitionProvider)); setServiceDescriptionFactory(new ServiceDescriptionFactory(messageDefinitionProvider)); setServiceRequestMessageFactory(new ServiceRequestMessageFactory(messageDefinitionProvider)); setServiceResponseMessageFactory(new ServiceResponseMessageFactory(messageDefinitionProvider)); setMessageSerializationFactory(new DefaultMessageSerializationFactory(messageDefinitionProvider)); setParentResolver(NameResolver.newRoot()); setTimeProvider(new WallTimeProvider()); }
loader = new CommandLineLoader(emptyArgv, env); NodeConfiguration nodeConfiguration = loader.build(); assertEquals(NodeConfiguration.DEFAULT_MASTER_URI, nodeConfiguration.getMasterUri()); loader = new CommandLineLoader(emptyArgv, env); nodeConfiguration = loader.build(); assertEquals(defaultMasterUri, nodeConfiguration.getMasterUri()); assertEquals(defaultRosRoot, nodeConfiguration.getRosRoot()); assertTrue(nodeConfiguration.getParentResolver().getNamespace().isRoot()); assertTrue(nodeConfiguration.getTcpRosAdvertiseAddress().isLoopbackAddress()); assertTrue(nodeConfiguration.getXmlRpcAdvertiseAddress().isLoopbackAddress()); assertEquals(defaultMasterUri, nodeConfiguration.getMasterUri()); assertEquals(defaultRosRoot, nodeConfiguration.getRosRoot()); assertEquals("192.168.0.1", nodeConfiguration.getTcpRosAdvertiseAddress().getHost()); assertEquals("192.168.0.1", nodeConfiguration.getXmlRpcAdvertiseAddress().getHost()); assertEquals(GraphName.of("/foo/bar"), nodeConfiguration.getParentResolver().getNamespace()); Assert.assertEquals(rosPackagePathList, nodeConfiguration.getRosPackagePath()); loader = new CommandLineLoader(emptyArgv, env); nodeConfiguration = loader.build(); assertEquals(canonical, nodeConfiguration.getParentResolver().getNamespace()); env = getDefaultEnv(); env.put(EnvironmentVariables.ROS_NAMESPACE, "baz/bar/"); loader = new CommandLineLoader(emptyArgv, env); nodeConfiguration = loader.build(); assertEquals(canonical, nodeConfiguration.getParentResolver().getNamespace());
assertEquals(null, nodeConfiguration.getNodeName()); List<String> args = Lists.newArrayList("Foo", "__name:=newname"); nodeConfiguration = new CommandLineLoader(args, env).build(); assertEquals("newname", nodeConfiguration.getNodeName().toString()); Lists.newArrayList("Foo", CommandLineVariables.ROS_MASTER_URI + ":=http://override:22622"); nodeConfiguration = new CommandLineLoader(args, env).build(); assertEquals(new URI("http://override:22622"), nodeConfiguration.getMasterUri()); assertEquals(new URI("http://override:22622"), nodeConfiguration.getMasterUri()); args = Lists.newArrayList("Foo", CommandLineVariables.ROS_NAMESPACE + ":=baz/bar"); nodeConfiguration = new CommandLineLoader(args, env).build(); assertEquals(canonical, nodeConfiguration.getParentResolver().getNamespace()); assertEquals(canonical, nodeConfiguration.getParentResolver().getNamespace()); assertEquals(canonical, nodeConfiguration.getParentResolver().getNamespace()); args = Lists.newArrayList("Foo", CommandLineVariables.ROS_IP + ":=192.168.0.2"); nodeConfiguration = new CommandLineLoader(args, env).build(); assertEquals("192.168.0.2", nodeConfiguration.getTcpRosAdvertiseAddress().getHost()); assertEquals("192.168.0.2", nodeConfiguration.getXmlRpcAdvertiseAddress().getHost()); CommandLineVariables.ROS_IP + ":=192.168.0.2"); nodeConfiguration = new CommandLineLoader(args, env).build(); assertEquals(new URI("http://override:22622"), nodeConfiguration.getMasterUri()); assertEquals("192.168.0.2", nodeConfiguration.getTcpRosAdvertiseAddress().getHost()); assertEquals("192.168.0.2", nodeConfiguration.getXmlRpcAdvertiseAddress().getHost());
/** * Creates a new {@link NodeConfiguration} for a {@link Node} that is only * accessible on the local host. * * @return a new {@link NodeConfiguration} for a private {@link Node} */ public static NodeConfiguration newPrivate() { return newPrivate(DEFAULT_MASTER_URI); }
/** * Creates a new {@link NodeConfiguration} for a publicly accessible * {@link Node}. * * @param host * the host that the {@link Node} will run on * @return a new {@link NodeConfiguration} for a publicly accessible * {@link Node} */ public static NodeConfiguration newPublic(String host) { return newPublic(host, DEFAULT_MASTER_URI); }
@Override public MessageFactory getTopicMessageFactory() { return nodeConfiguration.getTopicMessageFactory(); }
@Test public void testCreatePrivate() throws InterruptedException { checkNodeAddress(nodeConfiguration.getTcpRosAdvertiseAddress().getHost()); }
nodeConfiguration.getParentResolver().getRemappings(); nodeConfiguration = loader.build(); loader = new CommandLineLoader(args, env); nodeConfiguration = loader.build(); NameResolver resolver = nodeConfiguration.getParentResolver(); assertTrue(resolver.getRemappings().isEmpty()); NameResolver r = nodeConfiguration.getParentResolver(); GraphName n = r.resolve("name"); assertGraphNameEquals("/my/name", n);
@Test public void testResolveName() throws InterruptedException { final Holder<ConnectedNode> holder = Holder.newEmpty(); nodeConfiguration.setParentResolver(NameResolver.newFromNamespace("/ns1")); nodeMainExecutor.execute(new AbstractNodeMain() { @Override
/** * Creates a new {@link NodeConfiguration} for a publicly accessible * {@link Node}. * * @param host * the host that the {@link Node} will run on * @param masterUri * the {@link URI} for the master that the {@link Node} will register * with * @return a new {@link NodeConfiguration} for a publicly accessible * {@link Node} */ public static NodeConfiguration newPublic(String host, URI masterUri) { NodeConfiguration configuration = new NodeConfiguration(); configuration.setXmlRpcBindAddress(BindAddress.newPublic()); configuration.setXmlRpcAdvertiseAddressFactory(new PublicAdvertiseAddressFactory(host)); configuration.setTcpRosBindAddress(BindAddress.newPublic()); configuration.setTcpRosAdvertiseAddressFactory(new PublicAdvertiseAddressFactory(host)); configuration.setMasterUri(masterUri); return configuration; }
public static NodeConfiguration createNodeConfiguration(URI master) { InetAddress listenAddress = getMyIP(master); NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(listenAddress.getHostAddress(), master); nodeConfiguration.setMasterUri(master); return nodeConfiguration; }
@Before public void setUp() throws InterruptedException { rosCore = RosCore.newPrivate(); rosCore.start(); assertTrue(rosCore.awaitStart(1, TimeUnit.SECONDS)); nodeMainExecutor = DefaultNodeMainExecutor.newDefault(); nodeConfiguration = NodeConfiguration.newPrivate(rosCore.getUri()); }
private void checkNodeAddress(final String host) throws InterruptedException { final Holder<InetSocketAddress> holder = Holder.newEmpty(); NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(host, rosCore.getUri()); nodeMainExecutor.execute(new AbstractNodeMain() { @Override public GraphName getDefaultNodeName() { return GraphName.of("node"); } @Override public void onStart(ConnectedNode connectedNode) { holder.set(((DefaultNode) connectedNode).getAddress()); } }, nodeConfiguration); assertTrue(holder.await(1, TimeUnit.SECONDS)); assertTrue(holder.get().getPort() > 0); assertEquals(holder.get().getHostName(), host); }
public UiPacketToRosMsgRedirector(DRCRobotModel robotModel, URI rosCoreURI, PacketCommunicator rosAPI_communicator, PacketRouter<PacketDestination> packetRouter, String namespace) { ROS_NAMESPACE = namespace; rosMainNode = new RosMainNode(rosCoreURI, ROS_NAMESPACE, true); this.nodeConfiguration = NodeConfiguration.newPrivate(); this.messageFactory = nodeConfiguration.getTopicMessageFactory(); this.publishers = new ArrayList<RosTopicPublisher<?>>(); packetRouter.setPacketRedirects(PacketDestination.CONTROLLER, PacketDestination.ROS_API); setupMsgTopics(rosAPI_communicator); rosMainNode.execute(); // rosAPI_communicator.attachGlobalListener(this); }