INTRODUCTION AND INTEGRATION OF DRIVEWORKS ON DRIVE PX2 Aaraadhya - - PowerPoint PPT Presentation

introduction and integration of driveworks on drive px2
SMART_READER_LITE
LIVE PREVIEW

INTRODUCTION AND INTEGRATION OF DRIVEWORKS ON DRIVE PX2 Aaraadhya - - PowerPoint PPT Presentation

INTRODUCTION AND INTEGRATION OF DRIVEWORKS ON DRIVE PX2 Aaraadhya Narra, Alessandro Ferrari WHAT WILL YOU LEARN IN THIS LAB? Overview Introduction to Drive PX2 Hardware setup with Drive PX2 Developing with Driveworks on Drive PX2 2 GETTING


slide-1
SLIDE 1

Aaraadhya Narra, Alessandro Ferrari

INTRODUCTION AND INTEGRATION OF DRIVEWORKS ON DRIVE PX2

slide-2
SLIDE 2

2

WHAT WILL YOU LEARN IN THIS LAB?

Introduction to Drive PX2 Hardware setup with Drive PX2 Developing with Driveworks on Drive PX2

Overview

slide-3
SLIDE 3

3

GETTING STARTED

Please log into the host based on your PX2 # PX2 1 – 5 : HOS T 1 IP – 10.30.25.189 PX2 6 – 10 : HOS T 2 IP – 10.30.25.188 PX2 11 – 15 : HOS T 3 IP – 10.30.25.174 PX2 16 – 20 : HOS T 4 IP – 10.30.25.176 PX2 21 – 25 : HOS T 5 IP – 10.30.25.90 Host Password: nvidia Example USER: nvidia_19b Example <#PX2>=19 Example <USER_LETTER>=b

Log into the Host Machine

$ export HOST_IP=<HOST_IP> $ export USER=nvidia_<PX2#><USER_LETTER> (USER_LETTER LOWERCASE!!!) $ setxkbmap gb

slide-4
SLIDE 4

4

HARDWARE SETUP ON DRIVE PX2

slide-5
SLIDE 5

5

DRIVE PLATFORM

DriveWorks CUDA, TensorRT DRIVE PX 2 —S ystem S

  • ftware

DRIVE PX 2 —S ystem Hardware Vehicle Control DNNs and Autonomous Driving Applications S ensors HD Maps

slide-6
SLIDE 6

6

DRIVE™ PX2

AI S upercomputer for S elf Driving Cars Drive™ PX2 2 Parker S

  • C - CPU: 4xA57 and 2xDenver Cores & Pascal iGPU

2 Pascal dGPU Connect up to 12 cameras Rapidly growing ecosystem of supported sensors and storage solutions

Eg: Lidars, Radars, UltraS

  • nics etc.

Introduction

slide-7
SLIDE 7

7

OUT OF THE BOX

US B 2.0 Type A to Type A DRIVE PX2 Vehicle Cable Harness US B 3.0 Hub With Power S upply AC Power S upply

slide-8
SLIDE 8

8

T

  • p

View Front View

DRIVE™PX2 CONNECTORS

slide-9
SLIDE 9

9

LINs CANs GB Ethernet FlexRays AURIX Console Interface Ignition Power Supply In

DRIVE™PX2 VEHICLE HARNES S

AURIX Programming Switch**

** Note: Make sure that the AURIX Programming S witch is in the RUN position.

slide-10
SLIDE 10

10 10

POWER ON THE PX2

25%

slide-11
SLIDE 11

11

DRIVEWORKS

slide-12
SLIDE 12

12

DRIVE PLATFORM

DriveWorks CUDA, CuDNN, TensorRT NVMedia DRIVE PX 2 —S ystem S

  • ftware

DRIVE PX 2 —S ystem Hardware Vehicle Control DNNs and Autonomous Driving Applications S ensors HD Maps

slide-13
SLIDE 13

13

DRIVEWORKS

APIs, Tools & S amples

Input Perceive, Localize & Visualize Vehicle Control

Samples/ Preview

  • S

ensor visualization

  • DriveNet
  • LaneNet
  • S

everal CV examples

  • Occupancy Grid
  • Maps
  • Pilotnet* (End-to-end DNN for self driving)

APIs

  • Cameras
  • Lidars
  • Radars
  • IMU
  • GPS
  • Image Processing
  • DNN interface
  • CV Modules
  • HD Maps interface
  • CAN/ DBW Kit interface

Tools

  • Calibration and sensor registration
  • Vehicle rig configuration
  • Data acquisition

* Available to select customers

slide-14
SLIDE 14

14

HANDS-ON WITH DRIVEWORKS SAMPLES

slide-15
SLIDE 15

15 15

DRIVENET

Navigate to the DriveWorks precompiled samples folder on your PX2. Run the DriveNet sample:

Multi-class obj ect detector

$ cd /usr/local/driveworks/bin/ $ ./sample_drivenet

slide-16
SLIDE 16

16

Bounding Boxes 2D Feature Tracker 2D Obj ect Tracker Inference Engine Data Conditioning Camera

  • r Video

DRIVENET

S AL

Bounding Boxes

slide-17
SLIDE 17

17 17

LANENET

Navigate to the DriveWorks precompiled samples folder on your PX2. To run the LaneNet sample:

Lane detection

$ cd /usr/local/driveworks/bin/ $ ./sample_lane_detection

slide-18
SLIDE 18

18

LANENET

Camera

  • r Video

Ego and adj acent lanes Post Processing Inference Engine Data Conditioning S AL

slide-19
SLIDE 19

19

HANDS-ON WITH DRIVEWORKS TOOLS

slide-20
SLIDE 20

20

CONNECT THE CAMERAS

Camera A0 Camera B0

ATTENTION: User A: Connect the camera to Camera A0 User B: Connect the camera to Camera B0 PLEASE TURN OFF THE PX2 BEFORE CONNECTING CAMERAS!

slide-21
SLIDE 21

21 21

SAMPLE CAMERA GMSL

User A connect to the group A with the following command User B connect to the group B with the following command

Live Camera

$./sample_camera_gmsl --camera-type=ar0231 -–csi-port=ab $./sample_camera_gmsl --camera-type=ar0231 -–csi-port=cd

slide-22
SLIDE 22

22 22

RECORDING TOOL

Navigate to the tools folder within DriveWorks as follows Run the recorder tool with super user privileges as follows: This will create a config file recorder-config.j son file. Open this config file with your favorite editor with super user privileges Password for the PX2: nvidia

Data Logging

$ cd /usr/local/driveworks/tools $ sudo ./recorder-qt $ sudo gedit recorder-config.json

slide-23
SLIDE 23

23 23

RECORDING TOOL

Configuration File

"version": "0.6", "path": “/tmp", "camera": { "separate-thread": true, "write-file-pattern": "video_*", "sensors": [ { "protocol": "camera.gmsl", "params": "camera-type=ar0231,csi-port=ab,camera-count=1,fifo- size=3,output-format=raw", "channel-names": [ "first" ] } ] }

slide-24
SLIDE 24

24 24

RECORDING TOOL

User A change the first sensor in the recorder-config.j son file as follows: User B change the first sensor in the recorder-config.j son file as follows:

Edit the Configuration File

"protocol": "camera.gmsl", "params": "camera-type=ar0231,csi-port=ab,camera-count=1,fifo-size=3,output- format=raw", "channel-names": [ "first" ] "protocol": "camera.gmsl", "params": "camera-type=ar0231,csi-port=cd,camera-count=1,fifo-size=3,output- format=raw", "channel-names": [ "first" ]

slide-25
SLIDE 25

25 25

RECORDING TOOL

Now that the config file is edited and the right parameters are included, lets run the recorder tool to record the video feed with super user privileges. You can list the recorded file by opening up the folder dw-*

Data Logging

$ sudo ./recorder-qt $ ls /tmp/ | grep dw

slide-26
SLIDE 26

26

HANDS-ON WITH DRIVEWORKS API

slide-27
SLIDE 27

27 27

DRIVEWORKS API ON DRIVE PX2

Overview

Caffe Model RGB Camera Inference Output S ample Application

Tensor RT

slide-28
SLIDE 28

28 28

DRIVEWORKS API ON DRIVE PX2

Please log into the host based on your PX2 # PX2 1 – 5 : HOS T 1 IP – 10.30.25.189 PX2 6 – 10 : HOS T 2 IP – 10.30.25.201 PX2 11 – 15 : HOS T 3 IP – 10.30.25.174 PX2 16 – 20 : HOS T 4 IP – 10.30.25.176 PX2 21 – 25 : HOS T 5 IP – 10.30.25.90 Host Password: nvidia Example: nvidia_22b

Log into the Host Machine

$ echo $HOST_IP $ echo $USER $ ssh -X $USER@$HOST_IP

slide-29
SLIDE 29

29

DRIVEWORKS API ON DRIVE PX2

Init S DK Init DNN Initialization Clean Up Main Loop getFrame NVMEDIA Image CUDA Image Compute GL Image Display

Data Flow Overview

slide-30
SLIDE 30

30 30

DRIVEWORKS API ON DRIVE PX2

Navigate to the driveworks folder in your home directory. Uncomment the following lines in the CMakeLists.txt file from line 8 to 10.

Live Camera with Obj ect DNN Tracker

$ /bin/bash $ cd ~/driveworks-0.3/ $ mkdir build $ cd build $ gedit ~/driveworks-0.3/samples/src/dnn/CMakeLists.txt #TODO 1: Undo the following section to enable cross compiling of project If(VIBRANTE_V4L) add_subdirectory(sample_live_rggb_object_detector) endif()

slide-31
SLIDE 31

31 31

DRIVEWORKS API ON DRIVE PX2

Now open the sample main.cpp so we can start making changes to the application code.

Live Camera with Obj ect DNN Tracker

$ gedit ~/driveworks- 0.3/samples/src/dnn/sample_live_rggb_object_detector/main.cpp

slide-32
SLIDE 32

32 32

DRIVEWORKS API ON DRIVE PX2

S ensor initialization (line 174)

Live Camera with Obj ect DNN Tracker

initSdk(&gSdk, gWindow); // create HAL and camera uint32_t imageWidth; uint32_t imageHeight; dwImageType cameraImageType; // TODO 2: Copy these input parameters to initSensor function // &sal, &gCameraSensor, &imageWidth, &imageHeight, &cameraImageType, gSdk initSensors(/* TODO 2 */); if(cameraImageType != DW_IMAGE_NVMEDIA) { std::cerr << "Error: Expected nvmedia image type, received " << cameraImageType << "instead." << std::endl; exit(-1); }

slide-33
SLIDE 33

33 33

DRIVEWORKS API ON DRIVE PX2

DNN initialization (line 191)

Live Camera with Obj ect DNN Tracker

// TODO 3: Copy the global sdk initalization parameter to initDNN function // gSdk if (initDNN(/* TODO 3 */)) { initRenderer(&gRenderer, gSdk, gWindow); runNvMedia_pipeline(gWindow, gRenderer, gSdk, gCameraSensor, imageWidth, imageHeight); }

slide-34
SLIDE 34

34 34

DRIVEWORKS API ON DRIVE PX2

Error checking (line 381)

Live Camera with Obj ect DNN Tracker

// TODO 4: Add DW_SUCCESS to check return status of Driveworks function // DW_SUCCESS if (status != /* TODO 4 */) { std::cerr << "Cannot initialize pixel format converter" << std::endl; exit(1); }

slide-35
SLIDE 35

35 35

DRIVEWORKS API ON DRIVE PX2

NVMEDIA to GL and CUDA image (line 388)

Live Camera with Obj ect DNN Tracker

//TODO 5: Create streamer from converting from DW_IMAGE_NVMEDIA TO //DW_IMAGE_GL //image API translator dwImageStreamerHandle_t nvm2gl = DW_NULL_HANDLE; dwImageStreamer_initialize(&nvm2gl, &displayImageProperties, /*TODO 5*/, sdk); //TODO 6: Create streamer from converting from DW_IMAGE_NVMEDIA TO //DW_IMAGE_CUDA ageStreamerHandle_t nvm2cuda = DW_NULL_HANDLE; dwImageStreamer_initialize(&nvm2cuda, &displayImageProperties, /*TODO 6*/, sdk);

slide-36
SLIDE 36

36 36

DRIVEWORKS API ON DRIVE PX2

Utilize GL image for display (line 483)

Live Camera with Obj ect DNN Tracker

// TODO 7: Send via ImageStreamer to get GL image back // nvm2gl status = dwImageStreamer_postNvMedia(rgbaImage, /* TODO 7 */); ... else { dwImageGL *frameGL = nullptr; status = dwImageStreamer_receiveGL(&frameGL, 60000, /* TODO 7 */); if (status == DW_SUCCESS && frameGL) { ... dwImageStreamer_returnReceivedGL(frameGL, /* TODO 7 */); } }

slide-37
SLIDE 37

37 37

DRIVEWORKS API ON DRIVE PX2

Utilize CUDA image for inference (line 501)

Live Camera with Obj ect DNN Tracker

// TODO 8: Send via ImageStreamer to get GL image back // nvm2cuda status = dwImageStreamer_postNvMedia(rgbaImage, /* TODO 8 */); ... else { dwImageCUDA *frameCUDA = nullptr; status = dwImageStreamer_receiveCUDA(&frameCUDA, 10000, /* TODO 8 */); if (status == DW_SUCCESS && frameCUDA) { ... dwImageStreamer_returnReceivedCUDA(frameCUDA, /* TODO 8 */); } }

slide-38
SLIDE 38

38 38

DRIVEWORKS API ON DRIVE PX2

Clean up (line 572)

Live Camera with Obj ect DNN Tracker

dwSensor_stop(cameraSensor); //TODO 9: Release GL imagestreamer //&nvm2gl dwImageStreamer_release(/*TODO 9*/); //TODO 10 Release CUDA imagestreamer //&nvm2cuda dwImageStreamer_release(/*TODO 10*/);

slide-39
SLIDE 39

39 39

DRIVEWORKS API ON DRIVE PX2

Add the correct camera port (line 130)

Live Camera with Obj ect DNN Tracker

// Replace /* TODO 11 */ below with the following code in the correct places: // USER A: "ab" // USER B: "cd" ProgramArguments::Option_t("csi-port", /* TODO 11 */),

slide-40
SLIDE 40

40 40

DRIVEWORKS API ON DRIVE PX2

Once in our build directory, we start the cross compilation process by generating the makefiles. Follow the compilation instruction in the / home/ nvidia/ README.md file on your PX2.

Cross Compilation from Host to Drive PX2

slide-41
SLIDE 41

41 41

DRIVEWORKS API ON DRIVE PX2

Now that our binaries have been successfully compiled, switch back to your PX2 to copy the files from the host directly. Press Ctl+D to leave the S S H session. Ensure you replace <PX2#> with your PX2's number and <US ER_LETTER> with either A| B. $HOS T_IP should still be your host’ s IP address from earlier. ON THE DPX2!!! Host Password: nvidia Example user: nvidia_19a Example <#PX2>=19 Example <USER_LETTER>=a

Cross Compilation from Host to Drive PX2

$ echo $USER $ echo $HOST_IP $ scp $USER@$HOST_IP:/home/$USER/driveworks- 0.3/build/install/bin/sample_live_rggb_object_detector ~/sample_live_rggb_object_detector $ sudo mv ~/sample_live_rggb_object_detector /usr/local/driveworks/bin

slide-42
SLIDE 42

42 42

DRIVEWORKS API ON DRIVE PX2

Open a picture of a car in the Chromium browser and point your cameras towards it.

Running the S ample

$ cd /usr/local/driveworks/bin $ /usr/local/driveworks/bin/sample_live_rggb_object_detector

slide-43
SLIDE 43

43

OTHER RESOURCES

TOOLS

Developer Zone (developer.nvidia.com/ DRIVE) Developer Forums (devtalk.nvidia.com)

S CHOOLS

Deep Learning Institute –Autonomous Driving Udacity Nanodegree

OTHER PRES ENTATIONS

slide-44
SLIDE 44

44 44

AUTOMOTIVE PX2 LABS

Hands On Workshops

Please attend the following Auto workshops: Training a Semantic Segmentation Network ready for Deployment in the Car by Oliver Knieps & Joohoon Lee Deployment of Semantic Segmentation Network using Tensor RT by Joohoon Lee & Chethan Ningaraj u CUDA Programming on Drive PX2 by Chethan Ningaraj u EGL Streams: Interoperability for Camera, CUDA and OpenGL by Debalina Bhattacharj ee & S haran Ashwathnarayan

slide-45
SLIDE 45

Questions?

THANK YOU!