Readiness report
Annin Robotics AR4 Robot Arm · 2026-09-04 00:04 · complete · 19 searches, 14 pages fetched
Cybersecurity — software & network: Review before networking · 7 findings
Details in the Cybersecurity section of the report below.
Readiness: Annin Robotics AR4 Robot Arm
Verdict: Ready with caveats · 2026-09-03 · est. parts cost $830–$1,035 Cybersecurity — software & network: Review before networking
This is the cold check — no previous readiness report exists for this lab, so these figures establish the baseline for future drift comparison. Every electronic part in the bill of materials was found in stock at an authorized distributor or a mainstream retailer at an ordinary price; nothing is obsolete, end-of-life, or unobtainable. The caveats are about ordering the right thing rather than about availability. The Teensy 4.1 is no longer catalogued under any PJRC part number, and DigiKey's top hit for "TEENSY 4.1" is a $9.95 Ethernet accessory rather than the board — an easy and expensive mis-order. Three requirements the snapshot states (the E-stop's low-level contact rating, the servo's fit in the printed gripper pocket, and the limit-switch bracket hole pattern) are specified only in the offline assembly manuals, which are not in the uploaded materials, so they could not be checked against any candidate part. The six stepper motors are sold only as a vendor-designated package; individual motor part numbers and gear ratios were not checked.
The estimated cost covers the controller electronics and consumables checked here plus the StepperOnline motor package. It excludes the optional encoders, the aluminium/hardware kits, and 3D-printed parts — those are priced separately under Other dependencies.
Action required
| Part | Problem | Recommended action |
|---|---|---|
| PJRC Teensy 4.1 | Not an availability problem — an ordering trap. DigiKey's top result for "TEENSY 4.1" is 18615, "ETHERNET KIT FOR TEENSY 4.1", $9.95 — the connector accessory, not the controller board. PJRC's own part number (TEENSY41_NE) returns zero products at DigiKey and is listed by no ECIA-authorized distributor. | Order SparkFun 20359, "TEENSY 4.1 WITHOUT ETHERNET", $29.60 — DigiKey. Avoid 28369 and 28370: PJRC describes its lockable boards as "For commercial products and secure applications", which is the wrong choice for a lab that reflashes firmware repeatedly. |
| Emergency Stop Push Button | The snapshot requires dry contacts usable at 3.3 V DC, ≥ 10 mA. No listing in evidence states a minimum switching current or a low-level contact rating, and no product page was fetched. Many industrial contact blocks are specified for AC line loads and carry a minimum contact load. | Before ordering, check the chosen contact block's minimum switching current on its datasheet. Plentiful and cheap at $12.00–$67.52 either way — this is a spec check, not a sourcing problem. |
| Gripper servo, limit switches | Mechanical fit is unverified: the servo must fit the pocket in AR4-Servo-Gripper-CAD.zip, and the six limit switches must match the 3D-printed bracket hole pattern for the specific MK revision. Both dimensions live in the offline manuals and CAD archives, which are not in the uploaded materials. | Pull the bracket and pocket dimensions from the assembly manual for your revision and check them against the candidate before ordering six of anything. |
Cybersecurity — software & network
Review before networking — No advisories were found, but every component in the stack is unpinned or undeterminable, and the documented setup runs unverified downloads - including one installed as root - so the security state is unknown rather than clean.
| Component | Version | How known | Support status |
|---|---|---|---|
| Ubuntu Linux (ROS 2 host) | 24.04 | read from project (fetched/03-README.md: "Tested with ROS 2 Jazzy on Ubuntu 24.04") | supported until 2029-05-31 |
| Microsoft Windows (alternative HMI host) | not determined | not determined (Sources give only the family "Windows 10 / Windows 11 x64"; no feature-update release is stated anywhere.) | — |
| ROS 2 Jazzy Jalisco | jazzy | read from project (fetched/02-Dockerfile: "FROM ros:jazzy"; also fetched/03-README.md) | — |
| ar4_ros_driver (AR4 ROS 2 driver) | not determined | unpinned (fetched/03-README.md line 107 clones the default branch with no tag or commit SHA: "git clone https://github.com/Annin-Robotics/ar4_ros_driver.git") | — |
| ROS 2 stack packages declared by annin_ar4_driver (ros2_control, controller_manager, joint_trajectory_controller, MoveIt 2, rclcpp and 15 others) | not determined | unpinned (fetched/04-package.xml: 20 dependencies, 0 pinned (ROS package.xml carries no versions); README lines 142 and 157 install them with bare "sudo apt install -y") | — |
| AR4 HMI Python dependencies (requirements.txt) | not determined | unpinned (fetched/01-requirements.txt: 10 of 10 dependencies carry no constraint (inputs, matplotlib, opencv-contrib-python, opencv-python, pybind11, pyserial, pywin32, ttkbootstrap, ttkthemes, vtk)) | — |
| CPython (AR4 HMI runtime) | 3.12 | inferred (ar4hmi_README.md states a 3.11-3.12 range (per snapshot); a range is not a pin, so the upper bound was taken for the support lookup) | supported until 2028-10-31 |
| Arduino IDE (AppImage) | 2.3.6 | read from project (fetched/03-README.md line 249: wget https://downloads.arduino.cc/arduino-ide/arduino-ide_2.3.6_Linux_64bit.AppImage) | — |
| PJRC Teensyduino board support package | not determined | unpinned (Installed through the Arduino Boards Manager from the live index https://www.pjrc.com/teensy/package_teensy_index.json; no release pinned (snapshot)) | — |
| PJRC udev rules (00-teensy.rules) | not determined | unpinned (fetched/03-README.md line 347 fetches it live from https://www.pjrc.com/teensy/00-teensy.rules; the file is not versioned) | — |
| Bounce2 (Arduino switch debounce library) | not determined | unpinned (Installed via the Arduino IDE Library Manager with no version pinned (snapshot)) | — |
| AR4 Teensy 4.1 and Arduino Nano firmware sketches | not determined | not determined (The archives are named per release (v7.0, v2.0), but nothing fetched pins which sketch a given build installs; the ROS repo ships annin_ar4_firmware at branch HEAD) | — |
| AR4-MK3 Control Software (AR4 HMI desktop application) | not determined | not determined (The lab's own release numbers (6.3.1, 7.0) are product releases, not a checkable software version; the ar4-hmi repository default branch pins nothing) | — |
| rocker (OSRF Docker wrapper, optional) | not determined | unpinned (fetched/03-README.md line 400 links https://github.com/osrf/rocker with no version stated) | — |
| Component | Finding | Severity | Fix available? |
|---|---|---|---|
| AR4 HMI Python dependencies (requirements.txt) | Dependencies unpinned: 10 of 10 in requirements.txt, so the HMI installs whatever version of pyserial, OpenCV, VTK and matplotlib is current on the day and the software students actually run has no checkable security state. | posture | Mitigation only - pin versions / use the lockfile |
| ar4_ros_driver (AR4 ROS 2 driver) | The driver is installed by cloning a branch at HEAD with no tag or commit, and the shipped Dockerfile clones a different GitHub account (ycheng517/ar4_ros_driver) also at HEAD, so the code a student builds is whatever those repositories contain at build time. | posture | Mitigation only - clone a specific tag or commit SHA and record it in the lab handout |
| Arduino IDE (AppImage) | The documented install downloads the Arduino IDE AppImage with wget and makes it executable with no checksum or signature verification step anywhere in the procedure. | posture | Mitigation only - verify the download against Arduino's published checksum before chmod +x |
| Arduino IDE (AppImage) | The IDE is launched with its application sandbox switched off (--no-sandbox), and the desktop launcher entry the instructions create bakes that flag in permanently. | posture | Mitigation only - launch without --no-sandbox, or keep the flashing machine off shared coursework |
| PJRC udev rules (00-teensy.rules) | The setup downloads a device-rules file over the network and copies it straight into /etc/udev/rules.d/ with root privileges and no verification, so whatever that URL serves that day becomes a root-level device rule on the lab PC. | posture | Mitigation only - read the downloaded rules file before sudo cp, and ship a known-good copy with the course materials |
| rocker (OSRF Docker wrapper, optional) | The optional container workflow forwards the host's SSH credentials and X11 display into the container (rocker --ssh --x11), so code running inside it can use the operator's SSH keys and reach the host display. | posture | Mitigation only - drop --ssh unless a build step genuinely needs it |
| ROS 2 stack packages declared by annin_ar4_driver (ros2_control, controller_manager, joint_trajectory_controller, MoveIt 2, rclcpp and 15 others) | Dependencies unpinned: 20 of 20 in annin_ar4_driver/package.xml, and the documented setup installs the control and motion-planning stack with bare apt commands, so two lab machines built weeks apart run different code and neither version can be checked for known issues. | posture | Mitigation only - record the installed package versions with the lab image (apt list --installed) so a rebuild is reproducible |
What this means for your lab
Nothing in this check turned up a known vulnerability, but that is mostly because almost nothing here has a version anyone can check - it is not a clean bill of health. The arm talks to the PC over USB cables rather than the network, and the lab's documentation describes no login service, open port or default password, so there is no obvious way for someone else on the campus network to reach the robot directly. The real exposure is in how the software gets installed. The setup instructions download the Arduino IDE and a system device-rules file straight off the internet and use them without checking that the files are what they claim to be - one of them is copied in with administrator rights, and the IDE is deliberately run with its own safety sandbox switched off. The driver code is likewise pulled fresh from GitHub at build time, from two different accounts, with no fixed version. Anyone able to tamper with those downloads would be running their code on your lab PC. Practical steps: build the lab PC once and write down exactly which versions you installed; check the Arduino IDE download against Arduino's published checksum; open the Teensy rules file and read it before copying it in as administrator; and if you use the optional Docker setup, leave out the option that hands your SSH keys to the container. If you plan to run the ROS 2 software across more than one machine, raise it with campus IT and put those machines on their own network segment first - this check found nothing that tells us how that traffic is protected, and unknown is not the same as safe.
Not checked
- Microsoft Windows 10 / 11 host: The sources name only the family, and endoflife.date needs a feature-update cycle (its Windows cycles are of the form 11-24h2-w, 10-22h2); lookups on both '11' and '10' returned no cycle match, so support status is unknown.
- ROS 2 Jazzy Jalisco: endoflife.date's 'ros' product lists only ROS 1 cycles (noetic, melodic, lunar, kinetic), so there is no ROS 2 cycle to match Jazzy against.
- AR4 HMI Python dependencies (10 packages): All 10 are unpinned; OSV needs an exact version, so none could be checked.
- ROS 2 stack packages from annin_ar4_driver/package.xml (20): ROS package.xml carries no versions and the README installs them with bare apt, so there is no exact version to check.
- Arduino IDE 2.3.6: Not checked: no package named 'arduino-ide' exists in the npm registry, and no advisory database covers the Arduino IDE desktop application under that name.
- PJRC Teensyduino board support package: Installed from a live board-manager index with no release pinned, and vendor board packages have no vulnerability database.
- Bounce2 (Arduino library): Arduino libraries have no vulnerability database, and no version is pinned.
- AR4 Teensy 4.1 and Arduino Nano firmware sketches: Vendor firmware with no public vulnerability tracking, and the installed sketch version is not pinned by the repository.
- AR4-MK3 Control Software (AR4 HMI desktop application): Custom vendor application with no advisory database; its release numbers are not checkable software versions.
- wmctrl and libfuse2t64: Unpinned Ubuntu system packages; the version is whatever the OS installs on the day.
- rocker (OSRF Docker wrapper): Unpinned tool with no version stated in the documentation.
- arduino-ide 2.3.6: no package by this name in the registry
- windows 11: support status: version matches no release cycle on endoflife.date
- ros jazzy: support status: version matches no release cycle on endoflife.date
Parts
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| PJRC Teensy 4.1 (qty 1) | 42-pin DIP breakout, 0.1" pitch; 3.3 V I/O, not 5 V tolerant | Active — order as SparkFun 20359 | 860 | $29.60 | DigiKey (SparkFun Electronics) |
| — Ethernet kit variant, do NOT order as the board | Accessory | Active | 1733 | $9.95 | DigiKey (SparkFun 18615) |
| — lockable variant, avoid for a teaching lab | "TEENSY 4.1 WITH COPY PROTECTION" | Active | 650 | $31.50 | DigiKey (SparkFun 28369) |
| — lockable variant, avoid for a teaching lab | "TEENSY 4.1 WITHOUT ETHERNET WITH …" (DigiKey description truncated; trailing words not in evidence) | Active | 587 | $29.50 | DigiKey (SparkFun 28370) |
| Arduino Nano A000005 (qty 1) | 30-pin DIP module, 0.1" pitch, ATmega328P, 5 V logic | Active | 3498 | $25.70 | DigiKey; also Mouser $22.53 (stock 7195), 7 authorized distributors with stock |
| Emergency Stop Push Button (qty 1) | Panel-mount latching mushroom, NC/NO dry contacts | Available at retail; contact rating not verified | — | $12.00–$67.52 | AutomationDirect 22 mm $12.00; RS PRO $26.67 / $34.42; Eaton M22-PVT $44.77; IDEC XW1E-BV422M-R $51.44 and XW1E-BV413M-R $52.81 (Mouser); Schneider XB4BT842 $67.52 (Grainger) |
| Joint Homing Limit Switches (qty 6) | Subminiature snap-action, lever or roller lever, 2-hole chassis mount | Available at retail; bracket fit not verified | — | $2.51–$20.00 each (~$15–$103 for six) | Pololu SPDT 5 A, 16.3 mm roller lever $2.51; goBILDA 2-pack $2.99; Grainger $3.07; Philmore $3.60; Honeywell V7 $4.71 (DigiKey); Honeywell 311SX5-T $17.23 |
| Position Encoders AMT102-V (optional, up to 6) | CUI AMT modular capacitive encoder kit, 3.3 V or 5 V, SPI/quadrature | Active | 3774 | $34.23 each (~$205 for six) | DigiKey — Same Sky (formerly CUI Devices) |
| End-Effector Gripper Servo (qty 1) | Positional hobby servo, 4.8–6.0 V, 50 Hz PWM, metal gear | Available at retail; pocket fit not verified | — | $18.99–$43.99 | Hiwonder LD-25MG 25 kg $18.99; SF3218MG 20 kg $18.58 (RobotShop); Hitec HS-645MG $43.99; Adafruit micro servo $11.95. Hitec HSR-1425CR $21.74 is continuous-rotation — not suitable |
| Primary Controller USB Cable (qty 1) | USB 2.0 Type-A to Micro-B, data-capable | Readily available | — | $5.99–$13.99 | Target 5 ft $5.99; Micro Center Inland $5.99; Best Buy essentials charge-and-sync $6.99 / $7.99; Monoprice Select $9.26. Power-only charging cables will fail |
| Gripper Controller USB Cable (qty 1) | USB 2.0 Type-A to Mini-B (or Type-C on newer Nano variants), data-capable | Readily available | — | $8.11 | DigiKey "USB 2.0 Certified 480 Mbps Type A to Mini-B/5-Pin" $8.11 — the only listing in evidence that certifies the data rate. Cheaper: Monoprice $1.43, Micro Center $2.99, Cable Matters $5.99 |
| 6-Axis Stepper Motors + drivers + PSU (qty 6 motors, J1–J6) | NEMA 17 / 23 / 34 hybrid bipolar, 1.5–4.0 A per phase, external 24 V DC bus | Available only as a vendor-designated package; per-motor part numbers not checked | not verified | $729.81 | "Complete AR4 MK3, MK4 & MK5 stepper-motor, driver & power supply package — factory direct from Stepperonline" (listing sourced to Annin Robotics) |
Substitutes
None needed.
Other dependencies
- 3D-printed structural parts (AR4-MK5/MK4/MK3-3D-Print-Files.zip, structural components, covers and spacers, misc, servo gripper CAD, travel-track CAD): fabrication dependency. If the department does not print in-house, a ready-made AR4 MK5 Robot 3D Printed Parts Set is $299.98 (white, lavender, gray and red all list at the same price). Print parameters — layer height, infill, PETG/ABS/PLA+ — are in the manual PDFs: not checked.
- Custom PCBs: none required. The materials contain no Gerber, Eagle or KiCad files; both controllers are commercial off-the-shelf boards wired to external drivers.
- Annin Robotics kits (the vendor's intended purchase route, prices from the same shopping search): AR4 MK5 Robot Combo Kit $1,189.00; AR4 MK5 Hardware Kit $319.00; AR4 MK5 Electrical Parts Kit $229.00.
- Annin Robotics resource portal and download host (www.anninrobotics.com, anninrobotics.com/wp-content/uploads/): live — the kits page was fetched successfully this run. It states plainly that the vendor does not sell motors and that the project is two purchases: the Annin combo kit, and the motors and drivers package direct from StepperOnline. Individual manual, CAD and firmware archive URLs were not fetched: not checked.
- StepperOnline AR4 package product page: could not be fetched this run (blocked, timeout, or gone), so live stock and the seller's own price are unverified. Reach it through the link on the Annin FAQ page.
- PJRC (www.pjrc.com/store/teensy41.html): live, fetched successfully. It confirms SparkFun now manufactures Teensy products, and restates the board's 3.3 V limit: "Teensy 4.1 pins accept 0 to 3.3V signals. The pins are not 5V tolerant."
- GitHub repositories (Annin-Robotics/ar4_ros_driver and Annin-Robotics/ar4-hmi): both live on branch
main, listed successfully this run. - Offline assembly manuals (AR4-MK5-Robot-Manul-1.1.pdf and siblings): indexed by the project but not present as text in the uploaded materials. Every mechanical dimension this check wanted to verify — bracket hole spacing, servo pocket, motor part numbers, gear ratios — lives in them: not checked.
Watch list
- SparkFun 20359 (Teensy 4.1) — effectively single-distributor. The ECIA record lists DigiKey as the only stocking distributor (860 units), with supply-chain risk rated Low-Med. The snapshot allows no substitute: the firmware depends on Teensy 4.1 pin assignments, interval timers and RAM. If that one warehouse empties, the lab stops.
- The stepper motor package — a single supplier relationship, not a catalogue part. The vendor's own page routes all motor purchases to StepperOnline, and this check could not read that page directly. If the partnership lapses, rebuilding the motor BOM requires the offline manuals.
- Same Sky AMT102-V — healthy today (Active, 3774 in stock), but note the manufacturer renamed from CUI Devices to Same Sky; search under both names at the next check so a rename is not mistaken for a discontinuation.
- Arduino Nano A000005 — no risk signal today (Active, 3498 at DigiKey, 7 authorized distributors with stock), but the classic ATmega328P Nano is a long-lived board whose retail variants shift toward USB-C. Confirm the connector type when reordering, and re-match the Mini-B cable to it.
- Retail commodity lines (E-stop, limit switches, servo, cables) — these have no fixed part number, so drift here shows up as the specific model vanishing rather than as a price move. Record whichever model is actually bought so the next check has a real baseline.