Need help with rosnodejs?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

RethinkRobotics-opensource
151 Stars 66 Forks Apache License 2.0 142 Commits 16 Opened issues

Description

Client library for writing ROS nodes in JavaScript with nodejs

Services available

!
?

Need anything else?

Contributors list

rosnodejs Build Status

Install

npm install rosnodejs

Start a node

const rosnodejs = require('rosnodejs');
rosnodejs.initNode('/my_node')
.then(() => {
  // do stuff
});

Publish/Subscribe

const nh = rosnodejs.nh;
const sub = nh.subscribe('/chatter', 'std_msgs/String', (msg) => {
  console.log('Got msg on chatter: %j', msg);
});

const pub = nh.advertise('/chatter', 'std_msgs/String'); pub.publish({ data: "hi" });

Udp transport (Experimental)

const nh = rosnodejs.nh;
const sub = nh.subscribe('/chatter', 'std_msgs/String', (msg) => {
  console.log('Got msg on chatter: %j', msg);
}, {
  transports: ["TCPROS", "UDPROS"],  // specify transports, default ["TCPROS"]
  dgramSize: 1500   // optional: datagram packet size, default: 1500 bytes
});

const pub = nh.advertise('/chatter', 'std_msgs/String'); pub.publish({ data: "hi" });

Services

const service = nh.advertiseService('/add_two_ints', 'beginner_tutorials/AddTwoInts', (req, res) => {
  res.sum = req.a + req.b;
  return true;
});

const client = nh.serviceClient('/add_two_ints', 'beginner_tutorials/AddTwoInts'); client.call({a: 1, b: 2});

Params

nh.setParam('val', 2);
nh.getParam('val')
.then((val) => {
  // do stuff
});

Generating Messages

Messages can be generated in a number of ways depending on the versions of ROS and Node.js you're using. - catkin - works in ROS Kinetic and later for Node.js v6+.

sh
$ catkin_make
OR
$ catkin build
-
loadAllPackages()
- One-time "build" call available through
rosnodejs
for versions of ROS before Kinetic and Node.js v6+. Should be called separately and in advance of processes attempting to use messages.
js
const rosnodejs = require('rosnodejs');
rosnodejs.loadAllPackages();
- On the fly - all versions of ROS and Node.js 4.5+. When generating on the fly, messages can not be required until the node has initialized.
js
const rosnodejs = require('rosnodejs');
rosnodejs.initNode('my_node', { onTheFly: true }).then(() => {
  const stdMsgs = rosnodejs.require('std_msgs');
  ...
}

| |Pre-Kinetic|Kinetic & Later| |:---:|:---:|:---:| |Node.js >= v6|

loadAllPackages()
, on the fly|catkin,
loadAllPackages()
, on the fly| |Node.js < v6|on the fly|on the fly|

Using Messages

const sensorMsgs = rosnodejs.require('sensor_msgs');

const image = new sensorMsgs.msg.Image(); const temperature = new sensorMsgs.msg.Temperature({ temperature: 32 });

const SetCameraInfo = sensorMsgs.srv.SetCameraInfo; const setRequest = new SetCameraInfo.Request();

// messages can be used when advertising/subscribing const nh = rosnodejs.nh; const StringMsg = rosnodejs.require('std_msgs').msg.String; const sub = nh.subscribe('/chatter', StringMsg, (msg) => { ... }); const pub = nh.advertise('/chatter', StringMsg);

const AddTwoInts = rosnodejs.require('beginner_tutorials').srv.AddTwoInts; const service = nh.advertiseService('/add_two_ints', AddTwoInts, (req, res) => { ... }); const client = nh.serviceClient('/add_two_ints', AddTwoInts);

Actions (Experimental)

const nh = rosnodejs.nh;
const as = new rosnodejs.ActionServer({
  nh,
  type: 'turtle_actionlib/Shape',
  actionServer: '/turtle_shape'
});

as.on('goal', function (goal) { goal.setAccepted(); });

as.start();

const ac = new rosnodejs.ActionClient({ nh, type: 'turtle_actionlib/Shape', actionServer:'/turtle_shape' });

ac.sendGoal({edges: 3, radius: 1});

Run the turtlesim example

Start:

roscore
rosrun turtlesim turtlesim_node
rosrun turtle_actionlib shape_server

Then run

sh
node src/examples/turtle.js

or, if you are running an older version of node:

npm run compile
node dist/examples/turtle.js

Catkin-Like

Checkout

rosnodejs_examples
for a more catkin-inspired take on using

rosnodejs
.

Inspired By

rosnodejs
was inspired by other work that you can learn more about here - roscpp & rospy - Robots as web services - ROSBridge - roslibjs

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.