Project Overview
ERLEtek, a robotics startup specializing in concrete 3D printing, required a sophisticated control interface for their robotic test platform. The challenge was to create a Terminal User Interface (TUI) that would allow operators to design, request, and execute complex robotic missions in a ROS2 (Robot Operating System 2) environment.
The system needed to be intuitive for non-technical users, yet being able to be rendered from a headless system into a remote terminal. It had to provide real-time feedback, handle complex mission parameters, and seamlessly integrate with the existing ROS2 infrastructure. Additionally, the project emphasized using modern development practices and AI-assisted tools to accelerate the development process.
Key Features
The TUI was designed with several core functionalities:
- Mission Design Interface: Intuitive menu-driven system for creating and configuring robotic missions
- Real-time Status Monitoring: Live display of robot state, sensor readings, and mission progress
- Parameter Configuration: User-friendly forms for inputting complex mission parameters
- Mission History: Logging and retrieval of previous missions for reuse and analysis
- ROS2 Integration: Seamless communication with ROS2 services and topics
- Error Handling: Comprehensive error reporting and recovery mechanisms
Development Process
1. Requirements Analysis & Architecture Design
I began by understanding the workflow of robotic mission execution and identified the key user interactions.
I designed a modular architecture that separated concerns between UI logic, ROS2 communication, and data management,
ensuring maintainability and scalability.
2. UI/UX Design
Using Python's rich text capabilities, I designed a responsive terminal interface with intuitive navigation,
clear visual hierarchy, and organized menu structures. The design prioritized accessibility and minimized cognitive load for operators.
3. ROS2 Integration Framework
I created a dedicated module to handle all ROS2 communication, managing service calls, topic subscriptions,
and message handling. This abstraction layer allowed the UI to remain independent of ROS2 implementation details.
4. AI-Assisted Development
With the help of Claude Code, I significantly accelerated the implementation process.
While I took care of the system architecture and design, AI assisted with code generation,
pattern recognition to modify existing code, and debugging, reducing development time while maintaining code quality and consistency.
5. Data Management & Persistence
I implemented a robust system for storing mission configurations, execution logs, and historical data.
This allowed operators to quickly recall previous missions and analyze robot performance.
6. Testing & Validation
Comprehensive testing was performed across different mission types, error scenarios, and ROS2 configurations.
7. Documentation & Deployment
The entire development environment was containerized using Docker for easy switch between branches
and easier merging.
Complete user documentation and developer guides were created for maintenance and future enhancements.
Technical Architecture
Frontend Layer: A Python-based TUI framework that manages user input and displays, with responsive design patterns and state management.
Application Layer: Business logic handling mission workflow, data validation, and user state management. Designed for extensibility and maintainability.
ROS2 Integration Layer: Abstraction module for ROS2 service calls, topic subscriptions, and message handling. Provides synchronous and asynchronous communication patterns.
Data Layer: Persistence mechanism using structured file formats for mission storage, logging, and configuration management.
Tools & Technologies Used
Key Achievements
Reduced Mission Setup Time: The intuitive TUI reduced and streamlined the mission configuration process from minutes to seconds.
Improved Reliability: Comprehensive error handling and validation prevented common operational mistakes and improved overall system reliability.
Faster Development: By leveraging AI tools, I accelerated development while maintaining high code quality, Being able to quickly prototype and iterate on modules and technologies rather new to me like Textualize and Ros2 framework
Scalability: The modular architecture allows for easy addition of new mission types and features without requiring major refactoring.
Challenges & Solutions
Challenge: ROS2 Asynchronous Communication
ROS2 services are inherently asynchronous, but the TUI required responsive, blocking operations.
I implemented a threading model with proper callback management to provide synchronous-like behavior
while maintaining application responsiveness.
Challenge: ROS2 Integration with nodes that were under development in parallel
I set up mockup nodes to simulate the behavior of the real nodes,
allowing for integration testing and validation of the TUI without waiting for all components to be completed.