Skip to main content
The diagnostics dashboard is a page of the control panel. With axol serve running, open axol.almond.bot/diagnostics, or https://<axol-host>:8001/diagnostics on your network. It also works on a phone or tablet. The Hardware section at the top lists each device on CAN (Axol or Mantis, and Jelly’s wheels and lift), and lets you connect or disconnect each one.

Motor status

Each motor has a card with its status, temperature, bus voltage and position, updated once a second. Axol shows 8 motors per arm. Mantis shows the gripper (ID 8) on each side.
  • A card reads OK whether the motor is enabled or disabled.
  • A card turns red when the motor reports an error, such as over-temperature or lost communication, or doesn’t answer.
  • Click a card to see the motor’s details: model, firmware, control mode, gains and live readings.

Change a motor’s parameters

For a MyActuator motor, the card’s dialog has a Parameters tab next to Details. It shows the motor’s configuration in groups: Protect parameters, Plan parameters, Motor parameters and Motor information.
  1. Type a new value, or pick one from the list.
  2. Press Set or Enter. The value is saved to the motor’s flash, and the table reloads.
If the motor saved a different value from the one you typed, the row shows Motor saved … instead. Rows marked Not on this firmware aren’t supported by that motor. Rows with a lock (factory, calibration and CAN settings) stay locked until you turn on Edit protected parameters and confirm. The Parameters tab isn’t available while an operation, such as teleop, is using the robot.

Motor tools

The buttons above the motor cards run these commands: Mantis grippers calibrate themselves, so Mantis has no zeroing. To restore a saved configuration file, run motor.restore-config in a terminal.

Choose CAN adapters

CAN enable opens the adapter picker.
  1. Choose Axol or Mantis.
  2. Choose Both arms, Left only or Right only.
  3. Pick each side’s CAN interface from the detected list, or type its name. The defaults are can_alm_axol_l and can_alm_axol_r for Axol, and can_mantis_l and can_mantis_r for Mantis. A generic adapter such as can0 also works.
  4. Press Save & connect.
If the hub hasn’t been set up yet, the dashboard sets it up for you. If it can’t identify the hardware, run axol can.setup in a terminal. Every test and calibration run on the page uses this choice, and skips a side you didn’t select. The Axol choice is saved with the robot’s settings. The Mantis choice is used only by the dashboard, so it never changes the robot’s saved channels. In Mantis mode, the dashboard shows only the two grippers and runs tests on the grippers only. The lift commands are hidden. On the command line, add --target mantis to a command to use Mantis. To pick arms by hand, use --left-channel / --right-channel and --no-left / --no-right on two-arm commands, or --channel on single-motor tools. See can.enable.

Control loop and CAN timing

The Control loop & CAN timing panel shows how steadily commands reach each arm during teleop.
  1. Keep the diagnostics page open.
  2. Start axol teleop from the control panel or a terminal.
The graph starts when teleop’s control loop starts, after the IK solver is ready. It stops when teleop stops. The panel only listens to the bus and adds no traffic. Each arm’s card shows: The loop runs at 240 Hz (a 4.17 ms period) on the impedance controller, and 400 Hz (2.5 ms) on the position controller. A card shows 240 Hz clean (or 400 Hz clean) when all of these hold:
  • Command and feedback rates are within 2% of the target.
  • Command and feedback jitter are 0.5 ms or less.
  • Motor round trip is 3 ms or less.
  • At least 0.25 ms of headroom is left in each cycle.
  • No missed cycles and no lost feedback.
The chart below the cards switches between Loop rate, Jitter, Latency, CAN cycle, Max gap and Misses.

Live telemetry

The live chart streams the selected arm while the robot is connected. Choose Position, Velocity, Torque or Temp. Position, velocity and torque update 10 times a second, and temperature once a second.
  • Pick a time window from 30 s to 10 min. The chart keeps the last 10 minutes, so it fills in when you open the page.
  • Choose the arm and turn individual joints on or off.
  • Scroll to zoom and drag to pan. Press Go live to follow the newest data again.
  • Use the expand button to view the chart full screen. Press Esc to exit.
The chart keeps streaming while a test, tuning run or teleop session is using the robot, even one started from a terminal. It shows Bus in use, showing observed CAN traffic then. It goes quiet only when the running task isn’t moving the motors, for example while it waits at a prompt. After CAN setup resets the hub, the chart recovers on its own.

Tests

Each test is a card. Click it, set the options in the dialog, and press Run. The card shows the run’s state, the elapsed time and the latest output line. You get a notification when it finishes, and the full log is kept in Run history. The ROM and lift tests take over the CAN bus while they run. They drive the arms with the same controller as teleop. To check Mantis triggers against their grippers, run Teleoperation with Mantis selected. It needs only CAN.

Lift cycle

Enter how many cycles to run.
  1. The selected arms move their first shoulder joint to 90°, clear of the lift.
  2. The lift runs the full down and up cycles while the test checks that the arms hold their pose.
  3. When the lift is up and stopped, the first shoulder joint returns to 0°. The other joints hold where they started.
  4. The arm motors turn off.
The test uses the lift bus set by can.setup: can_alm_axol_c, or the wheel bus can_alm_axol_b if there is no separate lift adapter. You can enter another interface in the dialog.

When a test can start

A test that moves motors won’t start while one of its motors has a fault. Motors it doesn’t use don’t block it, so a one-arm run or a bench arm with some motors missing can still run. In the ROM test, a deselected motor that doesn’t answer is skipped. A deselected motor that answers with an error still blocks the run, because the run holds it in place.

Steps that need you

Some tests pause for you, for example to put an item in the gripper. The card then shows the instruction and a Continue button, such as “Position the item in the RIGHT gripper, then close it.” Nothing moves until you press Continue.

Helpers

The lift helpers appear only on Axol on Jelly. To restart or shut down the robot’s computer, use Restart or Shut down on the control panel’s Axol Host tile.

Tuning

The tuning workbench runs the tuning commands with every option on the page. Pick a tab, set the values, and press Run. Sine and step runs chart live while they run, and the full charts and scores appear when the run finishes. Gain fields (kp, kd, kd_host, kd_host_hz, kd_host_q) start at the joint’s current value: the defaults plus this robot’s calibration. That is what runs if you leave a field empty. Angles are in degrees. Gains are in Nm/rad and Nm·s/rad.

Sine and Step

  • kd_host_hz sets the center of the damping band. Aim it at the ring frequency that the step score reports.
  • kd_host_q sets the band’s width. Raise it to 2 or 3 when the center sits on a measured ring.
  • Holder wobble shows how far the other joints moved during the run. Above about 0.5°, part of the ring came from a neighboring joint, not the one under test.

Friction, gravity and factory

Gravity fixes the sag a joint shows when it holds still under load, which gain tuning can’t fix. Its chart shows measured torque against joint angle, with the model before and after the fit. On the Factory tab, leave Velocities empty to use the default slow speeds (1, 2, 3, 5, 8, 15 and 30 °/s). On the Friction tab, an empty field sweeps 7.2 to 72 °/s. A factory run takes about 1.5 hours.

Recorded motion

  • Gains: the table shows each joint’s current gains. Edit a cell to change it for this run only, on both arms. Clear a cell to go back to the configured value, or press Reset overrides to clear them all.
  • Controller: impedance runs the normal teleop controller at 240 Hz. position runs every joint on its motor’s own position loop at 400 Hz.
  • Controller per joint: with impedance, click a cell to put that joint on its motor’s position loop for this run. A joint already set to the motor loop in the configuration can’t be switched back here.
  • Run as IK: solves the motion through the IK solver, as teleop does, instead of replaying joint angles. The score then includes both IK and tracking error.
  • Inject noise and Filter stack: add network noise, IK noise or both, and turn teleop’s smoothing filters on or off. Run once with filters off and once with them on to see what the filters remove and how much lag they add.

Build motion and IK

Build motion takes a session recorded with axol teleop --teleop.record or axol gravity-comp --record. It saves a before-and-after run, so you can check the smoothed motion before you replay it. IK charts the target pose against the solved pose with the error in mm, the solve time for each step, and a per-joint jitter score. Solve time spikes show up as lurches in teleop.

Read the results

  • Error by joint shows one bar per joint for both arms, colored green, amber or red. Click a joint to jump to its chart.
  • Each joint’s chart shows commanded against actual position, with the error below.
  • The scores table has one row per joint: tracking error (RMS, in degrees), lag, 3 to 15 Hz jitter, ringing, torque chatter and buzz.
  • Buzz catches a joint you can hear. A healthy joint sits near 0.005°. An audible buzz is 2 to 5 times that.
Charts zoom and pan like the live chart. Double-click to reset the view.

Compare runs

Tick two runs of the same kind in Past runs. The charts overlay both runs (A in yellow, B in blue), and a table marks the better value of each score in green. Press Exit compare to go back. Runs are saved in ~/.almond/diagnostics/tuning/ on the robot’s computer, shared with the command line’s --save-run. Select or delete them in Past runs.

Run history

Every test run is kept with its command, options, duration, result, log and the telemetry recorded during the run. The list shows the newest first, 10 runs per page. Open a run to chart it with the same controls as the live chart. Clear deletes the history. The history is stored in ~/.almond/diagnostics/runs on the robot’s computer.