Software Engineering and Infrastructure for Self-Driving Vehicle Development

作者:

Krainyak Andrey

刊登日期:2020/03/31

Abstract

自駕車軟體開發非常具有挑戰性,它需要穩定的軟體模組執行環境、強大的原始程式碼管理系統、原始程式碼品質驗證系統、分散式運算網路製造系統,以及建立高效的通訊於工程師與任務管理之間。本文將介紹前述軟體開發的過程。

Self-driving vehicle software development is challenging. It requires a stable execution environment for software modules, a robust source code management system, a source code quality verification system, a distributed computation network making system, and establishment of an efficient communication between engineers as well as task management. This article is to shed some light on the aforementioned aspects of the software development processes.

Keywords

Self-Driving Cars, Source code management, Branching, Code style, Touch typing

Introduction

Our team works on the development of the self-driving vehicle autonomy system. Most of the engineers are working on separate parts of the system. Every engineer has a different expertise, skills, as well as different understanding of the structure and capabilities of the system. Accordingly, extra work needs to be done to synchronize their work and integrate it into the system. The source code management system allows integration of the source code, as well as performing manual and automated source code quality checking. The task management system allows synchronization of working progress of the engineers.

While our fleet of vehicles is growing, every vehicle could have a custom sensor layout and hardware configuration. Thus, the system requires a scalable solution for being able to control each of the vehicles independently. The software system needs to be deployed on a broad range of platforms such as computers installed inside the vehicles and engineers’ workstations. A unified interface must be developed for scalable integration of the system with different platforms. The computational power requirements of the system grow with every new submodule added to the system. This may require scaling of the computational power by installing extra computers into a vehicle. Running the system on multiple computers implies establishment of a networking between these computers, as well as providing the network transport layer between parts of the software modules distributed across the computers.

Having multiple engineers working on the software system requires declaring a code style that formalizes the ways of writing source code. This should simplify reading of the source code, which, in turn, simplifies maintenance and code review, as well as facilitates communication between engineers on the level of source code. Programming involves interaction with many tools. Engineers should learn how to use these tools efficiently. This will increase their productivity and let them focus on the implementation, releasing their minds from cognitive strain, induced by necessity to perform routine tasks. Engineers are humans. Human imperfection implies that there is a big part of the system that is neither standardized nor verbalized in the form of documentation. Integration of the system modules requires understanding of the functionality of the modules, hence, an efficient communication inside the team needs to be established. In this article, we shed some light on the aforementioned aspects of the software development processes and describe our approaches on software engineering for self-driving car development.

Source Code Management

Need for source code management is a well known subject [1]. Here are some advantages of having a version control system [2]:

  • You won't lose your code by accident. Having a version control system, preferably with a remote service, will mean you are going to have another place where your code is stored. If several developers are working on the code simultaneously, then each one of them will have a copy of the entire code (or, in some cases, even the entire history).
  • It allows you to keep historical versions of the code, for easy reverting, comparison and investigation. Let's say you introduced a bug. With a version control system you can easily revert to a previous version of the code where the bug was not present to verify that it did not exist there. Then you can diff the results, or even bisect the history to find the exact check-in that introduced this bug.
  • It allows one to maintain several simultaneous lines of code (normally called "branches") and to easily compare between them and merge them.There are a broad set of tools used for source code management. Our team uses Git for managing source code. The Git server is provided by our own instance of Atlassian Bitbucket Server [3].

Branching

In the repository of the self-driving car runtime system, we have three types of branches: master branch, release branches, feature branches. Master branch is used for storing long-term stable changes. Changes to this branch are accepted only with a pull request. The master branch can’t be rebased. Release branch is used for integration of code related to a particular milestone. Every engineer can commit code directly to this branch without a pull request. A release branch can’t be rebased. After the related milestone has been accomplished, the release branch is being rebased and merged into the master branch. Feature branch represents code developed usually by a single engineer and related to a single task. A feature branch is usually created on top of the master or release branch. It can be freely rebased, for example, to pick up changes from a release branch.

…本文未結束

更完整的內容 歡迎訂購 2020年4月號 445期

機械工業雜誌‧每期240元‧一年12期2400元

我要訂購