Nautical Pea Maker

    @foxglove/ros2
    TypeScript icon, indicating that this package has built-in type declarations

    3.4.0 • Public • Published

    @foxglove/ros2

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

    npm version

    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,
        // log: console, // Enable this for verbose console debugging
      });
    
      await ros.start();
    
      // Create a message definition for the std_msgs/msg/String type
      const msgDefinition = parseMsgDef("string data", { ros2: true });
    
      // Subscribe to the /chatter topic
      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}]`);
      });
    
      // Listen for Ctrl+C to stop
      process.on("SIGINT", () => void shutdown(ros));
    
      // Wait for Ctrl+C
      process.stdin.resume();
    }
    
    async function shutdown(ros: RosNode) {
      await ros.shutdown();
      process.exit();
    }
    
    void main();

    Notes

    Receiving large (>256KB) messages not be possible with the default Linux networking receive buffer size of 256KB, depending on CPU speed / contention / network speed / many factors. Linux users should set the following sysctls:

    sudo sysctl -w net.core.rmem_max=26214400
    sudo sysctl -w net.core.rmem_default=26214400
    sudo sysctl -w net.ipv4.udp_mem=26214400
    

    Or permanently in /etc/sysctl.conf:

    net.core.rmem_max=26214400
    net.core.rmem_default=26214400
    net.ipv4.udp_mem=26214400
    

    Test

    yarn test

    License

    @foxglove/ros2 is licensed under MIT License.

    Releasing

    1. Run yarn version --[major|minor|patch] to bump version
    2. Run git push && git push --tags to push new tag
    3. GitHub Actions will take care of the rest

    Keywords

    none

    Install

    npm i @foxglove/ros2

    DownloadsWeekly Downloads

    229

    Version

    3.4.0

    License

    MIT

    Unpacked Size

    67.7 kB

    Total Files

    40

    Last publish

    Collaborators

    • foxglovebot
    • amacneil