A professional Flutter mobile application for controlling the Zenon Robot
- Real-time joint control with sliders
- Individual control for legs, ears, and wheels
- Motion profile adjustment (velocity & acceleration)
- Instant feedback and updates
- 60+ pre-programmed motions
- Categorized by type (gestures, movements, expressions, etc.)
- Search functionality
- Filter by category
- Smooth execution with visual feedback
- Live video streaming (2 fps)
- Single image capture
- Camera power control
- Real-time image display
- Auto-refresh in live mode
- Manual movement controls (D-pad style)
- Robot power management (start/shutdown)
- Face expression control (8 expressions)
- Voice listener toggle
- AI conversation mode
- Quick action buttons
- Object following with real-time tracking
- Object detection using YOLO v8
- Status indicators
- Easy on/off controls
- Base URL:
http://10.255.254.75:8000 - Protocol: REST API with JSON
- Timeout: 10 seconds per request
- Camera refresh: 500ms (2 fps)
- Dynamixel servo control
- DC motor control (wheels)
- Camera streaming
- Audio control
- Face expressions
- Vision processing
- Voice commands
- AI chatbot integration
- Flutter SDK (>=3.0.0)
- Android Studio or VS Code
- Android device or emulator
- Network connection to robot (10.255.254.75)
-
Clone and Navigate
cd zenon_robot_app -
Install Dependencies
flutter pub get
-
Run the App
flutter run
Android APK:
flutter build apk --releaseAndroid App Bundle:
flutter build appbundle --releaseiOS (requires macOS):
flutter build ios --release- Connect your mobile device to the same network as the robot
- The robot should be accessible at
10.255.254.75:8000 - Test connection using the refresh button in the app
Make sure port 8000 is open on the robot's firewall:
sudo ufw allow 8000/tcplib/
├── main.dart # App entry point
├── screens/
│ ├── home_screen.dart # Main navigation
│ ├── live_mode_screen.dart # Joint control
│ ├── motions_screen.dart # Motion library
│ ├── camera_screen.dart # Camera controls
│ ├── robot_control_screen.dart # Manual control
│ └── vision_screen.dart # Vision features
└── services/
├── api_service.dart # API communication
└── robot_state_provider.dart # State management
POST /robot/start- Start robotPOST /robot/shutdown- Shutdown robotGET /robot/state- Get current statePOST /robot/state- Set joint positionsPOST /robot/update_state- Update joint positionsPOST /robot/run_scenario- Run motion
POST /cam/on- Power on cameraPOST /cam/off- Power off cameraGET /cam/get/image- Get camera image
POST /vision/follow_obj/start- Start object followingPOST /vision/follow_obj/stop- Stop object followingPOST /vision/yolo/start- Start object detectionPOST /vision/yolo/stop- Stop object detection
POST /robot/listen- Start voice listenerPOST /robot/listen/stop- Stop voice listenerPOST /ai/listen/start- Start AI conversationPOST /ai/listen/stop- Stop AI conversation
POST /robot_face/expression/{expression}- Set face expression
- Basic Postures: stand, crouch, tall_stand, etc.
- Gestures: wave, bow, nod_yes, shake_no, etc.
- Ear Expressions: happy_ears, alert_ears, sad_ears, etc.
- Movement: move_forward, turn_left, spin, etc.
- Complex Motions: dance, celebration, crawl, etc.
- Face Directions: face_left, face_right, face_back, etc.
- Utility: calibrate, reset_position, test_all_joints
- Problem: App shows "Offline"
- Solution:
- Verify robot IP (10.255.254.75)
- Check network connectivity
- Ensure API server is running on robot
- Try manual connection using curl:
curl http://10.255.254.75:8000/robot/state
- Problem: Camera shows black screen
- Solution:
- Toggle camera power off and on
- Check if camera is working on robot directly
- Verify camera endpoint:
curl http://10.255.254.75:8000/cam/get/image
- Problem: Motions fail to run
- Solution:
- Ensure robot is started (not just connected)
- Check robot state in Live Mode
- Verify motors are not in error state
- Try calibrate motion first
Edit motions_screen.dart and add to the _motions map:
{'name': 'new_motion', 'icon': Icons.icon_name, 'color': Colors.blue}Edit api_service.dart and update the baseUrl:
static const String baseUrl = 'http://YOUR_ROBOT_IP:8000';Edit main.dart theme configuration:
colorScheme: ColorScheme.fromSeed(
seedColor: const Color(0xFF667EEA),
brightness: Brightness.dark,
),dependencies:
flutter:
sdk: flutter
http: ^1.1.0 # API communication
provider: ^6.1.1 # State management
flutter_svg: ^2.0.9 # SVG support
cached_network_image: ^3.3.0 # Image caching
shared_preferences: ^2.2.2 # Local storageThis project is proprietary software for the Zenon Robot system.
For issues, questions, or feature requests, please contact the development team.
- Initial release
- Full robot control features
- Live camera streaming
- Complete motion library
- Vision system integration
- Material Design 3 UI
Built with ❤️ using Flutter