ROS
ROS utils for use in Transitive robot capabilities. Supports both ROS 1 (using rosnodejs) and ROS 2 (using rclnodejs). The respective classes ROS1 and ROS2 have a unified interface, so that switching between ROS releases is trivial as can be seen in the example below.
Install
npm i @transitive-sdk/utils-ros
Example
This example requires a running roscore for ROS 1.
const { ROSs, getForVersion } = require('@transitive-sdk/utils-ros');
const demo = async (version) => {
  const ros = getForVersion(version);
  await ros.init();
  const topic = '/utils_ros/test1';
  const type = version == 1 ? 'std_msgs/String' : 'std_msgs/msg/String';
  const interval = setInterval(() => {
    ros.publish(topic, type, {data: String(Date.now())});
  });
  const sub = ros.subscribe(topic, type, (msg) => {
    console.log('received', msg.data);
  });
};
demo(1); // run demo using ROS1
demo(2); // run demo using ROS2
ROS
Small convenient singleton class for interfacing with ROS, including some auxiliary functions that come in handy in capabilities. Based on rosnodejs.
callService
Call the given service of the given type with the given body (not required when type is "std_srvs/Empty").
Parameters
- serviceName
- type
- requestBody(optional, default- undefined)
createHeader
create a std_msgs/Header for the given frame_id and date
Parameters
- frame_id(optional, default- '')
- date(optional, default- new Date())
getAvailableTypes
Get all known message and service types, grouped by package.
getParam
Get the value of the given ROS parameter
Parameters
- param
getServices
Get available services (list of names).
getServiceType
Get type of a given service. Note that in ROS 1 this requires connecting to the service provider directly, and we don't want to poll all of them. So only use this on-demand.
Parameters
- service
getSubscribedTopics
Get topics that have subscribers
Parameters
- type(optional, default- undefined)
getTopics
Get all topic of a given type or all topics if no type is specified
Parameters
- type(optional, default- undefined)
getTypeTemplate
Given a package, category, and type, e.g., 'std_msgs', 'msg', and 'String', return a plain object representing that type, which can be used as a template for creating messages.
Parameters
- pkg
- category
- type
- response(optional, default- false)
init
Initialize ROS node. This needs to be called first.
Parameters
- suffix(optional, default- '')
publish
Publish the given message (json) on the names topic of type. Will advertise the topic if not yet advertised.
Parameters
- topic
- type
- message
- latching(optional, default- true)
setParam
Set the value of the given ROS parameter
Parameters
- param
- value
subscribe
Subscribe to the named topic of the named type. Each time a new message
is received the provided callback is called. Here options is an optional
object: { "throttleMs": throttle-in-milliseconds }.
Parameters
- topic
- type
- onMessage
- options(optional, default- {})
unsubscribe
Unsubscribe from topic
Parameters
- topic
ROS2
Small convenient singleton class for interfacing with ROS2, including some auxiliary functions that come in handy in capabilities. Based on rclnodejs.
callService
Call the given service of the given type with the given body (not required when type is "std_srvs/srv/Empty").
Parameters
- serviceName
- type
- request(optional, default- undefined)
createHeader
create a std_msgs/Header for the given frame_id and date
Parameters
- frame_id(optional, default- '')
- date(optional, default- new Date())
getAvailableTypes
Get all known message, service, and action types, grouped by package.
getParam
Get the named parameter. If node is not given, then from our own params.
Example:
await getParam('background_b', '/turtlesim')
Parameters
- param
- node(optional, default- undefined)
getServices
Get list of available services (list of names).
getServiceType
Get type of a given service.
Parameters
- service
getSubscribedTopics
Get topics that have subscribers
Parameters
- type(optional, default- undefined)
getTopics
Get all topic of a given type or all topics if no type is specified
Parameters
- type(optional, default- undefined)
getTypeTemplate
Given a package, category, and type, e.g., 'std_msgs', 'msg', and 'String', return a plain object representing that type, which can be used as a template for creating messages.
Parameters
- pkg
- category
- type
- response(optional, default- false)
init
Initialize ROS node. This needs to be called first.
Parameters
- suffix(optional, default- '')
publish
Publish the given message (json) on the names topic of type. Will advertise the topic if not yet advertised.
Parameters
- topic
- type
- message
- latching(optional, default- false)
setParam
Set parameter param to value, auto-detecting the type of value.
If the node argument is not given, it's applied to the current node params.
Example:
await setParam('background_b', 188, '/turtlesim')
Parameters
- param
- value
- node(optional, default- undefined)
subscribe
Subscribe to the named topic of the named type. Each time a new message
is received the provided callback is called. For available options see
https://robotwebtools.github.io/rclnodejs/docs/0.22.3/Node.html#createSubscription.
The default options.qos.reliability is best-effort.
The options object can contain: "throttleMs": throttle (in milliseconds).
Parameters
- topic
- type
- onMessage
- options(optional, default- {})
unsubscribe
Unsubscribe from topic
Parameters
- topic
getForVersion
Get the correct instance for the given ROS version (1 or 2).
Parameters
- version