Video Source: Virtual Vehicle
Radar is a unique sensor and is a must in most modern cars. It is able to measure metric information about the surrounding world, sees through dust and also is able to measure additional data like doppler velocity for each detection. This makes it a very useful sensor to use in any perception system especially in the autonomous/automated driving context.
However, any sensor is only useful if the data it publishes is easily accessible. This is why we teamed up with smartmicro and today, combining our expertise in automotive-grade middleware with their radar knowledge, we announce an open source ROS 2 driver for their UMRR-96 automotive radar sensor.
The smartmicro UMRR-96 radar for automotive uses such as Advanced Driver Assistance Systems (ADAS) and Autonomous Driving (AD).
Image courtesy of smartmicro
The driver can process and re-publish data from up to 10 UMRR-96 automotive radars simultaneously. All data is being advertised on separate ROS 2 topics as a standard PointCloud2 message which allows the driver to be instantly used within any system using ROS 2 without the need of extending that system to work with new message types.
Usually setting up a new radar driver can be cumbersome as different vendors have their own manual configuration procedure. There can be environment variables that must be set before building and running the code as well as various configuration files that must be correctly filled by the user in order to configure the sensors correctly and even to link to the correct underlying library. With this in mind, we made the setup process as easy as specifying the ROS 2 node parameters in a standard way through a yaml parameter file and launching the corresponding node. Internally, we interface with the Smart Access C++ API, provided by smartmicro, which interfaces directly with the sensors. All of the API-specific configuration, such as setting the correct paths to the correct configuration files and setting required environment variables is taken care of by the ROS 2 driver itself, so the user does not need to learn configuration procedures specific to the Smart Access API itself. Below we show an example of a typical ROS 2 parameter file that configures the driver to work with two sensors:
---
/**:
ros__parameters:
master_client_id: 1
hw_dev_id: 2
hw_port: 55555
hw_iface_name: "eth0"
sensors:
sensor_0:
id: 3
ip: "172.22.10.101"
port: 55555
iface_name: "eth0"
frame_id: "umrr"
history_size: 10
sensor_1:
id: 4
ip: "172.22.10.102"
port: 55555
iface_name: "eth0"
frame_id: "umrr"
history_size: 10
In addition to this the driver contains a CI suite consisting of smoke and integration tests to ensure seamless integration into the end system. We make sure to test that the node can be created and run with the given set of parameters in the smoke test. In our integration test we feed the node with generated packets of data from a simulated sensor to ensure that the driver is able to convert these data correctly into the ROS 2 messages. In addition to this, the code passes standard linters like cpplint and uncrustify.
This ROS 2 driver enables the exciting world of innovation in ROS for automotive applications such as ADAS and AD to use this radar from smartmicro ®. Also enabled are researchers around the world, across industries, that are working on perception tasks well suited for radars. Open source ROS 2 based projects such as Autoware.Auto could use this radar to implement sensor fusion and achieve higher levels of reliability and safety through redundancy in the perception system.
Developing in the open has the benefit of being able to leverage the expert knowledge from different people from different domains. In this effort we were able to combine the ROS 2 expertise within Apex.AI, radar driver development expertise from smartmicro and test it all with the help of the integration experts in Virtual Vehicle, an R&D center for advanced virtualization of vehicle development. Such collaboration makes the end product better and we can’t wait to collaborate with even more people now that the code is in the open. In the future we plan to collaborate even further by implementing even more features and expanding the list of supported sensors.
Use this driver for your ROS 2 application: