A modern, TUI-themed web interface for controlling robots with real-time joint manipulation and immersive 3D visualization.
Lucy Control Panel is a comprehensive web-based control system designed specifically for robots. Built with React and Three.js, it provides an intuitive terminal-style interface that allows users to control individual robot joints, save/load poses, and visualize the robot in real-time 3D.
The application features a distinctive green-on-black cyberpunk aesthetic reminiscent of classic terminal interfaces, making robot control both functional and visually engaging. Whether you're programming complex movements or fine-tuning individual joints, Lucy Control Panel provides the tools needed for precise robot manipulation.
- ๐ฎ Real-time Joint Control - Individual control of all robot joints with precision sliders and input fields
- ๐ฏ URDF Parser - Automatic parsing of InMoov URDF files to extract joint configurations and constraints
- ๐พ Pose Management - Save, load, and manage multiple robot poses with custom names
- ๐ Drag & Drop Categories - Reorganize joint categories (Head, Arms, Torso, etc.) via intuitive drag-and-drop
- ๐ Unit Conversion - Toggle between degrees and radians for joint angle display
- ๐ค 3D Robot Visualization - Real-time 3D rendering of robot meshes with STL support
- โ๏ธ Visual Controls - Wireframe mode, grid display, transparency adjustment, and camera controls
- ๐จ Cyberpunk UI - Terminal-inspired interface with signature green glow effects
- ๐ฑ Responsive Design - Works seamlessly across desktop and mobile devices
- ๐ Connection Management - Visual connection status and control interface
- ๐ Secure Authentication - Optional username and password protection with MD5 encryption
- ๐ Custom ROS Bridge URL - Configurable ROS Bridge connection with persistent settings
| Tool | Required version | Notes |
|---|---|---|
| Node.js | โฅ 22.0.0 | camera-controls requires Node 22+ |
| Yarn | 1.x (classic) | npm install -g yarn |
Quick Node upgrade with nvm
If you have Node < 22 (e.g. the Ubuntu 22.04 default 18.x), install nvm and switch:
# Install nvm (skip if already installed) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash source ~/.bashrc # or ~/.zshrc # Install and activate Node 22 nvm install 22 nvm use 22 # or: nvm use (auto-reads .nvmrc) # Verify node --version # should print v22.x.xA
.nvmrcfile at the project root pins the version โ runningnvm usefrom the directory is sufficient on future sessions.
# 1. Clone the repository
git clone https://github.com/sentience-robotics/lucy_control_panel.git
cd lucy_control_panel
# 2. Switch to the required Node version (requires nvm)
nvm use
# 3. Install dependencies
yarn install
# 4. Copy the example environment file and fill in your values
cp .env.example .envSee the Configuration section below for all available environment variables.
Starts the Vite dev server with hot-module replacement.
yarn devThe app is available at http://localhost:3000 by default (or the port set in VITE_PORT).
# Full build (TypeScript type-check + Vite bundle)
yarn build
# Quick build (Vite only, skips tsc)
yarn quickbuild
# Preview the production bundle locally
yarn previewRequired when the robot's ROS Bridge runs over HTTPS / WSS:
cd certs && ./generate_certificate.sh && cd ..Then set in .env:
VITE_HTTPS=true
VITE_SSL_CERT_PATH=./certs/cert.pem
VITE_SSL_KEY_PATH=./certs/key.pemCreate a .env file in the project root to configure the application:
# Authentication (both required for password protection)
VITE_LOCAL_USERNAME=admin
VITE_LOCAL_PASSWORD=5d41402abc4b2a76b9719d911017c592
VITE_PORT=3000
VITE_OVERRIDE_ROS_BRIDGE_SERVER_URL=https://100.100.100.100:5000/rosbridge
VITE_ENABLE_LOGS=true
# Hardware YAML editor (`/configuration`): header shows `robot_name` from loaded YAML (via ROS config/get).- Username: Set
VITE_LOCAL_USERNAMEto your desired username - Password: Set
VITE_LOCAL_PASSWORDto the MD5 hash of your password- Generate MD5 hash:
echo -n "yourpassword" | md5sum - Example: Password "lucy123" โ MD5 hash "5d41402abc4b2a76b9719d911017c592"
- Generate MD5 hash:
Note: If either VITE_LOCAL_USERNAME or VITE_LOCAL_PASSWORD is not set, the application will run without authentication.
For more details on creation processes, troubleshooting, and other guidance, visit the Sentience Robotics documentation.
We value the participation of each member of our community and are committed to ensuring that every interaction is respectful and productive. To foster a positive environment, we ask you to read and adhere to our Code of Conduct.
By participating in this project, you agree to uphold this code in all your interactions, both online and offline. Let's work together to maintain a welcoming and inclusive community for everyone.
If you encounter any issues or have questions regarding the Code of Conduct, please contact us at contact@sentience-robotics.fr.
Thank you for being a part of our community!
To find out more on how you can contribute to the project, please check our CONTRIBUTING.md
- Original project code/files: GNU GPL V3 License
- InMoov-derived files: CC BY-NC 4.0 (as specified under)
See the LICENSE file for details.
Parts of this project that are derived from InMoov files (including Blender models, CAD files, and STL files) are based on the original work by Gael Langevin.
Original Work: InMoov by Gael Langevin
License: Creative Commons Attribution-NonCommercial (CC BY-NC)
Source: http://inmoov.fr/
Applies to: Blender files, CAD files, STL files, and other 3D models derived from InMoov
- ๐ InMoov Project โ Original design by Gael Langevin
- ๐ All contributors to the InMoov community
- ๐ React Three Fiber โ 3D rendering capabilities
- ๐ Three.js โ WebGL 3D graphics library
- ๐ง Email: contact@sentience-robotics.fr
- ๐ GitHub Organization: Sentience Robotics