The complexity of humanoid robots is increasing with the availability of new sensors, embedded CPUs and actuators. This wealth of technologies allows researchers to investigate new problems like whole-body force control, multi-modal human-robot interaction and sensory fusion. Under the hood of these robots, the software architecture has an important role: it allows researchers to get access to the robot functionalities focusing primarily on their research problems, it supports code reuse to minimize development and debugging, especially when new hardware becomes available. But more importantly it allows increasing the complexity of the experiments that can be implemented before system integration becomes unmanageable and debugging draws more resources than research itself. In this paper we illustrate the software architecture of the iCub humanoid robot and the software engineering best practices that have emerged driven by the needs of our research community. We describe the latest developments at the level of the middleware supporting interface definition and automatic code generation, logging, ROS compatibility and channel prioritization. We show the robot abstraction layer and how it has been modified to better address the requirements of the users and to support new hardware as it became available. We also describe the testing framework we have recently adopted for developing code using a test driven methodology. We conclude the paper discussing the lessons we have learned during the past eleven years of software development on the iCub humanoid robot.
The iCub Software Architecture: Evolution and Lessons Learned
L. Natale,A. Paikan,M. Randazzo,Daniele E. Domenichelli
Published 2016 in Frontiers in Robotics and AI
ABSTRACT
PUBLICATION RECORD
- Publication year
2016
- Venue
Frontiers in Robotics and AI
- Publication date
2016-04-26
- Fields of study
Computer Science, Engineering
- Identifiers
- External record
- Source metadata
Semantic Scholar
CITATION MAP
EXTRACTION MAP
CLAIMS
CONCEPTS
- channel prioritization
A communication feature for assigning priority to data channels within the robot software stack.
Aliases: prioritized channels
- hardware support
Support for incorporating newly available robot hardware into the software stack.
Aliases: new hardware support
- icub software architecture
The software stack used to organize access to iCub robot capabilities and development workflows.
Aliases: software architecture of iCub, iCub architecture
- interface definition and automatic code generation
A middleware capability for specifying interfaces and generating source code from them.
Aliases: interface definition, code generation
- lessons learned
The retrospective conclusions drawn from long-term software development experience on iCub.
Aliases: takeaways, conclusions
- logging
The mechanism used to record runtime events and data for debugging and inspection.
Aliases: logging support
- middleware support
The middleware layer that provides shared services for robot interfaces, communication, and integration.
Aliases: middleware layer
- robot abstraction layer
The layer that exposes robot hardware through higher-level interfaces independent of specific devices.
Aliases: abstraction layer
- ros compatibility
Support for interoperating with the Robot Operating System ecosystem.
Aliases: ROS support
- test-driven methodology
A development approach that uses tests as a primary driver for implementation.
Aliases: test-driven development, TDD
- testing framework
The framework used to run and organize software tests during development.
Aliases: test framework
- user requirements
The needs and constraints that shaped changes to the robot software stack.
Aliases: users' requirements
REFERENCES
Showing 1-46 of 46 references · Page 1 of 1
CITED BY
Showing 1-31 of 31 citing papers · Page 1 of 1