Message generation

From Catkin

rosnodejs uses generated Node.js source code from msg, srv, and action files created by gennodejs. These messages are built with your packages automatically when running catkin_make in ROS Kinetic and later. The pattern for this looks similar to rospy's.

  • package_name/msg/Foo.msg → package_name.msg.Foo

Service files look similar

  • package_name/srv/Bar.srv → package_name.srv.Bar

These files are generated from the src directory of package_name. Message files are required through rosnodejs itself.

const std_msgs = rosnodejs.require('std_msgs');
const StringMsg = std_msgs.msg.String;

or

const SetBool = rosnodejs.require('std_srvs').srv.SetBool;

On the fly

rosnodejs also provides the ability to dynamically create message classes on the fly without the need to run catkin_make

rosnodejs.initNode('my_node',
                   { onTheFly: true });

These messages are required in the same way, but can not be required until after the initNode call has completed.

Pre-generated, Pre-Kinetic

To support users in ROS Indigo and earlier who want to use pre-generated messages, rosnodejs also provides the ability to generate message code.

rosnodejs.loadAllPackages();

Messages will be built into your devel workspace by default, though you can optionally specify a different destination if you prefer.

Message Initialization

Message fields are given default values, so you can directly assign values to embedded messages.

const msg = new geometry_msgs.msg.PoseStamped();
msg.header.frame_id = 'base';

Messages also accept arguments for fields if you prefer

const msg = new std_msgs.msg.String({ data: 'Hello' });

Note: if you provide a value for a complex field in the constructor for the message rosnodejs will assume you have provided a full, valid message for that field.

Wiki: rosnodejs/overview/messages (last edited 2017-09-06 14:49:03 by chris-smith)