Docs & Introductions

TV-box repurposing · robot open source

Getting-started reading for both projects: principles, workflow, modules and safety limits.
This page is an introduction only — no downloads; packages and source live on the project pages.

TV-Box Tutorialno flashing · side-load · reversible

The idea is not to replace Android. We keep the stock system and run an Ubuntu subsystem (chroot) under /data; services live inside it, while IPTV, remote and serial functions stay intact. Delete the subsystem to revert.

General workflow

  1. Check the model: an Android TV box (Android 4.4+, armv7 / arm64) that is rooted.
  2. Enable ADB: turn on network debugging (5555) in developer options; install adb on your computer.
  3. Connect: adb connect <box-ip>:5555, confirm with adb devices.
  4. Follow the kit guide: open the matching card on the TV Box page and follow its tutorial (one-click script or manual steps).
  5. Set the boot entry: make the kit the launcher / autostart so it comes up after reboot.
  6. Verify and revert: check the features; to revert, uninstall the app, re-enable disabled system apps and remove the subsystem directory.
⚠️ Risk boundary: we do not flash or touch system partitions — changes stay in the app layer and /data. Boxes have little storage and RAM; check free space first, and do not keep the only copy of important data on the box.

Kit tour

🖨️

Print server

Turn an old USB printer into a network printer: web/QR upload, IPP, AirPrint; driver matched by model.

  • CUPS
  • IPP
  • QR print
⬇️

Download box + NAS

aria2 downloads (magnet/BT/direct) + Samba share; external USB disk preferred, internal storage as fallback.

  • aria2
  • Samba
  • Hot-plug
📹

Surveillance NVR

USB camera live view + 30-second loop recording + remote viewing; optional motion detection, object detection and alerts.

  • MJPEG
  • Loop record
  • Alerts
🎮

Game console

8 native mini-games plus study/exam/tutorial modes; 1–9 players on one screen, phone as a gamepad.

  • Offline
  • Multiplayer
  • Phone pad
🖥️

Mini desktop

Native desktop + Firefox + Chinese input + LAN transfer + USB storage; enough for browsing, video and light office work.

  • Desktop
  • Browser
  • Transfer
🎤

KTV machine

Boots into the song-request screen; local/USB library + online search; karaoke lyrics; remote, mouse or phone control.

  • Local+online
  • Karaoke
  • QR
🛡️

Ad-block DNS

Box as a LAN DNS (AdGuard Home): block ads and trackers for every device with one setup.

  • DNS
  • Ad-block
  • Side-router
🧒

Kids PC

A simple desktop for primary-school kids: browser/files/settings, no password for settings, desktop web pages, no on-screen keyboard pop-up.

  • Kids
  • No password
  • Simple

Key concepts

chroot vs flashing

Flashing replaces the whole system (brick risk, loses stock features). chroot runs an Ubuntu subsystem beside the stock system; the stock system is untouched and you can delete the directory to revert.

Why is /data always tight?

Old boxes often have ~1 GB for /data, which fills up with a subsystem and big apps. /sdcard is a separate, usually larger partition; symlink caches/data there or add a USB disk.

How does autostart work?

A launcher/foreground app as HOME, or a service started from a boot script. The exact entry differs per model; see the kit page.

How to revert?

Uninstall the app/service, re-enable apps disabled with pm disable, then remove the subsystem and autostart script. Since boot/system partitions are untouched, no reflash is needed.

Ecovacs BaJie Robot Tutorial6-axis arm · control to training

Using the Ecovacs BaJie robot as the reference: a complete control and data path Jetson host → adb → chroot → ssh → ROS 2 lower board, running a 3D digital twin, console, vision/voice, grasping, data collection and training analysis. This tutorial covers principles and steps; source lives on the Robot page. More brands/models will be added.

Architecture

🖥️

Host (Jetson)

Console and 3D pages (:8790), joint bridge (:8796), mode service (:8795), two camera streams (:8799/:8800).

  • Web console
  • Joint bridge
  • Cameras
🔗

Robot link

adb to the robot upper board (5555) → chroot Ubuntu → ssh to the lower board → ROS 2 topics. Trajectories and streaming jog use this path.

  • adb
  • chroot
  • ssh
🦾

Lower board (ROS 2)

Publishes /joint_states, subscribes to /arm_controller/joint_trajectory; lift, gripper and head have their own scripts.

  • ROS 2
  • Trajectory
  • Jog
👁️

Vision & data

Head + wrist camera streams; collect episodes, annotate targets, record limit points, then analyse in the training dashboard.

  • Dual camera
  • Collect
  • Train

Quick start (steps)

  1. Prepare: host Linux + Python 3; lower board ROS 2 Humble; robot adb 5555 reachable.
  2. Edit config: in serve.sh set the directory, ADB, ROBOT_HOST, ROBOT_PW and LOWER_IP.
  3. Start services: bash serve.sh, open http://<jetson-ip>:8790/robot_home.html.
  4. Start lower board: copy lower/jogd there and run jtstream.py; confirm /joints has data.
  5. Validate unloaded: slow mode, small joint/lift/gripper moves; check directions and limits.
  6. Then use the flows: 3D teaching / grasping / collection / analysis / test plan as needed.

Module tour (13)

  • Control · Main console
    Dashboard, joint execution, lift and gripper.
  • Control · 3D arm
    Real meshes, drag teaching, head-fix, limit guard.
  • Control · Gripper
    Opening slider, close/open, live feedback.
  • Control · Voice
    Voice commands, TTS, microphone state.
  • Control · Mission
    Task command entry and status feedback.
  • Data · Analysis dashboard
    Quality metrics, Δp99, replay, HDF5.
  • Data · Head-fix collection
    Real/sim, dual cameras, episode marking.
  • Data · Limit database
    Critical tip angles, coverage, CSV export.
  • Data · Annotation
    Grasp objects and placement locations.
  • Test · Test plan
    Motion/calibration/perception/data/reliability.
  • Tools · Dance editor
    Keyframes, 3D preview, real playback.
  • Tools · Head camera
    percd live MJPEG (:8799).
  • Tools · Wrist camera
    percg live MJPEG (:8800).
  • Key concepts & safety

    Real mode / local mode

    Real mode by default. If the robot stays offline for ~10 s, the console switches to local mode (pages remain usable). In local mode, if adb 5555 becomes reachable and stable for a few seconds, it switches back automatically; a manual local mode never auto-returns.

    Why the “side swing A” first?

    When the upper arm is close to the column, extending or unfolding directly can hit it. Move to a side-swing pose with more clearance, confirm the gap, then go to the target. The system skips this step when the path is already safe.

    What is head-fix?

    Rotate the arm around a fixed tool-tip point while the tip position stays unchanged; the tool axis is limited relative to the start orientation so the wrist camera does not flip. Useful to look at one target from different angles.

    Why grasp from above?

    Approaching from the side or below can hit the table edge, push the object away and hurt camera localisation. Raise the lift column above the table first, move to a pre-grasp pose (≥ table + 12 cm), then approach top-down; keep fingertips at least 1 cm above the table.

    How does the data loop work?

    Collect episodes at fixed points → annotate grasp/placement → record tip limit points → inspect quality and replay in the dashboard → train → validate with the test plan. Each step has a page and a data format.

    3D page blank / black?

    The 3D page needs WebGL. On machines without hardware GL (some Chromium / remote desktops) use Firefox, or launch the browser with software-rendering flags; on Jetson desktop, Firefox is recommended.

    Packages and source are not here: TV-box kits are on the TV Box page; robot source is on the Robot page. This docs page covers principles and steps only — downloads and checksums stay on the project pages.