Skip to content

Commit 390c0fd

Browse files
committed
Cleaning up and fixing examples
- example2.js demonstrates how to use message and service handlers that are generated on-demand (i.e., not requiring gennodejs)
1 parent ecc4cf2 commit 390c0fd

File tree

8 files changed

+294
-234
lines changed

8 files changed

+294
-234
lines changed

example.js

Lines changed: 59 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,71 @@
11
'use strict';
22

33
let rosnodejs = require('./index.js');
4-
// const std_msgs = rosnodejs.require('std_msgs').msg;
5-
// const SetBool = rosnodejs.require('std_srvs').srv.SetBool;
4+
const std_msgs = rosnodejs.require('std_msgs').msg;
5+
const SetBool = rosnodejs.require('std_srvs').srv.SetBool;
66

7-
// aspirational:
8-
rosnodejs.use(['std_msgs/String'],
9-
['std_srvs/SetBool'], function() {
7+
rosnodejs.initNode('/my_node')
8+
.then((rosNode) => {
9+
// EXP 1) Service Server
10+
let service = rosNode.advertiseService({
11+
service: '/set_bool',
12+
type: 'std_srvs/SetBool'
13+
}, (req, resp) => {
14+
console.log('Handling request! ' + JSON.stringify(req));
15+
resp.success = !req.data;
16+
resp.message = 'Inverted!';
17+
return true;
18+
});
1019

11-
const msg = new (rosnodejs.message('std_msgs/String'))(
12-
{ data: "howdy" });
13-
// console.log(msg,
14-
// Object.getOwnPropertyNames(msg),
15-
// msg.md5,
16-
// msg.__proto__);
17-
18-
19-
rosnodejs.initNode('/my_node')
20-
.then((rosNode) => {
21-
// EXP 1) Service Server
22-
let service = rosNode.advertiseService({
23-
service: '/set_bool',
24-
type: 'std_srvs/SetBool'
25-
}, (req, resp) => {
26-
console.log('Handling request! ' + JSON.stringify(req));
27-
resp.success = !req.data;
28-
resp.message = 'Inverted!';
29-
return true;
20+
// EXP 2) Service Client
21+
let serviceClient = rosNode.serviceClient({
22+
service: '/set_bool',
23+
type: 'std_srvs/SetBool'
24+
});
25+
rosNode.waitForService(serviceClient.getService(), 2000)
26+
.then((available) => {
27+
if (available) {
28+
const request = new SetBool.Request();
29+
request.data = true;
30+
serviceClient.call(request, (resp) => {
31+
console.log('Service response ' + JSON.stringify(resp));
3032
});
33+
}
34+
});
3135

32-
// // EXP 2) Service Client
33-
setTimeout(function() {
34-
let serviceClient = rosNode.serviceClient({
35-
service: '/set_bool',
36-
type: 'std_srvs/SetBool'
37-
});
38-
rosNode.waitForService(serviceClient.getService(), 2000)
39-
.then((available) => {
40-
if (available) {
41-
console.log('Service available');
42-
// const request = new SetBool.Request();
43-
// request.data = true;
44-
// #HERE
45-
const request =
46-
new (rosnodejs.serviceRequest('std_srvs/SetBool'))({
47-
data: true });
48-
console.log("call service", request);
49-
serviceClient.call(request, (resp) => {
50-
console.log('Service response ' + JSON.stringify(resp));
51-
});
52-
} else {
53-
console.log('Service not available');
54-
}
55-
});
56-
}, 1000); // wait a second before calling our service
57-
58-
// EXP 3) Params
59-
rosNode.setParam('~junk', {'hi': 2}).then(() => {
60-
rosNode.getParam('~junk').then((val) => {
61-
console.log('Got Param!!! ' + JSON.stringify(val));
62-
});
63-
});
36+
// EXP 3) Params
37+
rosNode.setParam('~junk', {'hi': 2}).then(() => {
38+
rosNode.getParam('~junk').then((val) => { console.log('Got Param!!! ' + JSON.stringify(val)); });
39+
});
6440

65-
// // EXP 4) Publisher
66-
let pub = rosNode.advertise({
67-
topic: '/my_topic',
68-
type: 'std_msgs/String',
69-
queueSize: 1,
70-
latching: true,
71-
throttleMs: 9
72-
});
41+
// EXP 4) Publisher
42+
let pub = rosNode.advertise({
43+
topic: '/my_topic',
44+
type: 'std_msgs/String',
45+
queueSize: 1,
46+
latching: true,
47+
throttleMs: 9
48+
});
7349

74-
let msgStart = 'my message ';
75-
let iter = 0;
76-
// const msg = new std_msgs.String(); // already created above
77-
setInterval(() => {
78-
// console.log(".");
79-
msg.data = msgStart + iter
80-
pub.publish(msg);
81-
++iter;
82-
if (iter > 200) {
83-
iter = 0;
84-
}
85-
}, 5);
50+
let msgStart = 'my message ';
51+
let iter = 0;
52+
const msg = new std_msgs.String();
53+
setInterval(() => {
54+
msg.data = msgStart + iter
55+
pub.publish(msg);
56+
++iter;
57+
if (iter > 200) {
58+
iter = 0;
59+
}
60+
}, 5);
8661

87-
// EXP 5) Subscriber
88-
let sub = rosNode.subscribe({
89-
topic: '/my_topic',
90-
type: 'std_msgs/String',
91-
queueSize: 1,
92-
throttleMs: 1000},
93-
(data) => {
94-
console.log('SUB DATA ', data, data.data);
95-
});
62+
// EXP 5) Subscriber
63+
let sub = rosNode.subscribe({
64+
topic: '/my_topic',
65+
type: 'std_msgs/String',
66+
queueSize: 1,
67+
throttleMs: 1000},
68+
(data) => {
69+
console.log('SUB DATA ' + data.data);
9670
});
97-
9871
});
99-

example2.js

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
'use strict';
2+
3+
let rosnodejs = require('./index.js');
4+
// const std_msgs = rosnodejs.require('std_msgs').msg;
5+
// const SetBool = rosnodejs.require('std_srvs').srv.SetBool;
6+
7+
rosnodejs.use(['std_msgs/String'],
8+
['std_srvs/SetBool'], function() {
9+
10+
const msg = new (rosnodejs.message('std_msgs/String'))(
11+
{ data: "howdy" });
12+
13+
rosnodejs.initNode('/my_node')
14+
.then((rosNode) => {
15+
16+
// EXP 1) Service Server
17+
let service = rosNode.advertiseService({
18+
service: '/set_bool',
19+
type: 'std_srvs/SetBool'
20+
}, (req, resp) => {
21+
console.log('Handling request! ' + JSON.stringify(req));
22+
resp.success = !req.data;
23+
resp.message = 'Inverted!';
24+
return true;
25+
});
26+
27+
// EXP 2) Service Client
28+
setTimeout(function() {
29+
let serviceClient = rosNode.serviceClient({
30+
service: '/set_bool',
31+
type: 'std_srvs/SetBool'
32+
});
33+
rosNode.waitForService(serviceClient.getService(), 2000)
34+
.then((available) => {
35+
if (available) {
36+
const request =
37+
new (rosnodejs.serviceRequest('std_srvs/SetBool'))({
38+
data: false });
39+
serviceClient.call(request, (resp) => {
40+
console.log('Service response ' + JSON.stringify(resp));
41+
});
42+
} else {
43+
console.log('Service not available');
44+
}
45+
});
46+
}, 1000); // wait a second before calling our service
47+
48+
// EXP 3) Params
49+
rosNode.setParam('~junk', {'hi': 2}).then(() => {
50+
rosNode.getParam('~junk').then((val) => {
51+
console.log('Got Param!!! ' + JSON.stringify(val));
52+
});
53+
});
54+
55+
// // EXP 4) Publisher
56+
let pub = rosNode.advertise({
57+
topic: '/my_topic',
58+
type: 'std_msgs/String',
59+
queueSize: 1,
60+
latching: true,
61+
throttleMs: 9
62+
});
63+
64+
let msgStart = 'my message ';
65+
let iter = 0;
66+
setInterval(() => {
67+
msg.data = msgStart + iter
68+
pub.publish(msg);
69+
++iter;
70+
if (iter > 200) {
71+
iter = 0;
72+
}
73+
}, 5);
74+
75+
// EXP 5) Subscriber
76+
let sub = rosNode.subscribe({
77+
topic: '/my_topic',
78+
type: 'std_msgs/String',
79+
queueSize: 1,
80+
throttleMs: 1000},
81+
(data) => {
82+
console.log('SUB DATA ', data, data.data);
83+
});
84+
});
85+
86+
});
87+

lib/ServiceClient.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,10 @@ class ServiceClient extends EventEmitter {
7777
.then((resp) => {
7878
let serviceUri = resp[2];
7979
// connect to the service
80-
return this._connectToService(NetworkUtils.getAddressAndPortFromUri(serviceUri), request);
80+
return this._connectToService(
81+
NetworkUtils.getAddressAndPortFromUri(serviceUri),
82+
request
83+
);
8184
})
8285
.then((msg) => {
8386
responseCallback(msg);

lib/ServiceServer.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ class ServiceServer extends EventEmitter {
3939

4040
this._nodeHandle = nodeHandle;
4141

42-
this._log = log.createLogger({name: 'srvServer' + this.getService()});
42+
this._log = log.createLogger({
43+
name: 'srvServer' + this.getService()
44+
});
4345

4446
this._requestCallback = callback;
4547

utils/environment.js

Lines changed: 0 additions & 32 deletions
This file was deleted.

utils/fields.js

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -80,46 +80,47 @@ fields.parsePrimitive = function(fieldType, fieldValue) {
8080
return parsedValue;
8181
};
8282

83-
fields.serializePrimitive = function(fieldType, fieldValue, buffer, bufferOffset) {
84-
if (fieldType === 'bool') {
85-
buffer.writeUInt8(fieldValue, bufferOffset);
86-
}
87-
else if (fieldType === 'int8' || fieldType === 'byte') {
88-
buffer.writeInt8(fieldValue, bufferOffset);
89-
}
90-
else if (fieldType === 'uint8' || fieldType === 'char') {
91-
buffer.writeUInt8(fieldValue, bufferOffset);
92-
}
93-
else if (fieldType === 'int16') {
94-
buffer.writeInt16LE(fieldValue, bufferOffset);
95-
}
96-
else if (fieldType === 'uint16') {
97-
buffer.writeUInt16LE(fieldValue, bufferOffset);
98-
}
99-
else if (fieldType === 'int32') {
100-
buffer.writeInt32LE(fieldValue, bufferOffset);
101-
}
102-
else if (fieldType === 'uint32') {
103-
buffer.writeUInt32LE(fieldValue, bufferOffset);
104-
}
105-
else if (fieldType === 'int64') {
106-
throwUnsupportedInt64Exception();
107-
}
108-
else if (fieldType === 'uint64') {
109-
throwUnsupportedInt64Exception();
110-
}
111-
else if (fieldType === 'float32') {
112-
buffer.writeFloatLE(fieldValue, bufferOffset);
113-
}
114-
else if (fieldType === 'float64') {
115-
buffer.writeDoubleLE(fieldValue, bufferOffset);
116-
}
117-
else if (fieldType === 'string') {
118-
buffer.writeUInt32LE(fieldValue.length, bufferOffset);
119-
bufferOffset += 4;
120-
buffer.write(fieldValue, bufferOffset, 'ascii');
83+
fields.serializePrimitive =
84+
function(fieldType, fieldValue, buffer, bufferOffset) {
85+
if (fieldType === 'bool') {
86+
buffer.writeUInt8(fieldValue, bufferOffset);
87+
}
88+
else if (fieldType === 'int8' || fieldType === 'byte') {
89+
buffer.writeInt8(fieldValue, bufferOffset);
90+
}
91+
else if (fieldType === 'uint8' || fieldType === 'char') {
92+
buffer.writeUInt8(fieldValue, bufferOffset);
93+
}
94+
else if (fieldType === 'int16') {
95+
buffer.writeInt16LE(fieldValue, bufferOffset);
96+
}
97+
else if (fieldType === 'uint16') {
98+
buffer.writeUInt16LE(fieldValue, bufferOffset);
99+
}
100+
else if (fieldType === 'int32') {
101+
buffer.writeInt32LE(fieldValue, bufferOffset);
102+
}
103+
else if (fieldType === 'uint32') {
104+
buffer.writeUInt32LE(fieldValue, bufferOffset);
105+
}
106+
else if (fieldType === 'int64') {
107+
throwUnsupportedInt64Exception();
108+
}
109+
else if (fieldType === 'uint64') {
110+
throwUnsupportedInt64Exception();
111+
}
112+
else if (fieldType === 'float32') {
113+
buffer.writeFloatLE(fieldValue, bufferOffset);
114+
}
115+
else if (fieldType === 'float64') {
116+
buffer.writeDoubleLE(fieldValue, bufferOffset);
117+
}
118+
else if (fieldType === 'string') {
119+
buffer.writeUInt32LE(fieldValue.length, bufferOffset);
120+
bufferOffset += 4;
121+
buffer.write(fieldValue, bufferOffset, 'ascii');
122+
}
121123
}
122-
}
123124

124125
fields.deserializePrimitive = function(fieldType, buffer, bufferOffset) {
125126
var fieldValue = null;
@@ -158,7 +159,6 @@ fields.deserializePrimitive = function(fieldType, buffer, bufferOffset) {
158159
fieldValue = buffer.readDoubleLE(bufferOffset);
159160
}
160161
else if (fieldType === 'string') {
161-
// console.log("fields string", bufferOffset, buffer.toString("ascii"));
162162
var fieldLength = buffer.readUInt32LE(bufferOffset)
163163
, fieldStart = bufferOffset + 4
164164
, fieldEnd = fieldStart + fieldLength

0 commit comments

Comments
 (0)