Davide Faconti, Developer in Barcelona, Spain
Davide is available for hire
Hire Davide

Davide Faconti

Verified Expert  in Engineering

Software Developer

Location
Barcelona, Spain
Toptal Member Since
July 2, 2018

For over the past 15 years Davide has inhabited many roles such as a software developer, system engineer, and roboticist. In his development work, he always strives for clean, maintainable, and readable code via best practices and he also possesses a strong background in multi-threading, optimization, modern C++ development, and real-time software.

Availability

Part-time

Preferred Environment

Linux

The most amazing...

...thing I’ve done was to develop real-time control software for embedded systems and robotics.

Work Experience

Robotic Architect

2019 - 2020
Blue Ocean Robotics
  • Worked as a robotic architect and as one of the most senior engineers in the entire company—reporting directly to upper management, supervising the execution of multiple projects, and prioritizing tasks.
  • Defined the best practices and methodologies, for instance, test-driven development and model-driven software design; also proposed system-level software architectures.
  • Created the software architecture and software modules to navigate autonomously in a mixed indoor-outdoor scenario.
  • Improved, sometime dramatically, the CPU usage of some software module widely used in the company.
  • Introduced alternative algorithms to perform few perception and navigation tasks more effectively.
  • Selected the hardware components (computers, motors, servo drives, sensors) to be used on a novel product, keeping in mind both performance and serial production constraints.
  • Defined a logging infrastructure to record business-critical information and metrics in the Ccoud from our robot fleet.
  • Supervised an internal project focused on benchmarking of Visual-SLAM algorithms.
Technologies: Computer Vision, Project Management, Agile, Optimization, Autonomous Navigation, Robotics, C++

Senior Robotic Software Engineer

2016 - 2019
Eurecat
  • Developed software for a mobile manipulator; paid particular attention to modules that perform motion control, image processing, the task orchestration (state machine), and graphic user interfaces.
  • Introduced and promoted Agile project management to the team.
  • Continuously mentored junior developers and taught them advanced C++ programming techniques and best practices in software development.
  • Worked in an environment with model-driven development and a high level of coordination and orchestration of robot behaviors.
Technologies: Robotics, Qt, C++

Consultant | Project Manager

2015 - 2016
Freelance Work
  • Supervised, as an external consultant, the design of an advanced biped humanoid robot at Pal Robotics which included the following tasks.
  • Defined the technical requirements and the overall hardware architecture.
  • Coordinated the activities with all of the R&D departments of the company (software, electronics, and mechanics).
  • Managed and coached the team of mechanical engineers.
  • Defined and implemented the software tools which enabled simple-and-fast testing of the hardware.
Technologies: SOLIDWORKS

Senior Robotics Software Engineer

2014 - 2015
Institute of Human Machine Cognition
  • Implemented a whole body robotic controller, also known as the Hierarchical Inverse Kinematics or “Stack of Tasks” which significantly improved the ability of the humanoid robots “Atlas” to perform complex tasks which were not feasible using the previous software framework used at IHMC.
Technologies: Robotics, C++, Java

Freelance Developer | Consultant

2012 - 2014
Icarus Technology
  • Provided software and firmware development to several clients, particularly in the field of control and automation and embedded systems.
  • Designed a customized, low-cost robotics manipulator for an academic client (University of Bergamo).
  • Implemented an easy-to-use interface to the industrial communication protocol known as “CANopen”. The software, that is commercially available, is described in more detail at Canmoveit.com.
Technologies: C++

Software Engineer

2012 - 2013
NTB (Technical University of Buchs)
  • Developed a software stack to control a high precision robot that worked extremely fast, with strict real-time requirements.
  • Constructed the software framework and developed it on QNX.
  • Wrote different control algorithms for the above project.
  • Built a distributed communication infrastructure for the above project that solved the challenge of coordinating heterogeneous software components running simultaneously on multiple machines.
Technologies: Robotics, QNX, C++

Researcher

2011 - 2012
Technical University of Leuven
  • Researched, defined, and documented several best practices in the development of reusable software component in large robotic systems.
  • Solved the main challenge of figuring out how to apply model-driven engineering to a distributed system and identify the shortcomings in existing robotic frameworks; this included also the description of a more effective development process.
  • Worked on the above project which was part of the EU-funded project “BRICS: Best Practices in Robotics” (Best-of-robotics.org).
Technologies: Robotics

PlotJuggler

https://github.com/facontidavide/PlotJuggler
A graphical interface developed in Qt to visualize time series either in real-time and derived from a data file.

Groot

https://github.com/Eurecat/Groot
A graphical editor and monitor to design and analyze behavior trees. The software was implemented in Qt and can be used for game design or robotic development.

BehaviorTree.CPP

https://github.com/BehaviorTree/BehaviorTree.CPP
This C++ 14 library provides a framework to create behavior trees. It was designed to be flexible, easy to use, reactive, and fast.

Even if our main use case is robotics, you can use this library to build AI for games or to replace finite state machines in your application.

There are a few features that make BehaviorTree.CPP unique, when compared to other implementations:
• It makes asynchronous actions, i.e., non-blocking, a first-class citizen.
• You can build reactive behaviors that execute multiple Actions concurrently.
• Trees are defined using a domain-specific scripting language (based on XML) and can be loaded at run time; in other words, even if written in C++, the trees are not hard-coded.
• You can statically link your custom tree nodes or convert them into plugins, which can be loaded at run-time.
• It provides a type-safe and flexible mechanism to do Dataflow between Nodes of the tree.
• It includes a logging/profiling infrastructure that allows the user to visualize, record, replay, and analyze state transitions.
• Last but not least: it is well documented!

CPP Optimizations Diary

https://cpp-optimizations.netlify.app/
Tutorials about optimization techniques in C++, containing practical examples.

The articles are shared under a creative common license and are periodically updated. Many examples are based on my contributions to popular open-source projects on GitHub.
1997 - 2003

Bachelor's Degree in Electronics

Politecnico di Torino - Torino, Italy

2001 - 2002

Master's Degree in Complex Adaptive Systems (Neural Networks, Robotics, Simulations)

Chalmers University of Technology - Chalmers, Sweden

Languages

C++, Java, Python, C++14

Frameworks

Qt 5, Boost, Qt

Paradigms

Parallel Programming, Agile Workflow, Real-time Systems, Agile

Other

Multithreading, Algorithms, Robotics, Robot Operating System (ROS), Computer Vision, Concurrent Computing, QNX, Autonomous Navigation, Optimization

Platforms

Linux

Tools

SOLIDWORKS

Industry Expertise

Project Management

Collaboration That Works

How to Work with Toptal

Toptal matches you directly with global industry experts from our network in hours—not weeks or months.

1

Share your needs

Discuss your requirements and refine your scope in a call with a Toptal domain expert.
2

Choose your talent

Get a short list of expertly matched talent within 24 hours to review, interview, and choose from.
3

Start your risk-free talent trial

Work with your chosen talent on a trial basis for up to two weeks. Pay only if you decide to hire them.

Top talent is in high demand.

Start hiring