WayWise_li.mp4
WayWise (way-wise: Expert or knowledgeable in finding or keeping the way; knowing the way or route.) is a rapid prototyping library for connected, autonomous vehicles. It is developed within research projects at the RISE Dependable Transport Systems group to investigate the use of autonomous vehicles (rc cars, tractors, drones) and, especially, related functional safety as well as cybersecurity risks and opportunities they bring, in various use cases (road traffic, agriculture, maritime). It has roots in the RISE Self-Driving Vehicle Platform (SDVP), originally developed by Benjamin Vedder, but was redesigned and rewritten based on C++ and Qt targeting commercial-of-the-shelf hardware (instead of custom hardware and firmware). The library is used to build the brains on-vehicle and the control application counterpart on the desktop. The main protocol for communication between vehicle and control application is MAVLINK, which is implemented using MAVSDK. There is also support for controlling vehicles using ISO/TS 22133:2023 as implemented in RI-SE/iso22133. WayWise does not target production readiness but exploring specific use cases by rapid prototyping.
Our main projects that base on WayWise are:
- ControlTower, desktop control application that communicates to vehicles via MAVLINK (WayWise-based vehicles mainly, experimental PX4 support).
- RCCar, a fully-fledged rc car implementation (GNSS & IMU-based positioning, VESC-based odometry, ...).
- WayWiseR, a ROS2 integration of WayWise that streamlines the development and deployment of autonomous vehicles in both simulation and real-world environments.
Current maintainers are:
- Aria Mirzai
- Ramana Reddy Avula
Previous maintainers:
- Marvin Damschen
- Rickard Häll
You can reach out to us directly or via [email protected].
This "library" is meant to be used as a git submodule, as we do not do releases (for the time being) and do not promise a stable API. In general, our development resources are scarce and dedicated to fulfill use cases of research projects we are part of. We do our best to avoid it, but things will break from time to time.
As set of examples can be found in /examples, most notably:
- A minimal simulated car with an autopilot communicating via MAVLINK. This example can be connected to using ControlTower and follow waypoints created on the map (see screen recording below).
- A minimal simulated car with an autopilot communicating via ISO/TS 22133. This example can be connected to using ATOS.
- core: fundamental classes/headers, e.g., for storing a position and transforming coordinates
- communication: quite broadly, everything that deals with "communication", e.g., connection between vehicle and control station, but also the vehicle's internal communication to lower-level control via CANopen
- logger: logging functionallity between vehicles and control application
- vehicles: classes used to store state of different vehicle types (e.g., within desktop application), but also to implement a specific vehicle that can drive and steer using controllers
- sensors: sensor support in a broad sense. Support for GNSS, IMU and UWB-based positioning is implemented here as well as objectdetection using DepthAI
- autopilot: currently provides the "WaypointFollower" interface for following a route (i.e., a list of waypoints) and several implementations of it
- PurePursuitWaypointFollower, an implementation of pure pursuit, which can also follow a point, e.g., a person or another vehicle
- GotoWaypointFollower, does not do low-level control but sends goto requests (mainly used for PX4-based drones)
- MultiWaypointFollower, is a container that allows switching between multiple instances of WaypointFollower (e.g., if you want to switch between different routes and save state inbetween)
- userinterface: UI building blocks to create desktop applications (see also ControlTower)
- external: code from external projects
- tools: tools that support WayWise development like for building MAVSDK
- examples: a set of examples showing how WayWise is used
If you use WayWise in a publication, please cite our paper:
@article{Damschen_WayWise_A_rapid_2024,
author = {Damschen, Marvin and Häll, Rickard and Mirzai, Aria},
doi = {10.1016/j.simpa.2024.100682},
journal = {Software Impacts},
month = sep,
title = {{WayWise: A rapid prototyping library for connected, autonomous vehicles}},
volume = {21},
year = {2024}
}


