Differences Between C++ Autonomous Driving and Embedded Linux Development

C++ Autonomous Driving Development:

C++ autonomous driving development refers to the research and development work of intelligent driving (Autonomous Driving, AD) technology using the C++ language. This work involves understanding and utilizing sensing, artificial intelligence algorithms, real-time operating systems, and complex software architectures to achieve autonomous navigation and control of vehicles. The main goal is to implement and optimize algorithms used for perception, planning, decision-making, and control, and to deploy them onto vehicles.

Embedded Linux Development:

Embedded Linux development refers to software development based on the Linux operating system, designed to perform specific tasks and integrated into devices or systems that require them, such as cars, home appliances, medical devices, industrial control systems, etc. Examples include Bluetooth headsets, robots, and in-vehicle systems.

Similarities

1. Operating System Foundation:

● Embedded Linux Development: Uses Linux as the foundational operating system because it provides a rich API, support from the open-source community, and a high degree of customization.

● Autonomous Driving Development: Also based on Linux, especially in autonomous vehicles, where Linux serves as the underlying operating system, providing a stable and reliable runtime environment for upper-layer applications.

2. Hardware Abstraction Layer:

● Both embedded Linux and autonomous driving development require implementing abstractions and access to the underlying hardware, allowing upper-layer applications to interact more easily with the hardware.

3. Middleware:

● Embedded Linux Development: May use various middleware to implement network communication, data storage, and other functions.

● Autonomous Driving Development: Also relies on middleware frameworks, especially frameworks like ROS, DDS, and CyberRT, which not only provide hardware abstraction but also support communication and services between nodes.

Differences

1. Application Scenarios:

● Embedded Linux Development: Widely applicable, covering consumer electronics, medical devices, industrial control systems, etc. Its application fields are broader.

● Autonomous Driving Development: Focuses on the automotive industry and its related sectors, particularly autonomous driving technology and advanced driver-assistance systems (ADAS).

2. Technology Stack:

● Embedded Linux Development: Mainly focuses on hardware interfaces, low power design, real-time performance, and system stability of embedded systems.

● Autonomous Driving Development: In addition to traditional embedded development technologies, it also requires mastering advanced technologies such as machine learning, computer vision, and sensor fusion.

3. Real-Time Requirements:

● Embedded Linux Development: Real-time requirements may vary depending on the application scenario.

● Autonomous Driving Development: Real-time requirements are very high, as vehicles must be able to respond instantly to changes in the surrounding environment to ensure safe driving.

4. Development Tools and Frameworks:

● Embedded Linux Development: Common tools include GCC, GDB, Makefile, etc.

● Autonomous Driving Development: In addition to traditional tools, it also extensively uses tools and frameworks specifically for machine learning and visual processing, such as ROS, OpenCV, Caffe/TensorFlow.

C++ Autonomous Driving Backend Technology Stack

Recommended Suggestions

1. Interested in the fields of autonomous driving and robotics, and want to work in this area.

2. Undergraduate or graduate students who have studied algorithms based on the ROS framework, but find it challenging to publish top journal papers and do not have an advantage in education.

3. Currently only familiar with the general C++ technology stack, and want to delve into a niche area to enhance their competitiveness in campus recruitment.

These summarize three suggestions; subsequent learning will require a significant amount of time.

General C++ Technology Stack

1. Learning Linux

Ubuntu System (x86/ARM)

Familiar with the basic knowledge and common commands of the Ubuntu operating system.

Developing or running on different architectures such as x86 and ARM, understanding the characteristics and differences of different architectures.

Knowledge of Linux Operating System

Basic concepts and principles of Linux, including process management, memory management, file systems, device drivers, etc.

In-depth understanding of Linux inter-process communication mechanisms, such as pipes, sockets, and signals.

Knowledge of Linux System Functions

Familiar with commonly used functions provided by Linux, such as file operations, process management, network programming, etc. (common web server projects).

Knowledge of Linux Performance Analysis and Optimization

Understanding of Linux performance analysis tools and optimization techniques, identifying and resolving system performance bottlenecks.

Tools such as top, iotop, strace, perf for performance analysis and troubleshooting.

2. C++

C++ Basic Syntax

Includes variables, data types, operators, conditional statements, loop statements, etc.

C++ Features

Object-oriented programming (OOP), classes and objects, inheritance, polymorphism.

Smart pointers, thread libraries, commonly used C++ features.

Template Programming

Understanding the basic syntax of templates, function templates, class templates, template specialization, etc.

Common Standard Libraries

Boost library, STL library.

3. General Computer Technology Stack

Data structures, design patterns, computer networks, computer operating systems.

Autonomous Driving Domain Technology Stack

1. Project Build Tools

CMake, Bazel.

https://github.com/Kitware/CMake

https://github.com/search?q=bazel&type=repositories

2. ROS1

ROS Tutorial:https://wiki.ros.org/

Basic Principles of ROS

● Nodes: The ROS system consists of multiple nodes, each representing a process, which can be sensors, control algorithms, etc. Nodes communicate through Messages.

● Topics: Topics are the way nodes communicate asynchronously; a node can Publish messages to a topic, and other nodes can Subscribe to that topic to receive relevant messages.

● Services: Services are the way nodes communicate synchronously; a node can provide a service, and other nodes can request that service to obtain specific information or perform specific operations.

● Parameter Server: The parameter server is a distributed key-value storage system used to store and share configuration parameters and runtime parameters. Nodes can read and write parameters from the parameter server.

● Messages: ROS uses a message-based communication model; messages are data structures defined in a specific format used to pass information between nodes. Messages can be standard types (e.g., integers, strings) or custom complex data types.

Publish-subscribe model, message serialization protocols (json, protobuf, xml).

Source Code Related to ROS

roscpp https://wiki.ros.org/roscpp

roscpp_serialization.

3. Apollo

GitHub: https://github.com/ApolloAuto/apollo

Cyber: https://github.com/ApolloAuto/apollo/tree/master/cyber

Communication modules: intra, shm, fastdds.

Cyber documentation: https://github.com/ApolloAuto/apollo/blob/master/docs/04_CyberRT/

Serialization protocol: protobuf.

4. DDS

ROS2, Apollo.

Common: fastdds: https://github.com/eProsima/Fast-DDS.

A learning path from zero to employment in C++ intelligent driving has been prepared for you, containing various learning resources and links, which is very convenient. If you need it, please +V: linglv06 or scan the QR code below to obtain it.

Differences Between C++ Autonomous Driving and Embedded Linux Development
Differences Between C++ Autonomous Driving and Embedded Linux Development
Differences Between C++ Autonomous Driving and Embedded Linux Development

WeChat ID: linglv06

Bilibili: Embedded Self-Learning – Linglv Senior

Taobao Store: Linglv Senior One-on-One

Leave a Comment