@foxglove/ros2
Standalone TypeScript implementation of the ROS 2 protocol built on @foxglove/rtps

Usage
A simple listener that is compatible with the ROS 2 "talker" example application.
import { parse as parseMsgDef } from "@foxglove/rosmsg";
import { toString as timeString } from "@foxglove/rostime";
import { RosNode } from "@foxglove/ros2";
import { getNetworkInterfaces, UdpSocketNode } from "@foxglove/ros2/nodejs";
async function main() {
const ros = new RosNode({
name: "listener",
udpSocketCreate: UdpSocketNode.Create,
getNetworkInterfaces,
});
await ros.start();
const msgDefinition = parseMsgDef("string data", { ros2: true });
const subscription = ros.subscribe({
topic: "/chatter",
dataType: "std_msgs/msg/String",
msgDefinition,
});
subscription.on("message", (timestamp, msg, _data, _publisher) => {
const strMsg = msg as { data: string };
console.log(`[INFO] [${timeString(timestamp)}] [listener]: I heard: [${strMsg.data}]`);
});
process.on("SIGINT", () => void shutdown(ros));
process.stdin.resume();
}
async function shutdown(ros: RosNode) {
await ros.shutdown();
process.exit();
}
void main();
Test
yarn test
License
@foxglove/ros2 is licensed under MIT License.
Releasing
- Run
yarn version --[major|minor|patch] to bump version
- Run
git push && git push --tags to push new tag
- GitHub Actions will take care of the rest