npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@tteja/node-red-dashboard-2-robot-arm

v0.3.0

Published

Node-RED + FlowFuse Dashboard 2 robot arm: realistic UR5e URDF/STL viewer, teach pendant, optional ROS2 rosbridge. Palette: robot-arm, robot-arm-controller, ui-ur5e-arm, ui-ur5e-controller.

Readme

@tteja/node-red-dashboard-2-robot-arm

A Node-RED robot-arm node for a UR5e: a 3D view of the real URDF meshes, a teach pendant, and optional ROS 2 joint feedback. On a Dashboard 2 page the arm and the pendant sit side by side. You can also drive the arm from Inject or Function nodes without a dashboard.

Palette name: @tteja/node-red-dashboard-2-robot-arm. The @tteja scope is the name the Flow Library asks for on new packages. The dashboard-2 part is required so an existing Dashboard 2 install will show the arm and pendant on the page. Guide: https://github.com/t-teja/node-red-contrib-robot-arm#readme

Add it in Node-RED

  1. Open the editor menu → Manage palette → Install.
  2. Search for @tteja/node-red-dashboard-2-robot-arm and install it.
  3. For the on-page 3D view and pendant, also install @flowfuse/node-red-dashboard (Dashboard 2) if it is not already there.
  4. Restart Node-RED if the new nodes do not appear. They show up under robotics, and the two dashboard widgets under dashboard.

The robot-arm and robot-arm-controller nodes work without Dashboard 2. The ui-ur5e-arm and ui-ur5e-controller widgets need it.

The four nodes

| Node | What you use it for | |------|---------------------| | robot-arm | The arm. Holds the UR5e model, accepts joint commands, and publishes the current joint state. | | robot-arm-controller | A teach pendant on its own page. Wire its output into robot-arm. | | ui-ur5e-arm | Dashboard 2 widget. Shows the 3D arm for a robot-arm node you pick. | | ui-ur5e-controller | Dashboard 2 widget. Pendant for that same robot-arm node. No extra wire is required. |

 Inject / Function / rosbridge          Dashboard 2 page
            │                           ┌─ ui-ur5e-arm ────────┐
            ▼                           │       3D view         │
     ┌──────────────┐                   ├─ ui-ur5e-controller ─┤
     │  robot-arm   │◀── pendant ───────│    joint sliders      │
     └──────────────┘                   └───────────────────────┘

On robot-arm, choose the model:

| Preset | What you get | |--------|----------------| | ur5e | UR5e arm, official-style meshes. This is the default. | | ur5e-gripper | The same arm plus a simple two-finger gripper on the tool. |

Use it on a dashboard

This is the layout in example 05 Dashboard 2.

  1. Import that example (see Examples below).
  2. Deploy.
  3. Open the Dashboard page Robot Arm. With a normal Dashboard 2 install that is http://<your-node-red-host>:1880/dashboard/robot.
  4. The left panel is the 3D arm. The right panel is the pendant.

The base stays in the middle of the 3D panel, and the zoom fits the panel. You can orbit around the base. The pendant sliders, Home, and Freeze move that same arm.

If you already have a dashboard, you do not have to import the whole example. Add a robot-arm node, then add ui-ur5e-arm and ui-ur5e-controller to a page and, in each widget, select that robot-arm node.

Freeze is a soft stop in the UI. It is not a hardware emergency stop. See Safety.

Use it from a flow

Drop a robot-arm node on a tab and deploy. Anything you send to its input becomes the next joint command, and the output is the joint state after that command.

The node status shows a 3D view path, /robot-arm/view/<robot-node-id>. Open that on the Node-RED host to see the arm without Dashboard 2.

A separate robot-arm-controller node is the same pendant on its own page. Wire robot-arm-controller → robot-arm, deploy, and open the controller URL shown on that node (/robot-arm/controller/<id>). Example 02 is this wiring.

Examples

After the package is installed, the examples are in the editor:

Menu → Import → Examples → @tteja/node-red-dashboard-2-robot-arm

Import one, then deploy.

| Example | What to do with it | |---------|-------------------| | 01 Inject demo | Three Inject nodes: Home, Reach, and Wave. Click one and the arm moves. A debug node shows the joint state coming out of robot-arm. | | 02 Controller to robot | Pendant wired into the arm. Open the controller URL on the robot-arm-controller node and move the sliders. | | 03 Rosbridge live | robot-arm with rosbridge turned on, subscribed to /joint_states. Use this when a ROS 2 robot or simulator is publishing joint states. | | 04 Controller and ROS 2 | Pendant and rosbridge together. While the pendant is armed, its commands win for about 2 seconds over incoming /joint_states. Disarm the pendant to let ROS drive the view. | | 05 Dashboard 2 | A Dashboard page named Robot Arm with the 3D view and the pendant bound to one robot-arm node. Start here if you want the arm on a dashboard. |

Messages

Send any of these on the robot-arm input. The output is always the canonical object below.

Canonical command and state:

{
  "robot": "robot",
  "joints": {
    "shoulder_pan_joint": 0,
    "shoulder_lift_joint": -1.57,
    "elbow_joint": 1.57,
    "wrist_1_joint": -1.57,
    "wrist_2_joint": -1.57,
    "wrist_3_joint": 0
  },
  "unit": "rad",
  "source": "pendant",
  "ts": 1710000000000
}

Also accepted: a ROS JointState style { "name": [...], "position": [...] }, a flat map of joint name to number, or an array of numbers in the joint order above.

Why slider limits are 6.28 and 3.14

The pendant uses radians. A full circle is 2 × π ≈ 6.2832 rad = 360°. Half a circle is π ≈ 3.1416 rad = 180°.

| Joints | Slider range | Meaning | |--------|----------------|---------| | Base, Shoulder, Wrist 1, Wrist 2, Wrist 3 | −6.2832 … 6.2832 | One full turn either side of zero (±360°) | | Elbow | −3.1416 … 3.1416 | Half a turn either side of zero (±180°) |

These are the UR5e joint limits from the model, not an arbitrary slider size. Home on the pendant returns each joint to its home angle (straight-up style pose: shoulder −1.57 rad, elbow 1.57 rad, and so on). The number beside each slider is the current angle in radians.

ROS 2

Optional. On the robot PC or simulator:

ros2 launch rosbridge_server rosbridge_websocket_launch.xml

On the robot-arm node, enable rosbridge and set:

  • URL: ws://<robot-pc>:9090
  • Subscribe topic: /joint_states (sensor_msgs/JointState)
  • Publish topic: optional. When set, commands leaving this node are published there.

This node talks to rosbridge over WebSocket. It does not speak DDS itself. Nothing moves unless something publishes /joint_states or you send a command from the pendant or a flow.

When the pendant is armed, its updates are preferred over rosbridge for about 2 seconds. After that, the latest message wins.

Safety

Not SIL-rated. This is a viewer and a soft teach pendant. Freeze only stops commands inside this UI. Do not use it as the emergency stop or safety controller for a real arm.

License

MIT © 2026 Teja.

The UR5e meshes are BSD-3-Clause, Copyright Universal Robots A/S, from UniversalRobots/Universal_Robots_ROS2_Description. See models/ur5e/LICENSE. The gripper in the ur5e-gripper preset is a simple box model, not a Robotiq CAD model.