Skip to content
Mickael Gaillard edited this page Jun 11, 2017 · 6 revisions

How to write your first Java Node.

Create your package ROS2 for java.

make a folder in ROS2 workspace

mkdir -p src/my_workspace/my_package
cd src/my_workspace/my_package

create package descriptor package.xml with

<?xml version="1.0"?>
<package format="2">
  <name>my_package</name>
  <version>0.1.0</version>
  <description>Description of your Java package.</description>
  <maintainer email="you@domaine.tld">Firstname Lastname</maintainer>
  <license>Your license</license>

  <buildtool_depend>ament_cmake</buildtool_depend>
  <buildtool_depend>ament_cmake_export_jars</buildtool_depend>
  <buildtool_depend>ament_build_type_gradle</buildtool_depend>

  <buildtool_depend>rosidl_default_generators</buildtool_depend>
  <buildtool_depend>rosidl_generator_java</buildtool_depend>

  <build_depend>rcljava</build_depend>
  <build_depend>std_msgs</build_depend>

  <exec_depend>rcljava</exec_depend>
  <exec_depend>std_msgs</exec_depend>

  <export>
    <build_type>ament_gradle</build_type>
  </export>
</package>

create Gradle build.gradle with

plugins {
    id "org.ros2.rcljava" version "0.4.10"
}

apply plugin: 'org.ros2.rcljava'

repositories {
     jcenter()
}

dependencies {
    testCompile 'junit:junit:4.12'
}

ament {
    generateEclipse = true

    scripts {
        my_package_java {
            mainClassName = 'tld.domain.MyNode'
        }
    }
}

Add your sources code

mkdir -p src/main/java/tld/domain
cd src/main/java/tld/domain

and add your node source code MyNode.java

package tld.domain;

import org.ros2.rcljava.RCLJava;
import org.ros2.rcljava.node.Node;
import org.ros2.rcljava.node.topic.Publisher;
import std_msgs.msg.String;

public class MyNode {

    public static void main(String args[]) {
        // Initialize RCL
        RCLJava.rclJavaInit(args);

        // Let's create a Node
        Node node = RCLJava.createNode("my_package");

        String msg = new String();
        Publisher<String> publisher = node.<String>createPublisher(String.class, "my_topic");

        while(RCLJava.ok()) {
            msg.setData("Hello World");

            System.out.println("Publishing: \"" + msg.getData() + "\"");
            publisher.publish(msg);

            // Sleep a little bit between each message
            Thread.sleep(500);
        }

        publisher.dispose();
        node.dispose();
        RCLJava.shutdown();
    }
}

Build your package

from root workspace !

ament build --symlink-install --isolated --only-package my_package

Run your node

from root workspace !

. ./install_isolated/local_setup.sh
my_package_java

Et voila !

Clone this wiki locally