Giter VIP home page Giter VIP logo

opendlv's Introduction

Moved to https://git.opendlv.org.

OpenDLV has moved to its own GitLab environment at git.opendlv.org/explore. Tutorials were also added att opendlv.org/learn.html.

OpenDLV - A modern microservice-based software ecosystem for self-driving vehicles.

OpenDLV is a modern open source software environment to support the development and testing of self-driving vehicles driven by the following design principles:

  • Implemented using high quality and modern C++14 with a strong focus is on code clarity, portability, and performance.
  • Based entirely on microservices.
  • Strong focus on deployment and ease of use: All our microservices are automatically built on Docker hub: We provide turn-key solutions with Docker images for amd64, armhf, and aarch64
  • Realized with libcluon - the world's first and only single-file, header-only middleware for distributed systems for robotic applications.
  • CI-Status: Build Status
  • License: License: GPLv3

Table of Contents

What is an OpenDLV session?

Applications based on OpenDLV are grouped in UDP multicast sessions belonging to IPv4 address 225.0.0.X, where X is from the within the range [1,254]. All microservices belonging to the same UDP multicast group are able to communicate with each other; thus, two applications running in different UDP multicast sessions do not see each other and are completely separated.

The actual UDP multicast session is selected using the commandline parameter --cid=111, where 111 would define the UDP multicast address 225.0.0.111. Microservices exchange data using the message Envelope that contains besides the actual message to send further meta information like sent and received timestamp and the point in time when the contained message was actually sampled. All messages are encoded in Google's Protobuf data format (example) that has been adjusted to preserve forwards and backwards compatibility using libcluon's native implementation of Protobuf.

An Envelope contains in its field serializedData the actually message to be exchanged that is encoded in Protobuf. Furthermore, the Envelope itself is also encoded in Protobuf but prepended with the byte sequence 0x0D 0xA4 as magic number, followed by three bytes 0xXX 0xYY 0xZZ describing the length in bytes of the Protobuf-encoded Envelope. The sequence 0xA4 0xXX 0xYY 0xZZ is encoded in little endian and 0xZZ is usually 0 in practice.

As participants in a UDP multicast session automatically receive any exchanged Envelopes, a receiver can differentiate what message to expect by checking Envelope's field dataType, which is referring to a message identifier (for instance, Envelope's message identifier is 1).

OpenDLV's microservices conform to the OpenDLV Standard Message Set that enables exchangeability across hardware/software interfaces to decouple high-level application logic from low-level device drivers. For instance, OpenDLV's hardware/software interface to access an Applanix GPS unit is called opendlv-device-gps-pos according to Applanix' internal data format POS that is used across several units in their product portfolio. The microservice opendlv-device-gps-pos provides GPS information in messages GeodeticWgs84Reading and GeodeticHeadingReading.

As the microservices for the various GPS units (like, for instance Trimble and Applanix) all broadcast the aforementioned messages, the hardware units can be exchanged transparently for the high-level application logic. However, when several GPS units shall be operated in parallel, it is necessary to distinguish between them. Therefore, the commandline parameter --id=Y can be provided, where Y is a positive number to differentiate between messages of the same type. At the receiving end, the value Y is made available in Envelope's field senderStamp. As an example, when using an Applanix unit next to a Trimble unit, the respective microservices could be supplied with the suffixes --id=1 and --id=2.

Dependencies

You need a C++14-compliant compiler to compile this project as it ships the following dependencies as part of the source distribution:

For building cluon-rec2fuse, libfuse is required.

Usage

We are providing the following microservices as multi-platform (amd64/x86_64, armhf, aarch64) Docker images:

OpenDLV.OS

Complete ArchLinux-based OpenDLV OS Operating System (start here if you want to initialize a blank computing unit - WARNING! All data will be erased!)

Hardware/Software Interfaces:


Gamepad (such as PS3 or PS4 controllers): opendlv-device-gamepad Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

  • Provides: device-specific messages
  • Command to run with Docker for PS3 controllers: docker run --rm -ti --init --net=host --device /dev/input/js0 chalmersrevere/opendlv-device-gamepad-multi:v0.0.10 --device=/dev/input/js0 --axis_leftright=0 --axis_updown=3 --freq=100 --acc_min=0 --acc_max=50 --dec_min=0 --dec_max=-10 --steering_min=-10 --steering_max=10 --steering_max_rate=5.0 --cid=111 --verbose
  • Command to run with Docker for PS4 controllers: docker run --rm -ti --init --net=host --device /dev/input/js0 chalmersrevere/opendlv-device-gamepad-multi:v0.0.10 --device=/dev/input/js0 --axis_leftright=0 --axis_updown=4 --freq=100 --acc_min=0 --acc_max=50 --dec_min=0 --dec_max=-10 --steering_min=-10 --steering_max=10 --steering_max_rate=5.0 --cid=111 --verbose
  • Section for docker-compose.yml for PS3 controllers:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-ps3controller:
        container_name: dev-ps3controller
        image: chalmersrevere/opendlv-device-gamepad-multi:v0.0.10
        restart: on-failure
        network_mode: "host"
        devices:
        - "/dev/input/js0:/dev/input/js0"
        command: "--device=/dev/input/js0 --axis_leftright=0 --axis_updown=3 --freq=100 --acc_min=0 --acc_max=50 --dec_min=0 --dec_max=-10 --steering_min=-10 --steering_max=10 --steering_max_rate=5.0 --cid=111"
  • Section for docker-compose.yml for PS4 controllers:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-ps4controller:
        container_name: dev-ps4controller
        image: chalmersrevere/opendlv-device-gamepad-multi:v0.0.10
        restart: on-failure
        network_mode: "host"
        devices:
        - "/dev/input/js0:/dev/input/js0"
        command: "--device=/dev/input/js0 --axis_leftright=0 --axis_updown=4 --freq=100 --acc_min=0 --acc_max=50 --dec_min=0 --dec_max=-10 --steering_min=-10 --steering_max=10 --steering_max_rate=5.0 --cid=111"

GPS devices

Applanix POS GPS/INSS units: opendlv-device-gps-pos Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-gps-pos:
        container_name: dev-gps-pos
        image: chalmersrevere/opendlv-device-gps-pos-multi:v0.0.11
        restart: on-failure
        network_mode: "host"
        command: "--pos_ip=10.42.42.40 --pos_port=5602 --cid=111"

OxTS GPS/INSS units: opendlv-device-gps-ncom Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-gps-ncom:
        container_name: dev-gps-ncom
        image: chalmersrevere/opendlv-device-gps-ncom-multi:v0.0.17
        restart: on-failure
        network_mode: "host"
        command: "--ncom_ip=0.0.0.0 --ncom_port=3000 --cid=111"

PEAK CAN GPS units: opendlv-device-gps-peak Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-gps-peak:
        container_name: dev-gps-peak
        image: chalmersrevere/opendlv-device-gps-peak-multi:v0.0.8
        restart: on-failure
        network_mode: "host"
        privileged: true
        command: "--can=can0 --cid=111"

Trimble GPS/INSS units: opendlv-device-gps-nmea Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

  • Provides: Latitude/Longitude (OpenDLV Standard Message Set v0.9.1)
  • Provides: Heading (OpenDLV Standard Message Set v0.9.1)
  • Command to run with Docker to connect to an NMEA stream provided from a given TCP server: docker run --init --rm --net=host chalmersrevere/opendlv-device-gps-nmea-multi:v0.0.14 --nmea_ip=10.42.42.112 --nmea_port=9999 --cid=111 --verbose
  • Command to run with Docker to let an NMEA stream reach this microservice with UDP (this application is listening for incoming UDP packets): docker run --init --rm --net=host chalmersrevere/opendlv-device-gps-nmea-multi:v0.0.14 --udp --nmea_ip=0.0.0.0 --nmea_port=9999 --cid=111 --verbose
  • Section for docker-compose.yml (to connect to a TCP server):
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-gps-nmea:
        container_name: dev-gps-nmea
        image: chalmersrevere/opendlv-device-gps-nmea-multi:v0.0.14
        restart: on-failure
        network_mode: "host"
        command: "--nmea_ip=10.42.42.112 --nmea_port=9999 --cid=111"
  • Section for docker-compose.yml (to let this microservice listen for UDP packets):
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-gps-nmea:
        container_name: dev-gps-nmea
        image: chalmersrevere/opendlv-device-gps-nmea-multi:v0.0.14
        restart: on-failure
        network_mode: "host"
        command: "--udp --nmea_ip=0.0.0.0 --nmea_port=9999 --cid=111"

LIDAR devices

Velodyne HDL32e lidar units: opendlv-device-lidar-hdl32e Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

  • Provides: PointCloudReading (OpenDLV Standard Message Set v0.9.1)
  • Command to run with Docker: docker run --init --rm --net=host chalmersrevere/opendlv-device-lidar-hdl32e-multi:v0.0.14 --hdl32e_ip=0.0.0.0 --hdl32e_port=2368 --cid=111 --verbose
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-lidar-hdl32e:
        container_name: dev-lidar-hdl32e
        image: chalmersrevere/opendlv-device-lidar-hdl32e-multi:v0.0.14
        restart: on-failure
        network_mode: "host"
        command: "--hdl32e_ip=0.0.0.0 --hdl32e_port=2368 --nogpstime --cid=111"

Velodyne VLP32c lidar units: opendlv-device-lidar-vlp32c Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

  • Provides: PointCloudReading (OpenDLV Standard Message Set v0.9.7)
  • Command to run with Docker: docker run --init --rm --net=host chalmersrevere/opendlv-device-lidar-vlp32c-multi:v0.0.3 --vlp32c_ip=0.0.0.0 --vlp32c_port=2368 --cid=111 --verbose
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-lidar-vlp32c:
        container_name: dev-lidar-vlp32c
        image: chalmersrevere/opendlv-device-lidar-vlp32c-multi:v0.0.3
        restart: on-failure
        network_mode: "host"
        command: "--vlp32c_ip=0.0.0.0 --vlp32c_port=2368 --cid=111"

Velodyne VLP16 lidar units: opendlv-device-lidar-vlp16 Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-lidar-vlp16c:
        container_name: dev-lidar-vlp16c
        image: chalmersrevere/opendlv-device-lidar-vlp16-multi:v0.0.10
        restart: on-failure
        network_mode: "host"
        command: "--vlp16_ip=0.0.0.0 --vlp16_port=2368 --cid=111"

RPLidar lidar units: opendlv-device-lidar-rplidar Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-lidar-rplidar:
        container_name: dev-lidar-rplidar
        image: chalmersrevere/opendlv-device-lidar-rplidar-multi:v0.0.4
        restart: on-failure
        network_mode: "host"
        devices:
        - "/dev/ttyUSB0:/dev/ttyUSB0"
        command: "--device=/dev/ttyUSB0 --cid=111"

Ultrasound devices

SRF08 devices connected via I2C bus: opendlv-device-ultrasonic-srf08 Docker (multi) Docker (amd64) Docker (armhf)

  • Provides: PointCloudReading
  • Command to run with Docker: docker run --rm -ti --net=host --privileged --device=/dev/i2c-1 chalmersrevere/opendlv-device-ultrasonic-srf08-multi:v0.0.10 opendlv-device-ultrasonic-srf08 --dev=/dev/i2c-1 --bus-address=112 --cid=111 --freq=5 --id=0
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-ultrasonic-srf08:
        container_name: dev-ultrasonic-srf08
        image: chalmersrevere/opendlv-device-ultrasonic-srf08-multi:v0.0.10
        restart: on-failure
        network_mode: "host"
        privileged: true
        devices:
        - "/dev/i2c-1:/dev/i2c-1"
        command: "opendlv-device-ultrasonic-srf08 --dev=/dev/i2c-1 --bus-address=112 --cid=111 --freq=5 --range=100 --gain=1 --id=0 --cid=111"

Camera devices and video processing

OpenDLV contains a highly modular and easy-to-use framework to grab video frames from various cameras, share them via shared memory, and encode/decode them into h264 frames to broadcast into an OD4Session for OpenDLV. The microservices are divided into video sources (e.g., opendlv-device-camera-v4l, opendlv-device-camera-opencv, opendlv-device-camera-ueye), or opendlv-device-camera-rpi) and video sinks (e.g., opendlv-video-h264-encoder) to process incoming video frames. Video sinks provide frames in two image formats: I420-encoded image and ARGB. The former format can be directly used for video compression (e.g., h264 encoding), while the latter can be directly used for image detection algorithms (opendlv-examples).

Video4Linux cameras (e.g., /dev/video0): opendlv-device-camera-v4l Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

  • This microservice interfaces with a Video4Linux-supported camera and provides both, an I420-encoded image and an ARGB-encoded image residing in two separate shared memory areas. Other OpenDLV microservices can attach to this shared memory area for further processing (for instance opendlv-video-h264-encoder).
  • The following image formats are supported:
    • MJPEG
    • YUYV422
  • Command to run with Docker: docker run --rm -ti --init --ipc=host -v /tmp:/tmp -e DISPLAY=$DISPLAY --device /dev/video0 chalmersrevere/opendlv-device-camera-v4l-multi:v0.0.8 --camera=/dev/video0 --width=640 --height=480 --freq=20 --verbose
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-camera-v4l:
        container_name: dev-camera-v4l
        image: chalmersrevere/opendlv-device-camera-v4l-multi:v0.0.8
        restart: on-failure
        ipc: "host"
        volumes:
        - /tmp:/tmp
        devices:
        - "/dev/video0:/dev/video0"
        command: "--camera=/dev/video0 --width=640 --height=480 --freq=20"

OpenCV-supported cameras: opendlv-device-camera-opencv Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

  • This microservice interfaces with an OpenCV-supported camera and provides both, an I420-encoded image and an ARGB-encoded image residing in two separate shared memory areas. Other OpenDLV microservices can attach to this shared memory area for further processing (for instance opendlv-video-h264-encoder). This microservice also allows to interface with network-attached cameras (i.e., those providing an MJPEG stream for example).
  • Command to run with Docker: docker run --rm -ti --init --ipc=host -e DISPLAY=$DISPLAY --device /dev/video0 -v /tmp:/tmp chalmersrevere/opendlv-device-camera-opencv-multi:v0.0.11 --camera=/dev/video0 --width=640 --height=480 --freq=20
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-camera-opencv:
        container_name: dev-camera-opencv
        image: chalmersrevere/opendlv-device-camera-opencv-multi:v0.0.11
        restart: on-failure
        ipc: "host"
        volumes:
        - /tmp:/tmp
        devices:
        - "/dev/video0:/dev/video0"
        command: "--camera=/dev/video0 --width=640 --height=480 --freq=20"

RaspberryPi camera: opendlv-device-camera-rpi Docker (armhf)

  • This microservice interfaces with an RPi camera and provides both, an I420-encoded image and an ARGB-encoded image residing in two separate shared memory areas. Other OpenDLV microservices can attach to this shared memory area for further processing (for instance opendlv-video-h264-encoder).
  • Command to run with Docker: docker run --rm -ti --init --ipc=host -e DISPLAY=$DISPLAY --device /dev/video0 -v /tmp:/tmp chalmersrevere/opendlv-device-camera-rpi-armhf:v0.0.6 --width=640 --height=480 --freq=20
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-camera-rpi:
        container_name: dev-camera-rpi
        image: chalmersrevere/opendlv-device-camera-rpi-armhf:v0.0.6
        restart: on-failure
        ipc: "host"
        volumes:
        - /tmp:/tmp
        command: "--width=640 --height=480 --freq=20"

IDS uEye cameras: opendlv-device-camera-ueye Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64) Build Status

  • This microservice interfaces with an IDS uEye camera and provides both, an I420-encoded image and an ARGB-encoded image residing in two separate shared memory areas. Other OpenDLV microservices can attach to this shared memory area for further processing (for instance opendlv-video-h264-encoder).
  • Command to run with Docker: docker run --rm -ti --init --ipc=host -v /tmp:/tmp --pid=host -v /var/run:/var/run -e DISPLAY=$DISPLAY chalmersrevere/opendlv-device-camera-ueye-multi:v0.0.5 --width=752 --height=480 --pixel_clock=10 --freq=20
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    dev-camera-ueye:
        container_name: dev-camera-ueye
        image: chalmersrevere/opendlv-device-camera-ueye-multi:v0.0.5
        restart: on-failure
        ipc: "host"
        pid: "host"
        volumes:
        - /tmp:/tmp
        - /var/run:/var/run
        command: "--width=752 --height=480 --pixel_clock=10 --freq=20"

Pylon-based GiGE cameras (ie., Basler): opendlv-device-camera-pylon:

  • This microservice interfaces with a pylon-based GiGE camera (eg., Basler cameras) and provides both, an I420-encoded image and an ARGB-encoded image residing in two separate shared memory areas. Other OpenDLV microservices can attach to this shared memory area for further processing (for instance opendlv-video-h264-encoder).
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    device-camera-pylon-amd64:
        build:
            context: https://github.com/chalmers-revere/opendlv-device-camera-pylon.git
            dockerfile: Dockerfile.amd64
        restart: on-failure
        ipc: "host"
        volumes:
        - /tmp:/tmp
        command: "--camera=0 --width=640 --height=480"

opendlv-video-h264-encoder to encode video frames from a shared memory into h264 frames (OpenH264 Video Codec provided by Cisco Systems, Inc.) as ImageReading (OpenDLV Standard Message Set v0.9.6):

  • This microservice attaches to an I420-encoded image residing in a shared memory area to encode it into an h264 frame to be broadcasted to other OpenDLV microservices.
  • During the Docker-ized build process for this microservice, Cisco's binary library is downloaded from Cisco's webserver and installed on the user's computer due to legal implications arising from the patents around the AVC/h264 format.
  • End user's notice according to AVC/H.264 Patent Portfolio License Conditions: When you are using this software and build scripts from this repository, you are agreeing to and obeying the terms under which Cisco is making the binary library available.
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    video-h264-encoder-amd64:
        build:
            context: https://github.com/chalmers-revere/opendlv-video-h264-encoder.git
            dockerfile: Dockerfile.amd64
        restart: on-failure
        network_mode: "host"
        ipc: "host"
        volumes:
        - /tmp:/tmp
        command: "--cid=111 --name=video0.i420 --width=640 --height=480"

opendlv-video-h264-decoder to decode h264 video frames from an ImageReading (OpenDLV Standard Message Set v0.9.6) into a shared memory (OpenH264 Video Codec provided by Cisco Systems, Inc.):

  • During the Docker-ized build process for this microservice, Cisco's binary library is downloaded from Cisco's webserver and installed on the user's computer due to legal implications arising from the patents around the AVC/h264 format.
  • End user's notice according to AVC/H.264 Patent Portfolio License Conditions: When you are using this software and build scripts from this repository, you are agreeing to and obeying the terms under which Cisco is making the binary library available.
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
   video-h264-decoder-amd64:
       container_name: video-h264-decoder-amd64
       build:
           context: https://github.com/chalmers-revere/opendlv-video-h264-decoder.git
           dockerfile: Dockerfile.amd64
       restart: on-failure
       network_mode: "host"
       ipc: "host"
       volumes:
       - /tmp:/tmp
       environment:
       - DISPLAY=${DISPLAY}
       command: "--cid=111 --name=imageData"

opendlv-video-x264-encoder to encode video frames from a shared memory into h264 frames as ImageReading (OpenDLV Standard Message Set v0.9.6):

  • This microservice attaches to an I420-encoded image residing in a shared memory area to encode it into an h264 frame to be broadcasted to other OpenDLV microservices.
  • Due to legal implications arising from the patents around the AVC/h264 format, we are not distributing binaries or Docker images but only provide build instructions that can be easily integrated with a docker-compose.yml file.
  • Section for docker-compose.yml to build for amd64:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    video-x264-encoder-amd64:
        container_name: video-x264-encoder-amd64
        build:
            context: https://github.com/chalmers-revere/opendlv-video-x264-encoder.git
            dockerfile: Dockerfile.amd64
        restart: on-failure
        network_mode: "host"
        ipc: "host"
        volumes:
        - /tmp:/tmp
        command: "--cid=111 --name=video0.i420 --width=640 --height=480"
  • Section for docker-compose.yml to build for armhf:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    video-x264-encoder-armhf:
        container_name: video-x264-encoder-armhf
        build:
            context: https://github.com/chalmers-revere/opendlv-video-x264-encoder.git
            dockerfile: Dockerfile.armhf
        restart: on-failure
        network_mode: "host"
        ipc: "host"
        volumes:
        - /tmp:/tmp
        command: "--cid=111 --name=video0.i420 --width=640 --height=480"
  • Section for docker-compose.yml to build for aarch64:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    video-x264-encoder-aarch64:
        container_name: video-x264-encoder-aarch64
        build:
            context: https://github.com/chalmers-revere/opendlv-video-x264-encoder.git
            dockerfile: Dockerfile.aarch64
        restart: on-failure
        network_mode: "host"
        ipc: "host"
        volumes:
        - /tmp:/tmp
        command: "--cid=111 --name=video0.i420 --width=640 --height=480"

opendlv-video-vpx-encoder to encode video frames from a shared memory into VP8 or VP9 frames as ImageReading (OpenDLV Standard Message Set v0.9.6): opendlv-video-vpx-encoder Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64)

  • Command to run with Docker: docker run --rm -ti --init --net=host --ipc=host -v /tmp:/tmp chalmersrevere/opendlv-video-vpx-encoder-multi:v0.0.7 --cid=111 --name=video0.i420 --width=640 --height=480 --vp8
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
   video-vpx-encoder:
       container_name: video-vpx-encoder
       image: chalmersrevere/opendlv-video-vpx-encoder-multi:v0.0.7
       restart: on-failure
       network_mode: "host"
       ipc: "host"
       volumes:
       - /tmp:/tmp
       environment:
       - DISPLAY=${DISPLAY}
       command: "--cid=111 --name=video0.i420 --width=640 --height=480 --vp8"

opendlv-video-vpx-decoder to decode h264 video frames from an ImageReading (OpenDLV Standard Message Set v0.9.6) into a shared memory: opendlv-video-vpx-decoder Docker (multi) Docker (amd64) Docker (armhf) Docker (aarch64)

  • Command to run with Docker: docker run --rm -ti --init --net=host --ipc=host -v /tmp:/tmp -e DISPLAY=$DISPLAY chalmersrevere/opendlv-video-vpx-decoder-multi:v0.0.7 --cid=253 --name=video0.arg0 --verbose
  • Section for docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
   video-vpx-decoder:
       container_name: video-vpx-decoder
       image: chalmersrevere/opendlv-video-vpx-decoder-multi:v0.0.7
       restart: on-failure
       network_mode: "host"
       ipc: "host"
       volumes:
       - /tmp:/tmp
       environment:
       - DISPLAY=${DISPLAY}
       command: "--cid=111 --name=imageData"

Streaming Tools:

cluon-record to record Envelopes from a running OD4Session with remote control start/stop for recordings; the remote control can be triggered from OpenDLV Vehicle View:

  • Example for a docker-compose.yml:
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    cluon-record:
       container_name: cluon-record
       image: chrberger/cluon-record-multi:v0.0.1
       restart: on-failure
       network_mode: "host"
       volumes:
       - ~/recordings:/recordings
       working_dir: /recordings
       command: "--cid=111 --remote"

---
### Data Post Processing:
#### [rec2csv-png](https://github.com/chalmers-revere/rec2csv-png) to extract messages as .csv and h264 frames as separate .png files from a .rec file from a recorded OpenDLV session (OpenH264 Video Codec provided by Cisco Systems, Inc.):
* Example for a `docker-compose.yml`:
```yml
version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    rec2csv_png:
       container_name: rec2csv_png
       build:
           context: https://github.com/chalmers-revere/rec2csv-png.git
           dockerfile: Dockerfile.amd64
       restart: on-failure
       volumes:
       - .:/opt/data
       working_dir: /opt/data
       command: "--rec=YourRecording.rec --odvd=YourMessageSpec.odvd"

cluon-rec2fuse to mount a recording file to a folder and dynamically map its content as .csv files:

  docker run --rm -ti -v $PWD/myrecording.rec:/opt/input.rec \
                    -v $PWD/opendlv.odvd:/opt/odvd \
                    -v $PWD/mnt:/opt/output:shared \
                    --cap-add SYS_ADMIN \
                    --cap-add MKNOD \
                    --security-opt apparmor:unconfined \
                    --device=/dev/fuse \
                    -v /etc/passwd:/etc/passwd:ro \
                    -v /etc/group:/etc/group \
                    chrberger/cluon-rec2fuse-amd64:v0.0.104 \
                    /bin/sh -c "chown $UID:$UID /opt/output && \
                    su -s /bin/sh $USER -c 'cluon-rec2fuse --rec=/opt/input.rec --odvd=/opt/odvd -f /opt/output' \
                    && tail -f /dev/null"

Visualizations:

cluon-livefeed to display any messages exchanged in the communication session 111 on console: docker run --rm -ti --init --net=host chrberger/cluon-livefeed-multi:v0.0.122 --cid=111

opendlv-signal-viewer to view any messages from the OpenDLV Standard Message Set exchanged in the communication session 111 (after starting this microservice, point your web-browser to the computer's IP address, port 8080): docker run --rm --net=host -p 8080:8080 chalmersrevere/opendlv-signal-viewer-multi:v0.0.8 --cid=111

version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    signal-viewer:
        container_name: signal-viewer
        image: chalmersrevere/opendlv-signal-viewer-multi:v0.0.8
        restart: on-failure
        network_mode: "host"
        ports:
        - "8080:8080"
        command: "--cid=111"

screenshot from signal viewer

opendlv-vehicle-view to view vehicle messages from the OpenDLV Standard Message Set exchanged in the communication session 111 (after starting this microservice, point your web-browser to the computer's IP address, port 8081): docker run --rm --net=host --name=opendlv-vehicle-view -v ~/recordings:/opt/vehicle-view/recordings -v /var/run/docker.sock:/var/run/docker.sock -p 8081:8081 chalmersrevere/opendlv-vehicle-view-multi:v0.0.60

version: '2' # Must be present exactly once at the beginning of the docker-compose.yml file
services:    # Must be present exactly once at the beginning of the docker-compose.yml file
    vehicle-view:
        container_name: opendlv-vehicle-view
        image: chalmersrevere/opendlv-vehicle-view-multi:v0.0.60
        restart: on-failure
        network_mode: "host"
        volumes:
        - ~/recordings:/opt/vehicle-view/recordings
        - /var/run/docker.sock:/var/run/docker.sock
        ports:
        - "8081:8081"

screenshot from vehicle view

Build from sources on the example of Ubuntu 16.04 LTS

To build this software, you need cmake, C++14 or newer, and make. Having these preconditions, update the contained submodules first.

git submodule update --init --recursive
git submodule update --remote --merge
git submodule status

Now, you can change into the various sub-folders and run cmake and make as follows:

mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release ..
make && make test && make install

License

  • This project is released under the terms of the GNU GPLv3 License.

Publications

The following list contains publications related to the OpenDLV Software Ecosystem:

opendlv's People

Contributors

bellonemauro avatar bergstrj avatar bjornborg avatar caeruleusaqua avatar chrberger avatar fannygu avatar fgiaimo avatar hangyin2015 avatar jay-man avatar mathiasand avatar matsjsvensson avatar olbender avatar phmasek avatar plankton555 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

opendlv's Issues

Setting width and height of camera stream (cv::VideoCapture) does nothing

In the proxy-camera (opencvdevice.cpp), the width and height properties of the cv::VideoCapture are set. However, the change does never seem to be applied. The following code

if (m_capture->isOpened()) {
  std::cout << "Open. width: " << a_width << " height: " << a_height << std::endl;
  m_capture->set(CV_CAP_PROP_FRAME_WIDTH, a_width);
  m_capture->set(CV_CAP_PROP_FRAME_HEIGHT, a_height);
  std::cout << "After. width: " << m_capture->get(CV_CAP_PROP_FRAME_WIDTH) << " height: " << m_capture->get(CV_CAP_PROP_FRAME_HEIGHT) << std::endl;
}

may for example result in the output

Open. width: 800 height: 600
After. width: 1280 height: 720

In the case above, the image read from the cv::VideoCapture was stored in a shared image of a different size. This caused the image, when it was unpacked from the shared image, to be corrupt/wrong.

This happened on a machine running Ubuntu 14.04 LTS.

After a short discussion with @chrberger, the problem might be caused by incorrect OpenCV/v4l on the machine?

FindodDataStructureGenerator

Hello,
this variable was not automatically found in cmake:

CMake Error at CMakeLists.txt:63 (include):
include could not find load file:

FindodDataStructureGenerator

Mauro

Compile error when adding custom message

When adding the below message to file opendlv/resources/odvd/ODVDOpenDLVData.odvd

message opendlv.logic.coordination.IntersectionAccessRequest [id = 303] {
  odcore::data::TimeStamp timeOfRequest [id = 1];
  string intention [id = 2];
  bool ack [id = 3];
  opendlv::data::environment::WGS84Coordinate positionAtRequest [id = 4];
}

the auto generated TestSuits fails; which gives the following compile error:

libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::WGS84Coordinate()'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::toString[abi:cxx11]() const'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::~WGS84Coordinate()'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::operator=(opendlv::data::environment::WGS84Coordinate const&)'
libodvdopendlvdata.so: undefined reference to `geodetic::WGS84::WGS84(geodetic::WGS84 const&)'
libodvdopendlvdata.so: undefined reference to `vtable for opendlv::data::environment::WGS84Coordinate'
collect2: error: ld returned 1 exit status
CMakeFiles/opendlv_logic_coordination_IntersectionAccessRequestTestSuite.h-TestSuite.dir/build.make:101: recipe for target 'opendlv_logic_coordination_IntersectionAccessRequestTestSuite.h-TestSuite' failed
make[5]: *** [opendlv_logic_coordination_IntersectionAccessRequestTestSuite.h-TestSuite] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/opendlv_logic_coordination_IntersectionAccessRequestTestSuite.h-TestSuite.dir/all' failed
make[4]: *** [CMakeFiles/opendlv_logic_coordination_IntersectionAccessRequestTestSuite.h-TestSuite.dir/all] Error 2
make[4]: *** Waiting for unfinished jobs....
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::WGS84Coordinate()'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::toString[abi:cxx11]() const'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::~WGS84Coordinate()'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::operator=(opendlv::data::environment::WGS84Coordinate const&)'
libodvdopendlvdata.so: undefined reference to `geodetic::WGS84::WGS84(geodetic::WGS84 const&)'
libodvdopendlvdata.so: undefined reference to `vtable for opendlv::data::environment::WGS84Coordinate'
collect2: error: ld returned 1 exit status
CMakeFiles/opendlv_knowledge_InsightTestSuite.h-TestSuite.dir/build.make:101: recipe for target 'opendlv_knowledge_InsightTestSuite.h-TestSuite' failed
make[5]: *** [opendlv_knowledge_InsightTestSuite.h-TestSuite] Error 1
CMakeFiles/Makefile2:141: recipe for target 'CMakeFiles/opendlv_knowledge_InsightTestSuite.h-TestSuite.dir/all' failed
make[4]: *** [CMakeFiles/opendlv_knowledge_InsightTestSuite.h-TestSuite.dir/all] Error 2
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::WGS84Coordinate()'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::toString[abi:cxx11]() const'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::~WGS84Coordinate()'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::operator=(opendlv::data::environment::WGS84Coordinate const&)'
libodvdopendlvdata.so: undefined reference to `geodetic::WGS84::WGS84(geodetic::WGS84 const&)'
libodvdopendlvdata.so: undefined reference to `vtable for opendlv::data::environment::WGS84Coordinate'
collect2: error: ld returned 1 exit status
CMakeFiles/opendlv_proxy_AnalogRequestTestSuite.h-TestSuite.dir/build.make:101: recipe for target 'opendlv_proxy_AnalogRequestTestSuite.h-TestSuite' failed
make[5]: *** [opendlv_proxy_AnalogRequestTestSuite.h-TestSuite] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/opendlv_proxy_AnalogRequestTestSuite.h-TestSuite.dir/all' failed
make[4]: *** [CMakeFiles/opendlv_proxy_AnalogRequestTestSuite.h-TestSuite.dir/all] Error 2
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::WGS84Coordinate()'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::toString[abi:cxx11]() const'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::~WGS84Coordinate()'
libodvdopendlvdata.so: undefined reference to `opendlv::data::environment::WGS84Coordinate::operator=(opendlv::data::environment::WGS84Coordinate const&)'
libodvdopendlvdata.so: undefined reference to `geodetic::WGS84::WGS84(geodetic::WGS84 const&)'
libodvdopendlvdata.so: undefined reference to `vtable for opendlv::data::environment::WGS84Coordinate'
collect2: error: ld returned 1 exit status
CMakeFiles/opendlv_sensation_GeolocationTestSuite.h-TestSuite.dir/build.make:101: recipe for target 'opendlv_sensation_GeolocationTestSuite.h-TestSuite' failed
make[5]: *** [opendlv_sensation_GeolocationTestSuite.h-TestSuite] Error 1
CMakeFiles/Makefile2:178: recipe for target 'CMakeFiles/opendlv_sensation_GeolocationTestSuite.h-TestSuite.dir/all' failed
make[4]: *** [CMakeFiles/opendlv_sensation_GeolocationTestSuite.h-TestSuite.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make[3]: *** [all] Error 2
CMakeFiles/libodvdopendlvdata.dir/build.make:114: recipe for target 'libodvdopendlvdata-prefix/src/libodvdopendlvdata-stamp/libodvdopendlvdata-build' failed
make[2]: *** [libodvdopendlvdata-prefix/src/libodvdopendlvdata-stamp/libodvdopendlvdata-build] Error 2
CMakeFiles/Makefile2:141: recipe for target 'CMakeFiles/libodvdopendlvdata.dir/all' failed
make[1]: *** [CMakeFiles/libodvdopendlvdata.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
make: *** [buildComplete] Error 2

Removing the last entry from the message
opendlv::data::environment::WGS84Coordinate positionAtRequest [id = 4];
it works.

According to @olbender It might be that the WGS84Coordinate is defined in another ODVD file.

Fixing BPP from 24 to 3 to fix segfault in proxy-camera/memcpy

Adjusting the scope of variables in DetectLane

[application/perception/src/detectlane/detectlane.cpp:177]: (style) The scope of the variable 'laneOffset' can be reduced.
[application/perception/src/detectlane/detectlane.cpp:180]: (style) The scope of the variable 'p1' can be reduced.
[application/perception/src/detectlane/detectlane.cpp:180]: (style) The scope of the variable 'p2' can be reduced.

Suggestion: use CSVFromVisitableVisitor to create .csv file

Once the V2v-data is available as messages in the .odvd file, we can use the CSVFromVisitableVisitor to transform the fields from a concrete message into a CSV file:

Examples:

Replacing:

Potentially here as well? Checking with @olbender

Remove:

Compilation fails with OpenDLV.core v0.8.0

@fgiaimo After activating the DBC changes in OpenDLV.core (v.0.8.0), OpenDLV (branch: 2016Q4.refactoring.dbc) does not compile and resulting with the following error:

Could you please check and fix this so that we can proceed merging the changes to the higher levels?

/opt/opendlv.sources/code/system/application/knowledge/src/gcdc16/rule/intersection/intersection.cpp: In member function 'virtual void opendlv::knowledge::gcdc16::rule::intersection::Intersection::nextContainer(odcore::data::Container&)':
/opt/opendlv.sources/code/system/application/knowledge/src/gcdc16/rule/intersection/intersection.cpp:187:71: error: 'opendlv::proxy::reverefh16::Propulsion' has not been declared
} else if (a_container.getDataType() == opendlv::proxy::reverefh16::Propulsion::ID()) {
^
/opt/opendlv.sources/code/system/application/knowledge/src/gcdc16/rule/intersection/intersection.cpp:188:43: error: 'Propulsion' is not a member of 'opendlv::proxy::reverefh16'
auto propulsion = a_container.getDataopendlv::proxy::reverefh16::Propulsion();
^
/opt/opendlv.sources/code/system/application/knowledge/src/gcdc16/rule/intersection/intersection.cpp:188:43: error: 'Propulsion' is not a member of 'opendlv::proxy::reverefh16'
/opt/opendlv.sources/code/system/application/knowledge/src/gcdc16/rule/intersection/intersection.cpp:188:83: error: no matching function for call to 'odcore::data::Container::getData()'
auto propulsion = a_container.getDataopendlv::proxy::reverefh16::Propulsion();
^
In file included from /opt/opendlv.sources/code/system/application/knowledge/src/gcdc16/rule/intersection/intersection.cpp:26:0:
/opt/od4/include/opendavinci/odcore/data/Container.h:104:26: note: candidate: template T odcore::data::Container::getData()
inline T getData() {
^
/opt/od4/include/opendavinci/odcore/data/Container.h:104:26: note: template argument deduction/substitution failed:
/opt/opendlv.sources/code/system/application/knowledge/src/gcdc16/rule/intersection/intersection.cpp:188:83: error: template argument 1 is invalid
auto propulsion = a_container.getDataopendlv::proxy::reverefh16::Propulsion();
^
application/knowledge/CMakeFiles/opendlv-system-application-knowledgelib-static.dir/build.make:110: recipe for target 'application/knowledge/CMakeFiles/opendlv-system-application-knowledgelib-static.dir/src/gcdc16/rule/intersection/intersection.cpp.o' failed
make[2]: *** [application/knowledge/CMakeFiles/opendlv-system-application-knowledgelib-static.dir/src/gcdc16/rule/intersection/intersection.cpp.o] Error 1
CMakeFiles/Makefile2:757: recipe for target 'application/knowledge/CMakeFiles/opendlv-system-application-knowledgelib-static.dir/all' failed
make[1]: *** [application/knowledge/CMakeFiles/opendlv-system-application-knowledgelib-static.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 34%] Building CXX object application/action/CMakeFiles/opendlv-system-application-action-act.dir/src/act/main.cpp.o
[ 34%] Building CXX object application/sensation/CMakeFiles/opendlv-system-application-sensationlib-static.dir/src/proprioception/balance/balance.cpp.o
[ 35%] Linking CXX executable opendlv-system-application-action-act
In file included from /opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp:35:0:
/opt/opendlv.sources/code/system/application/sensation/include/geolocation/geolocation.hpp:85:31: error: 'Propulsion' in namespace 'opendlv::proxy::reverefh16' does not name a type
opendlv::proxy::reverefh16::Propulsion m_propulsionReading;
^
/opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp: In constructor 'opendlv::sensation::geolocation::Geolocation::Geolocation(const int32_t&, char**)':
/opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp:57:7: error: class 'opendlv::sensation::geolocation::Geolocation' does not have any field named 'm_propulsionReading'
, m_propulsionReading()
^
/opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp: In member function 'virtual void opendlv::sensation::geolocation::Geolocation::nextContainer(odcore::data::Container&)':
/opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp:98:62: error: 'opendlv::proxy::reverefh16::Propulsion' has not been declared
} else if(a_c.getDataType() == opendlv::proxy::reverefh16::Propulsion::ID()) {
^
/opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp:99:5: error: 'm_propulsionReading' was not declared in this scope
m_propulsionReading = a_c.getDataopendlv::proxy::reverefh16::Propulsion();
^
/opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp:99:39: error: 'Propulsion' is not a member of 'opendlv::proxy::reverefh16'
m_propulsionReading = a_c.getDataopendlv::proxy::reverefh16::Propulsion();
^
/opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp:99:39: error: 'Propulsion' is not a member of 'opendlv::proxy::reverefh16'
/opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp:99:79: error: no matching function for call to 'odcore::data::Container::getData()'
m_propulsionReading = a_c.getDataopendlv::proxy::reverefh16::Propulsion();
^
In file included from /opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp:29:0:
/opt/od4/include/opendavinci/odcore/data/Container.h:104:26: note: candidate: template T odcore::data::Container::getData()
inline T getData() {
^
/opt/od4/include/opendavinci/odcore/data/Container.h:104:26: note: template argument deduction/substitution failed:
/opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp:99:79: error: template argument 1 is invalid
m_propulsionReading = a_c.getDataopendlv::proxy::reverefh16::Propulsion();
^
/opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp: In member function 'virtual odcore::data::dmcp::ModuleExitCodeMessage::ModuleExitCode opendlv::sensation::geolocation::Geolocation::body()':
/opt/opendlv.sources/code/system/application/sensation/src/geolocation/geolocation.cpp:191:40: error: 'm_propulsionReading' was not declared in this scope
float const v = static_cast(m_propulsionReading.getPropulsionShaftVehicleSpeed()/3.6);
^
application/sensation/CMakeFiles/opendlv-system-application-sensationlib-static.dir/build.make:158: recipe for target 'application/sensation/CMakeFiles/opendlv-system-application-sensationlib-static.dir/src/geolocation/geolocation.cpp.o' failed
make[2]: *** [application/sensation/CMakeFiles/opendlv-system-application-sensationlib-static.dir/src/geolocation/geolocation.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
[ 35%] Built target opendlv-system-application-action-act
In file included from /opt/opendlv.sources/code/system/application/sensation/src/geolocation/main.cpp:20:0:
/opt/opendlv.sources/code/system/application/sensation/include/geolocation/geolocation.hpp:85:31: error: 'Propulsion' in namespace 'opendlv::proxy::reverefh16' does not name a type
opendlv::proxy::reverefh16::Propulsion m_propulsionReading;
^
application/sensation/CMakeFiles/opendlv-system-application-sensationlib-static.dir/build.make:182: recipe for target 'application/sensation/CMakeFiles/opendlv-system-application-sensationlib-static.dir/src/geolocation/main.cpp.o' failed
make[2]: *** [application/sensation/CMakeFiles/opendlv-system-application-sensationlib-static.dir/src/geolocation/main.cpp.o] Error 1
CMakeFiles/Makefile2:1343: recipe for target 'application/sensation/CMakeFiles/opendlv-system-application-sensationlib-static.dir/all' failed
make[1]: *** [application/sensation/CMakeFiles/opendlv-system-application-sensationlib-static.dir/all] Error 2

Suggestion: use Eigen3 shipped with OpenDaVINCI to simplify code

Duplicated code in DetectLane and DetectVehicle

Some functions for transforming point coordinates using transformation matrices are directly copied from DetectLane to DetectVehicle. Should be fixed in the future.

Known examples are:
ReadMatrix()
TransformPointToGlobalFrame()

Separation declaration from definition + transform to class

Replacing shared_ptr<cv::Mat> with cv:Mat

GPS data in .rec files

The data I have has been collected using OpenDLV, an open-source microservice-based ecosystem for self-driving vehicles developed by Revere at Chalmers University of Technology. In a driving session, data has been collected from multiple sources/ sensors in .rec files. For example, images from each camera can be put in a separate .rec file, and other messages (like altitude, longitude, latitude, speed, etc.) can be clubbed together and be put in a single .rec file.

Each message has a unique message type/code.

How do I interpret this data and plot graphs to identify idle points of the vehicle?

libstdc++fs not available on ARM (qemu)?

Hi @olbender, our Jenkins failed to compile OpenDLV for ARM as libstdc++fs seems to be unavailable:

Output during CMake:
-- Could not find libstdc++fs.

Compilation output:
libopendlv-tools-signaladapterlib-static.a(signaladapter.cpp.o): In function opendlv::tools::signaladapter::SignalAdapter::GetListOfLibrariesToLoad(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)': /opt/opendlv.sources/code/tools/signaladapter/src/signaladapter.cpp:93: undefined reference to std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/opt/opendlv.sources/code/tools/signaladapter/src/signaladapter.cpp:93: undefined reference to std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()' /opt/opendlv.sources/code/tools/signaladapter/src/signaladapter.cpp:93: undefined reference to std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator*() const'
/opt/opendlv.sources/code/tools/signaladapter/src/signaladapter.cpp:93: undefined reference to std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::operator++()' /opt/opendlv.sources/code/tools/signaladapter/src/signaladapter.cpp:93: undefined reference to std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/opt/opendlv.sources/code/tools/signaladapter/src/signaladapter.cpp:93: undefined reference to std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()' /opt/opendlv.sources/code/tools/signaladapter/src/signaladapter.cpp:93: undefined reference to std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
/opt/opendlv.sources/code/tools/signaladapter/src/signaladapter.cpp:93: undefined reference to std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()' /opt/opendlv.sources/code/tools/signaladapter/src/signaladapter.cpp:93: undefined reference to std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()'
libopendlv-tools-signaladapterlib-static.a(signaladapter.cpp.o):/opt/opendlv.sources/code/tools/signaladapter/src/signaladapter.cpp:93: more undefined references to std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::~recursive_directory_iterator()' follow libopendlv-tools-signaladapterlib-static.a(signaladapter.cpp.o): In function std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::recursive_directory_iterator(std::experimental::filesystem::v1::__cxx11::path const&)':
/usr/include/c++/5/experimental/fs_dir.h:269: undefined reference to std::experimental::filesystem::v1::__cxx11::recursive_directory_iterator::recursive_directory_iterator(std::experimental::filesystem::v1::__cxx11::path const&, std::experimental::filesystem::v1::directory_options, std::error_code*)' libopendlv-tools-signaladapterlib-static.a(signaladapter.cpp.o): In function std::experimental::filesystem::v1::__cxx11::path::path<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::experimental::filesystem::v1::__cxx11::path>(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)':
/usr/include/c++/5/experimental/fs_path.h:167: undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
collect2: error: ld returned 1 exit status
signaladapter/CMakeFiles/opendlv-tools-signaladapter.dir/build.make:118: recipe for target 'signaladapter/opendlv-tools-signaladapter' failed
make[5]: *** [signaladapter/opendlv-tools-signaladapter] Error 1
CMakeFiles/Makefile2:87: recipe for target 'signaladapter/CMakeFiles/opendlv-tools-signaladapter.dir/all' failed
make[4]: *** [signaladapter/CMakeFiles/opendlv-tools-signaladapter.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make[3]: *** [all] Error 2
CMakeFiles/tools.dir/build.make:113: recipe for target 'tools-prefix/src/tools-stamp/tools-build' failed
make[2]: *** [tools-prefix/src/tools-stamp/tools-build] Error 2
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/tools.dir/all' failed
make[1]: *** [CMakeFiles/tools.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

Could you add a check in this CMakeLists.txt (https://github.com/chalmers-revere/opendlv/blob/master/code/tools/signaladapter/CMakeLists.txt) to make sure that this code is only compiled if libstdc++fs is present?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.