Supported Sensors

ibeo Feature Fusion for LUX

ibeo-fusion-ecu
V2.0.0-b.1
Ethernet, CAN
160

Supported hardware versions

The driver interface communicates with the ibeo.HAD Feature Fusion ECU with Ethernet and CAN interfaces.

Manufacturer ibeo
Feature Fusion V6.7.X
Ibeo Interface Specification V1.47
CAN Interface Description V1.8

Sensor background and requirements

The ibeo.HAD Feature Fusion is an ECU with embedded software intended for integrating up to six ibeo LUX sensors in a vehicle.

A fusion of the maximum amount of LIDAR sensors provides a full 360° environmental perception around the equipped vehicle. Internal and external time synchronization within the system allows for time-based fusion of the sensors.

Sensor notes

  • The ibeo.HAD Fusion ECU for LUX provides a web interface to configure the system and view error/debug messages
    • Access the web interface by entering the IP address of the ECU in a web browser
    • Default IP address: 10.152.36.100
  • A physical CAN interface is required to send vehicle ego-motion data from PolySync Core to the Fusion ECU
  • Each LUX sensor needs to be manually configured with mount position and scanning frequency, before connecting to the Feature Fusion ECU
  • The ibeo.HAD Fusion ECU CANParser.xml configuration file must be updated to properly receive CAN data from the PolySync Core node
  • It’s highly recommended to configure the Ethernet interface that is communicating with the ECU to use the maximum MTU packet size, 9000

Hardware requirements

  • 12V power supply
  • Feature Fusion ECU with a Gigabit Ethernet connection to a network switch
  • 2-6 LUX sensors connected to the Gigabit Ethernet network switch
  • ibeo Sync box
  • CAN channel connection between the ibeo LUX Fusion ECU and the PolySync ECU
  • ECU with PolySync Core installed, with a direct connection to the ibeo.HAD Fusion ECU
  • A PolySync GPS/IMU node publishing valid ps_platform_motion_msg data
    • The PolySync Core driver for the ibeo ECU requires vehicle ego-motion data exist on the PolySync bus, which is extracted and sent to the ibeo Fusion ECU and used to offset the objects postition and velocity based on the host vehicles movement

Configuring the Feature Fusion ECU

Configure individual LUX sensors

The LUX sensors can be configured using ibeo’s ILV software, or using the PolySync Core driver and SDF Configurator.

The LUX sensors have the following default IP addresses:

  • Front-center: 10.152.36.11
  • Front-left: 10.152.36.12
  • Rear-left: 10.152.36.13
  • Rear-center: 10.152.36.14
  • Rear-right: 10.152.36.15
  • Front-right: 10.152.36.16
Configure LUX with ILV

Follow these steps for each of the LUX sensors in the ibeo.HAD Feature Fusion System to configure the sensor to work with PolySync Core.

The PolySync Core driver has the ability to modify the mount position and orientation of the sensor. You can optionally use the PolySync Core driver to set these LUX parameters.

  1. Connect the PolySync Core (or any machine with ILV) to the network switch with the ibeo LUX sensors
  2. Start ILV from the application launcher
  3. Enter the sensor IP address in the Scanner IP field at the top of the application ILV IP Address
  4. From the menu bar, select Device Configuration from the Ibeo LUX drow-down menu
  5. Ensure the LUX parameters match the following, with the exception of the TCP/IP window Vehicle velocity Vehicle yaw rate Steering wheel angle Vehicle mount position Measurement CAN interface Interface TCP/IP
Configure LUX mount position with Core

Follow these steps for each of the LUX sensors in the ibeo.HAD Feature Fusion System to update the mount position and orientation using the PolySync Core LUX driver.

  1. Connect the PolySync Core ECU to the network switch with the ibeo LUX sensors
  2. Calculate the X/Y/Z mount position, and roll/pitch/yaw orientation of each LUX sensor
  3. Follow the Adding the sensor to the SDF to define a LUX node in the Configurator
  4. Update the Configurator node entry with the sensor IP address
  5. Update the Configurator node entry with the sensor mount position
  6. Start the PolySync Core driver
    • The driver sets the sensors persistent memory with the current configuration on startup

Update ibeo Fusion ECU CAN configuration

  1. Connect an ECU to the network switch with the ibeo Feature Fusion ECU
  2. Set the ECU static IP address to match the ibeo Feature Fusion ECUs IP address
    • Default address: 192.168.0.100
  3. Open a web browser and enter the ibeo Feature Fusion IP address for the URL Ibeo home screen
  4. Click on “Packages”
  5. Select the active / desired Feature Fusion package to modify the configuration Configuration screen
  6. Use the file selector to open the CANParser.xml file CANParser.xml
  7. Create a backup of the existing configuration
  8. Replace the contents of CANParser.xml with the PolySync Core CAN configuration file
ibeo Feature Fusion CANParser.xml for PolySync Core
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE appbaseconf SYSTEM "appbaseconf.dtd">
<appbaseconf>
<system />
<canparserlist>
  <config type="CANParser" name="VEH_Velocity">
    <param name="Identifier">0x303</param>  <!-- 391d = 0x187h -->
<!--    Byteorder 0 1 2 3 4 5 6 7  -->
    <param name="Picture">-------- -------- -------- -------- -------- xxxxxxxx xxxxxxxx --------</param>
    <param name="UseLittleEndian">true</param>
    <param name="SignBitAvailable">true</param>
    <param name="TwosComplement">true</param>
    <param name="SignBit">55</param>
<!--    significance in m/s of one lsb -->
    <param name="Factor">0.010000</param>
    <param name="Offset">0.000000</param> <!-- in m/s -->
  </config>
  <config type="CANParser" name="VEH_YawRate">
    <param name="Identifier">0x306</param>  <!-- 391d = 0x187h -->
<!--    Byteorder 0 1 2 3 4 5 6 7  -->
    <param name="Picture">-------- -------- -------- -------- -------- xxxxxxxx xxxxxxxx --------</param>
    <param name="UseLittleEndian">true</param>
    <param name="SignBitAvailable">true</param>
    <param name="TwosComplement">true</param>
    <param name="SignBit">55</param>
<!--    significance in rad/s of one lsb -->
    <param name="Factor">0.000100</param>
    <param name="Offset">0.000000</param> <!-- in rad/s -->
  </config>
</canparserlist>
<processinggraph>
  <configlist>
    <config type="CANWorker" name="CANWorker">
      <param name="CANParsers">VEH_Velocity,VEH_YawRate</param>
    </config>
  </configlist>
</processinggraph>
</appbaseconf>

Configure the GPS/IMU node

Configure a GPS/IMU node as part of the PolySync runtime. This node will publish ps_platform_motion_msg data to the PolySync bus, where it’s accessed by the PolySync Core node communicating with the ibeo Feature Fusion ECU.

Check the sensors page, connect and configure one of the supported GPS/IMU nodes.

This GPS/IMU node must always be running when you start the PolySync Core node communicating with the ibeo Feature Fusion ECU.

Configuring the PolySync Core ECU

Linux network set up

The Ethernet network must be properly configured before PolySync or ibeo software can communicate with the sensor on the target ECU.

It’s highly recommended to use point-to-point Ethernet communication between the sensor and the ECU to minimize dropped frames and lower the latency. You may connect the sensor to a switch and be prone to high latency and dropped frames.

Setting the ECUs static IP address

Once the ibeo Feature Fusion ECUs IP address is known, set a static IP address for the ECUs NIC in the same IP subnet range as the ibeo ECUs.

For example if the ibeo ECUs address is 192.168.0.100, it’s said to be on the 192.168.0 subnet, and the ECU should be configured with IP address 192.168.0.X.

Configuring the PolySync driver

Adding the sensor to the SDF

Using the Configurator tool, add a sensor node to the SDF.

The ‘Node Interface’ name is ibeo-fusion-ecu.

CAN Hardware and Circuit Identifiers

Each CAN interface on the ECU has a unique identifier that enables software applications like the PolySync Core driver to identify and connect to the appropriate CAN channel.

Locate the CAN hardware and circuit identifiers based on the CAN drivers installed on your system.

Enter the CAN Channel 0 Hardware Identifier and CAN Channel 0 Circuit Identifier in the Configurator.

IO Configuration

Validating the sensor is properly configured

If you’re approaching a new PolySync system or need to validate an existing configuration you can use the following checklist to ensure the sensor is properly configured.

Setup checklist

If the sensor passes these checks then the PolySync dynamic driver will be able to communicate with the sensor.

  • The ibeo.HAD Feature Fusion ECU is powered with 12V
    • The ECU has an Ethernet connection to the Ethernet switch with the Ibeo LUX sensors
    • The ECU has an Ethernet connection to the PolySync ECU
  • The ibeo Sync box is powered, and connect to each LUX sensor
  • The CAN bus is terminated with a 120Ohm resistor
  • The ibeo.HAD Feature Fusion ECU can be pinged at the IP address from the Configurator
  • The ibeo.HAD Feature Fusion ECU web interface shows the Feature Fusion Package is started
  • You can connect to the ibeo.HAD Feature Fusion ECU with ibeo’s ILV software
  • The GPS/IMU PolySync node is connected to the ECU, and is publishing valid data

Starting the PolySync driver

The configuration set in the Configurator is loaded from the SDF when the dynamic driver starts. It connects to the sensor over the Ethernet and CAN interfaces, requests the data, and waits for confirmation that the sensor configuration is valid.

When the dynamic driver receives the first full frame of data it begins processing the data, abstracting the data from the OEM data structure in a high-level hardware agnostic message type. In this case the data is placed in a ps_objects_msg and ps_lidar_points_msg.

  1. Power the sensor and ECU on
  2. Optionally follow the setup checklist
  3. Start the PolySync Core manager
    • $ sudo service polysync-core-manager start
  4. Start the dynamic driver process

Starting the node manually on the command line

To start a dynamic driver node on the command line, the node must first be defined in the SDF using the Configurator application.

Each node defined in the Configurator has a unique node ID which points to the nodes configuration. This article explains how to find the node ID.

Command line flags and usage

Once the node ID is known (substitute for X), the dynamic driver node for the supported sensor can be started with the base command:

$ polysync-core-dynamic-driver -n X

Each sensor supports an array of command line arguments. To see a full list of command line arguments, pass the -h help flag:

$ polysync-core-dynamic-driver -n X -h  |  less

There’s a lot of output so we recommend you pipe the output to less, but it’s not required.

Flag Required Description Arguments
-c <N> No Use the provided CAN channel system index, instead of what is stored in the SDF The system index is the mechanism used by the linuxcan or socketcan drivers to enumerate the drivers to the linux kernel
-d No Print debug sensor information to stdout
-e No Export a JSON support string describing the interface, used by the SDF configuration tool
-h No Show the help message
-i <pal.so> No Use provided PAL interface file instead of what is stored in the SDF Path to the dynamic driver interface PAL shared object library
-n <N> Yes SDF node configuration identifier for the node SDF node ID from the Configurator, [0-65536]
-o No Reserved
-O No Check the node SDF configuration for required updates and exit option, returns exit status zero if no changes are required
-p <file.plog> No Use provided logfile in Record and Replay operations instead of the default File path to a PolySync plog logfile
-r <N> No SDF runtime configuration key that specifies the domain to operated under, the default domain is used otherwise Runtime configuration key, [0-65536]
-s <psync.sdf> No Use provided SDF instead of the default File path to an SDF file
-t No Run through the test interface to validate the configuration, the node will return after running the test
-u No Allow updates to the SDF configuration during the normal runtime if needed (does not exit)
-U No Update the node SDF configuration and exit
-w No Disable the hardware interface(s), allowing the node to run without hardware connected - also known as replay mode
DTC codes and common fixes
DTC value DTC name Fault description Notes
304 DTC_NOINTERFACE Interface not available Activated when the sensor is not reachable at the IP address set in the Configurator; activated when the sensor becomes unreachable during runtime

Accessing sensor data

When the dynamic driver node is operating in an OK state then data is being published to the global PolySync bus, and any node can subscribe to the high-level message type(s) output by the dynamic driver node.

There are several tools that PolySync provides to quickly validate that data exists on the bus.

Access sensor data with PolySync nodes that subscribe to the sensor’s output message types.

Input / output message types

Message Notes
Native byte stream stored as ps_byte_array_msg Ethernet TCP socket, default IP address: 10.152.36.100, default port: 12002
Subscribes to ps_platform_motion_msg Provides the sensor with valid vehicle speed and vehicle yaw-rate
Publishes ps_lidar_points_msg Lidar points from all LUX devices configured on the ibeo.HAD Feature Fusion ECU
Publishes ps_objects_msg Detected objects from all LUX devices configured on the ibeo.HAD Feature Fusion ECU

Enable and disable the publishing of specific message types in the Configurator.

Published message fields
ps_lidar_points_msg
Data Type Name Description Field populated by driver
ps_msg_header header PolySync message header. Yes
ps_sensor_descriptor sensor_descriptor Sensor descriptor. Yes
ps_timestamp start_timestamp Scan start timestamp. [microseconds] Yes
ps_timestamp end_timestamp Scan end timestamp. [microseconds] Yes
ps_native_timestamp native_start_timestamp Native timestamp for the scan start. Provided by some devices. Check ps_native_timestamp.format for meaning. Format value PSYNC_NATIVE_TIMESTAMP_FORMAT_INVALID means not available. Yes
sequence< ps_lidar_point > points LiDAR points. Yes

The buffer of LiDAR points contains one 360-degree scan from all connect LUX sensors.

ps_objects_msg
Data Type Name Description Field populated by driver
ps_msg_header header PolySync message header. Yes
ps_sensor_descriptor sensor_descriptor Sensor descriptor. Yes
sequence< ps_object > objects Objects. Yes

Filtering incoming data for this sensor

An application that subscribes to a given message type is able to see data from more than one sensor or source.

Applications can filter for specific sensors and data sources in the message callback in C applications, or the messageEvent in C++ applications.

Filter incoming messages for this sensor with ps_sensor_kind value 160.

You can find all sensor descriptor values in this article.

Resources and configuration tools

This section has supporting resources and tools that are referenced throughout the article.

ibeo Software Center

To download ibeo software you must create an account at https://my.ibeo-as.com/.

Once you have access to the download center, you can reference the following documentation:

  • General
    • ibeo License Manager: required to use ILV software to visualize, debug, and configure LUX sensors and the ibeo.HAD ECU
  • LIDAR
    • Ibeo Interface Specification [optional]: describes the Ethernet communcation protocol used by the ibeo sensor/ECU and PolySync Core driver
    • CAN Interface Description: describes the CAN communication protocol for vehicle ego-motion data
  • ibeo.HAD R2016-05
    • Feature Fusion User Manual for ibeo LUX based systems: operating manual describing the required configuration and operation of the Feature Fusion System
ILV

ILV is used to connect to individual LUX sensors and the ibeo.HAD Feature Fusion ECU.

It’s recommended to download and install this tool for debugging purposes. On Ubuntu systems, the libpopt-dev package is required to run ILV.

$ sudo apt-get install libpopt-dev

You must also download and install the Peak Linux drivers.

$ cd ~/Downloads/
$ tar xf peak-linux-driver-8.3.1.tar.gz
$ cd peak-linux-driver-8.3.1
$ make
$ sudo make install