Service Definitions
Code generated by gennodejs for ROS Services contain both a request and a response.
my_package/srv/Foo.srv → my_package.srv.Foo my_package/srv/Foo.srv → my_package.srv.Foo.Request my_package/srv/Foo.srv → my_package.srv.Foo.Response
Providing Services
Services are advertised through the NodeHandle.
const AddTwoInts = rosnodejs.require('ros_tutorials/AddTwoInts'); rosnodejs.initNode('/test_node') .then((nh) => { const addTwoInts = (req, resp) => { resp.sum = req.a + req.b; return true; }; let service = nh.advertiseService('/add_two_ints', AddTwoInts, addTwoInts); });
Calling Services
ServiceClients can be created through the NodeHandle.
let serviceClient = nh.serviceClient('/add_two_ints', AddTwoInts);
When calling the service, simply provide your request message and a callback to handle the response.
let req = new AddTwoInts.Request(); req.a = 1; req.b = 2; serviceClient.call(req) .then((resp) => { console.log(resp); });
Wait for Service
The NodeHandle also provides an interface to wait for a service.
nh.waitForService('/add_two_ints') .then(() => { // call it, presumably });
When waiting for a service, you can provide an optional timeout argument that specifies a maximum amount of time (in milliseconds) to wait for. To help handle this case, the returned promise resolves with whether or not the service was available.
nh.waitForService('/add_two_ints', 1000) .then((available) => { if (available) { // as you were } });