Devenir un ingénieur de véhicules autonomes – Partie 2 :Compétences logicielles

Dans la première partie de cette série de blogs, nous avons expliqué comment démarrer votre parcours pour devenir un ingénieur de véhicules autonomes. Maintenant, vous voudrez peut-être savoir quels langages de codage et logiciels apprendre afin de solidifier votre place dans une équipe qui crée l'avenir des transports.

Voir – Réfléchir – Agir 

Imaginez que vous conduisez dans une rue de la ville et que vous aperceviez un piéton qui s'approche lentement d'un trottoir à quelques centaines de mètres devant vous. Alors qu'ils ne sont pas encore dans le passage pour piétons, vous mettez le pied sur le frein, prédisant qu'ils pourraient commencer à traverser. Lorsque vos chemins se croisent, la personne s'avance pour traverser la route. Déjà préparé, vous vous arrêtez et vous leur permettez de passer.

Notre système autonome de niveau 4 de bout en bout est créé pour imiter le processus de prise de décision d'une manière similaire à un conducteur humain :Voir – Penser – Agir.

Cela signifie que nous mettons tout en œuvre, des capteurs qui « voient » le piéton aux algorithmes qui rassemblent les données des capteurs et l'identifient en tant que personne. La décision et l'action d'arrêter, de ralentir ou de continuer à conduire sont basées sur des comportements programmés dans le système lui-même.

Ces scénarios simples deviennent plus complexes lorsque l'on considère l'environnement (pluie, neige), les autres trafics (quelqu'un va-t-il tourner ?) et la prise de décision d'itinéraire. Nous avons besoin d'équipes possédant plusieurs types de compétences pour créer un système robuste capable de gérer la variété de situations que l'on peut rencontrer sur la route.

Nos équipes

Détection active et fusion d'informations - L'équipe de détection active utilise les données des capteurs et crée des algorithmes pour détecter et identifier les objets pour les systèmes de conduite autonome de Torc, permettant au système de comprendre et de réagir à l'environnement autour du véhicule en temps réel.

Apprentissage automatique – Notre équipe d'apprentissage automatique forme notre système pour identifier certains objets qu'il voit avec plus de détails que ceux qui pourraient être fournis avec les données brutes des capteurs. Par exemple, nous utilisons l'apprentissage automatique pour apprendre à notre système à identifier les feux de circulation ou à déterminer la différence entre un piéton et un lampadaire.

Cartographie et localisation – Les cartes des véhicules autonomes doivent être beaucoup plus spécifiques que les cartes typiques qu'un humain utiliserait pour la navigation. Notre équipe de cartographie développe l'environnement 3D et route nos lecteurs de voiture autonomes et travaille avec l'équipe de localisation pour s'assurer que le système sait où il se trouve et comment se rendre à destination.

Comportements et planification – L'équipe des comportements se concentre sur la façon dont le véhicule doit agir dans une situation donnée. Par exemple, la fusion sur une autoroute très fréquentée nécessite que le véhicule détermine un bon endroit pour «se glisser» dans le flux de circulation et ajuste l'accélération pour y parvenir en toute sécurité.

Mécanique - L'équipe mécanique crée le concept de conception du véhicule et intègre des capteurs, des supports et des calculs dans le véhicule.

Intégration du système – S'assurer que les composants fonctionnent bien non seulement par eux-mêmes, mais en tant que système, est un rôle important au sein de l'équipe. L'équipe d'intégration système examine les interactions de haut niveau des composants dans leur ensemble.

Intégré, commandes et électricité - Cette équipe intègre le logiciel dans l'ensemble du système de composants et travaille sur le système électrique qui contrôle le véhicule - pensez à l'accélération, au freinage et à la direction.

Opérations de développement – L'équipe Dev Ops s'occupe de gérer le déploiement des logiciels et de maintenir l'infrastructure technique.

Sécurité et tests - La sécurité est l'objectif principal de notre système autonome, et donc les ingénieurs de sécurité et de test sont essentiels à chaque étape de notre développement. Les équipes de sécurité et de test veillent à ce que nous puissions tester et vérifier les nouvelles fonctionnalités, ainsi qu'à normaliser le protocole et les pratiques de sécurité pour toutes les équipes.

Comment se préparer ? Nous avons demandé aux ingénieurs de Torc quelles compétences logicielles et quelle expérience les avaient aidés à réussir dans leur spécialité au sein de notre équipe audiovisuelle.

Karan Bhargava, ingénieur logiciel de cartographie et de localisation

C++ est un langage orienté performances qui vous permet de « sauter le capot » et d'accéder en profondeur à la gestion de la mémoire.

Si un candidat possède de solides compétences en C++ et en système d'exploitation robotique (ROS), il est déjà ingénieur en robotique. Pour devenir ingénieur en cartographie et localisation, ils doivent aller plus loin et comprendre les transformations de coordonnées générales et la géométrie 3D. Si un candidat a travaillé avec la localisation et la cartographie simultanées (SLAM), il convient parfaitement à ce poste.

Matthieu Via, ingénieur DevOps

L'équipe DevOps requiert des compétences en unification du développement logiciel et de l'administration des systèmes. Nous utilisons ces compétences chez Torc pour gérer les déploiements de logiciels sur le calcul des véhicules. Administrer et gérer correctement les ordinateurs Linux est également une compétence importante pour automatiser et rendre nos systèmes robustes.

Nous utilisons des réseaux assez complexes sur nos véhicules. Être capable de concevoir de bonnes conceptions de réseau et de déboguer des conceptions complexes est vital pour notre travail.

Les technologies typiques qu'un membre de l'équipe DevOps utiliserait pour rendre un processus automatique/répétable seraient la gestion de la configuration et les pipelines d'intégration continue. Plutôt que de demander à un développeur d'écrire un logiciel, de le compiler manuellement, puis de le copier manuellement sur un ordinateur (puis de le configurer manuellement), nous utilisons l'automatisation pour nous assurer que le logiciel est construit, installé et configuré avec le moins de possibilité d'erreur humaine. que possible.

David Anderson, ingénieur principal en mécanique

Dans le domaine de la conception matérielle, les logiciels les plus utiles à connaître sont divers progiciels de conception assistée par ordinateur (CAO) et de simulation. Ceux-ci sont utilisés quotidiennement pour créer le matériel qui fait fonctionner cette technologie. Les langages de codage les plus utiles seraient Python et MATLAB. Le matériel est moins axé sur l'efficacité du code en temps réel que sur la manipulation et la visualisation des données.

Andrew Cunningham, ingénieur logiciel de détection active et de fusion d'informations

C++ est un langage de programmation compilé qui prend en charge à la fois la programmation orientée objet et la manipulation de la mémoire de bas niveau. Torc utilise C++ pour alimenter l'autonomie car un code C++ bien écrit est extrêmement rapide et extensible.

Un candidat doit également être familiarisé avec les normes de codage. Les normes de codage industrielles interdisent certaines pratiques de codage qui peuvent entraîner des bogues potentiellement dangereux au moment de l'exécution. En appliquant ces contraintes, le code est rendu plus sûr, portable et fiable. Les normes de codage MISRA sont ouvertes et bien que la documentation soit dense, les idées clés peuvent être apprises assez facilement.

Ashwin Sahasrabudhe, ingénieur logiciel comportemental

Les comportements de conduite autonome jouent un rôle important dans la prise de décision de haut niveau sur la façon dont le véhicule doit se comporter sur les routes, étant donné qu'il existe de nombreuses autres entités comme les voitures, les piétons et les vélos. Pour traiter ces différentes entités et développer les algorithmes de sécurité requis, il est nécessaire de bien comprendre comment la cinématique et la dynamique d'un véhicule affectent sa maniabilité sur la route. La partie amusante de travailler chez Torc est que votre travail n'est jamais limité à un seul composant. Vous travaillez sur d'autres composants comme l'interface du véhicule, qui contrôle les actionneurs de la voiture. En raison de ce travail varié, il est bon d'avoir une compréhension des algorithmes de contrôle, ainsi qu'une expérience dans le développement et le réglage des boucles de contrôle.

Cela dit, une question fréquemment posée est "Où puis-je en savoir plus sur cette technologie?" Il existe un nombre considérable de simulateurs disponibles sur le marché avec lesquels vous pouvez jouer. C'est toujours amusant d'explorer quelque chose de nouveau et vous obtenez un autre type de satisfaction lorsque la voiture roule dans le simulateur comme vous le souhaitez. Une expérience pratique et le développement de quelques algorithmes de contrôle ou de comportements de conduite autonome avec de tels simulateurs est un bon début. Communiquez également avec vos pairs intéressés par les voitures autonomes. d'après mon expérience personnelle, je dirais que travailler dans des projets de groupe et apprendre des autres aide beaucoup lorsqu'il s'agit de comprendre les nouvelles technologies.

Revenez bientôt pour la troisième partie où les ingénieurs de Torc partageront les compétences personnelles qu'ils ont trouvées aussi précieuses que le codage et compareront leurs attentes du travail avec la réalité.

A la recherche d'un emploi dans le domaine des véhicules autonomes ? Torc est l'une des sociétés de logiciels autonomes les plus expérimentées et nous agrandissons notre équipe pour révolutionner le transport. Consultez notre page Carrières pour plus d'informations et restez à l'écoute pour la troisième partie !