Skip to content

Commit 32191cd

Browse files
Add namespace support for the new version of Rosbridge_suite
1 parent 16c44fa commit 32191cd

File tree

2 files changed

+26
-18
lines changed

2 files changed

+26
-18
lines changed

src/core/Param.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ export default class Param {
3636
get(callback, failedCallback) {
3737
var paramClient = new Service({
3838
ros: this.ros,
39-
name: 'rosapi/get_param',
39+
name: this.ros.namespace + 'rosapi/get_param',
4040
serviceType: 'rosapi/GetParam'
4141
});
4242

43-
var request = {name: this.name};
43+
var request = { name: this.name };
4444

4545
paramClient.callService(
4646
request,
@@ -69,7 +69,7 @@ export default class Param {
6969
set(value, callback, failedCallback) {
7070
var paramClient = new Service({
7171
ros: this.ros,
72-
name: 'rosapi/set_param',
72+
name: `${this.ros.namespace}rosapi/set_param`,
7373
serviceType: 'rosapi/SetParam'
7474
});
7575

@@ -89,7 +89,7 @@ export default class Param {
8989
delete(callback, failedCallback) {
9090
var paramClient = new Service({
9191
ros: this.ros,
92-
name: 'rosapi/delete_param',
92+
name: `${this.ros.namespace}rosapi/delete_param`,
9393
serviceType: 'rosapi/DeleteParam'
9494
});
9595

src/core/Ros.js

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,27 @@ export default class Ros extends EventEmitter {
2929
idCounter = 0;
3030
isConnected = false;
3131
groovyCompatibility = true;
32+
namespace = '';
3233
/**
3334
* @param {Object} [options]
3435
* @param {string} [options.url] - The WebSocket URL for rosbridge. Can be specified later with `connect`.
3536
* @param {boolean} [options.groovyCompatibility=true] - Don't use interfaces that changed after the last groovy release or rosbridge_suite and related tools.
3637
* @param {'websocket'|RTCPeerConnection} [options.transportLibrary='websocket'] - 'websocket', or an RTCPeerConnection instance controlling how the connection is created in `connect`.
3738
* @param {Object} [options.transportOptions={}] - The options to use when creating a connection. Currently only used if `transportLibrary` is RTCPeerConnection.
39+
* @param {string} [options.namespace = ""] - The namespace to use for internal ROS2 services. Defaults to an empty string. Must be the same as the namespace of rosbridge_suite.
3840
*/
3941
constructor(options) {
4042
super();
4143
options = options || {};
4244
this.transportLibrary = options.transportLibrary || 'websocket';
4345
this.transportOptions = options.transportOptions || {};
4446
this.groovyCompatibility = options.groovyCompatibility ?? true;
47+
this.namespace = options.namespace || '';
48+
49+
// Normalize namespace format: no leading slash, with trailing slash
50+
if (this.namespace) {
51+
this.namespace = this.namespace.replace(/^\//, '').replace(/\/?$/, '/');
52+
}
4553

4654
// begin by checking if a URL was given
4755
if (options.url) {
@@ -180,7 +188,7 @@ export default class Ros extends EventEmitter {
180188
/** @satisfies {Service<any, any>} */
181189
var getActionServers = new Service({
182190
ros: this,
183-
name: 'rosapi/action_servers',
191+
name: `${this.namespace}rosapi/action_servers`,
184192
serviceType: 'rosapi/GetActionServers'
185193
});
186194

@@ -220,7 +228,7 @@ export default class Ros extends EventEmitter {
220228
getTopics(callback, failedCallback) {
221229
var topicsClient = new Service({
222230
ros: this,
223-
name: 'rosapi/topics',
231+
name: `${this.namespace}rosapi/topics`,
224232
serviceType: 'rosapi/Topics'
225233
});
226234

@@ -259,7 +267,7 @@ export default class Ros extends EventEmitter {
259267
getTopicsForType(topicType, callback, failedCallback) {
260268
var topicsForTypeClient = new Service({
261269
ros: this,
262-
name: 'rosapi/topics_for_type',
270+
name: `${this.namespace}rosapi/topics_for_type`,
263271
serviceType: 'rosapi/TopicsForType'
264272
});
265273

@@ -299,7 +307,7 @@ export default class Ros extends EventEmitter {
299307
getServices(callback, failedCallback) {
300308
var servicesClient = new Service({
301309
ros: this,
302-
name: 'rosapi/services',
310+
name: `${this.namespace}rosapi/services`,
303311
serviceType: 'rosapi/Services'
304312
});
305313

@@ -338,7 +346,7 @@ export default class Ros extends EventEmitter {
338346
getServicesForType(serviceType, callback, failedCallback) {
339347
var servicesForTypeClient = new Service({
340348
ros: this,
341-
name: 'rosapi/services_for_type',
349+
name: `${this.namespace}rosapi/services_for_type`,
342350
serviceType: 'rosapi/ServicesForType'
343351
});
344352

@@ -380,7 +388,7 @@ export default class Ros extends EventEmitter {
380388
getServiceRequestDetails(type, callback, failedCallback) {
381389
var serviceTypeClient = new Service({
382390
ros: this,
383-
name: 'rosapi/service_request_details',
391+
name: `${this.namespace}rosapi/service_request_details`,
384392
serviceType: 'rosapi/ServiceRequestDetails'
385393
});
386394
var request = {
@@ -422,7 +430,7 @@ export default class Ros extends EventEmitter {
422430
/** @satisfies {Service<{},{typedefs: string[]}>} */
423431
var serviceTypeClient = new Service({
424432
ros: this,
425-
name: 'rosapi/service_response_details',
433+
name: `${this.namespace}rosapi/service_response_details`,
426434
serviceType: 'rosapi/ServiceResponseDetails'
427435
});
428436
var request = {
@@ -462,7 +470,7 @@ export default class Ros extends EventEmitter {
462470
getNodes(callback, failedCallback) {
463471
var nodesClient = new Service({
464472
ros: this,
465-
name: 'rosapi/nodes',
473+
name: `${this.namespace}rosapi/nodes`,
466474
serviceType: 'rosapi/Nodes'
467475
});
468476

@@ -522,7 +530,7 @@ export default class Ros extends EventEmitter {
522530
getNodeDetails(node, callback, failedCallback) {
523531
var nodesClient = new Service({
524532
ros: this,
525-
name: 'rosapi/node_details',
533+
name: `${this.namespace}rosapi/node_details`,
526534
serviceType: 'rosapi/NodeDetails'
527535
});
528536

@@ -563,7 +571,7 @@ export default class Ros extends EventEmitter {
563571
getParams(callback, failedCallback) {
564572
var paramsClient = new Service({
565573
ros: this,
566-
name: 'rosapi/get_param_names',
574+
name: `${this.namespace}rosapi/get_param_names`,
567575
serviceType: 'rosapi/GetParamNames'
568576
});
569577
var request = {};
@@ -601,7 +609,7 @@ export default class Ros extends EventEmitter {
601609
getTopicType(topic, callback, failedCallback) {
602610
var topicTypeClient = new Service({
603611
ros: this,
604-
name: 'rosapi/topic_type',
612+
name: `${this.namespace}rosapi/topic_type`,
605613
serviceType: 'rosapi/TopicType'
606614
});
607615
var request = {
@@ -642,7 +650,7 @@ export default class Ros extends EventEmitter {
642650
getServiceType(service, callback, failedCallback) {
643651
var serviceTypeClient = new Service({
644652
ros: this,
645-
name: 'rosapi/service_type',
653+
name: `${this.namespace}rosapi/service_type`,
646654
serviceType: 'rosapi/ServiceType'
647655
});
648656
var request = {
@@ -683,7 +691,7 @@ export default class Ros extends EventEmitter {
683691
getMessageDetails(message, callback, failedCallback) {
684692
var messageDetailClient = new Service({
685693
ros: this,
686-
name: 'rosapi/message_details',
694+
name: `${this.namespace}rosapi/message_details`,
687695
serviceType: 'rosapi/MessageDetails'
688696
});
689697
var request = {
@@ -775,7 +783,7 @@ export default class Ros extends EventEmitter {
775783
getTopicsAndRawTypes(callback, failedCallback) {
776784
var topicsAndRawTypesClient = new Service({
777785
ros: this,
778-
name: 'rosapi/topics_and_raw_types',
786+
name: `${this.namespace}rosapi/topics_and_raw_types`,
779787
serviceType: 'rosapi/TopicsAndRawTypes'
780788
});
781789

0 commit comments

Comments
 (0)