DriveWorks SDK Reference
3.5.78 Release
For Test and Development only

/dvs/git/dirty/gitlab-master_av/dw/sdk/doc/portingguide/2-2_to_3-0.md
Go to the documentation of this file.
1 # Copyright (c) 2019-2020 NVIDIA CORPORATION. All rights reserved.
2 
3 @page dwx_porting_guide_3_0 Porting Guide from SDK 2.2 to SDK 3.0
4 @tableofcontents
5 
6 This document will help you port your applications from DriveWorks SDK 2.2 to DriveWorks SDK 3.0.
7 
8 @section dwks_and_dws_release For NVIDIA DriveWorks and NVIDIA DRIVE Software Releases
9 
10 @note The following subsections are applicable for both **NVIDIA DriveWorks** and **NVIDIA DRIVE Software** releases.
11 
12 ------------------------------------------------------------------
13 
14 @subsection pg3_calibration Calibration
15 
16 This release has removed the capability to select
17 `DW_CALIBRATION_CAMERA_SIGNAL_NONE` for camera self-calibration signal
18 specification, and has added the new option to select
19 `::DW_CALIBRATION_CAMERA_SIGNAL_DEFAULT` instead, which will automatically select
20 the calibration signals for a given camera based on it's properties. Specific
21 signals can still be selected for the non-default case as before.
22 
23 The lidar self-calibration API `dwCalibrationEngine_addLidarSweep()` has been
24 replaced with the simpler `dwCalibrationEngine_addLidarPointCloud()` and now
25 expects a CAN bus index to be passed at initialization with
26 `dwCalibrationEngine_initializeLidar()`, so that `dwVehicleIOState` data from
27 this CAN bus provided with the existing `dwCalibrationEngine_addVehicleIOState()`
28 API is consumed internally. Also, the previously deprecated
29 `dwCalibrationEngine_addLidarPoses()` API has been removed, the more general
30 `dwCalibrationEngine_addLidarPose()` API should be used instead.
31 
32 The IMU self-calibration has been adjusted to not require a dedicated egomotion handle
33 anymore. Instead, `dwCalibrationEngine_initializeIMU()` requires the index of a CAN bus
34 from the rig file and the calibration engine initialized by it must be passed `dwVehicleIOState`
35 data from this CAN bus via `dwCalibrationEngine_addVehicleIOState()`.
36 
37 The radar self-calibration has been modified to remove the dependency on egomotion. The API
38 `dwCalibrationEngine_initializeRadar()` doesn't need an input of egomotion handle any more.
39 Instead, it accepts a CAN bus index as an additional input, so that `dwVehicleIOState`
40 data from this CAN bus is provided with the existing `dwCalibrationEngine_addVehicleIOState()`.
41 
42 ------------------------------------------------------------------
43 
44 @subsection pg3_core Core
45 
46 This release has removed the following previously deprecated APIs:
47 - `dwContext_getNvMediaDevice`
48 - `dwContext_setNvMediaDevice`
49 
50 and the `NvMediaDevice* nvmediaDevice` field of the `::dwContextParameters` struct.
51 
52 ------------------------------------------------------------------
53 
54 @subsection pg3_dnn DNN
55 
56 This release removes the following old APIs:
57 - `dwDNN_initializeTensorRTFromFile`
58 - `dwDNN_initializeTensorRTFromMemory`
59 
60 And renames:
61 - `dwDNN_initializeTensorRTFromFileNew` into `dwDNN_initializeTensorRTFromFile()`
62 - `dwDNN_initializeTensorRTFromMemoryNew` into `dwDNN_initializeTensorRTFromMemory()`
63 
64 The signature of `dwDNN_infer()` has been modified, and it accepts now a list of `::dwDNNTensorHandle_t` as input and output.
65 `dwDNN_inferRaw()` has been introduced to replace the previous `dwDNN_infer` function that works with raw device pointers.
66 
67 ------------------------------------------------------------------
68 
69 @subsection pg3_dataconditioner DataConditioner Processing Pipeline
70 
71 This release changes the signature of following APIs from:
72 - `dwStatus dwDataConditioner_setROI(const dwRect* roi, dwDataConditionerHandle_t obj)`
73 - `dwStatus dwDataConditioner_getROI(dwRect* roi, dwDataConditionerHandle_t obj)`
74 
75 to following form that take an additional parameter `inputIdx`:
76 - `dwStatus dwDataConditioner_setROI(const dwRect* roi, uint32_t inputIdx, dwDataConditionerHandle_t obj)`
77 - `dwStatus dwDataConditioner_getROI(dwRect* roi, uint32_t inputIdx, dwDataConditionerHandle_t obj)`
78 
79 `inputIdx` corresponds to the index of image to set/get ROI. Previously all input images share one global ROI, after the
80 change, each input image slot can have one unique ROI attached.
81 
82 This release has renamed `dwDataConditioner_prepareData` to `dwDataConditioner_prepareDataRaw`.
83 
84 ------------------------------------------------------------------
85 
86 @subsection pg3_egomotion Egomotion
87 
88 This release has exposed the capability to choose gains for the simple version of the
89 linear acceleration filter. It exposed `accelerationFilterTimeConst`, `processNoiseStdevSpeed`,
90 `processNoiseStdevAcceleration`, `measurementNoiseStdevSpeed`, and `measurementNoiseStdevAcceleration`.
91 These variables should all be set when `dwEgomotionLinearAccelerationFilterMode` is set to
92 `DW_EGOMOTION_ACC_FILTER_SIMPLE`.
93 
94 This release has removed the model-based acceleration filter (DW_EGOMOTION_ACC_FILTER_MODELBASED).
95 
96 This release has modified the following API functions:
97 - `dwEgomotion_initParamsFromRig()` (`gpsSensorName` has been removed)
98 - `dwEgomotion_initParamsFromRigByIndex()` (`gpsSensorIdx` has been removed)
99 
100 This release has removed the following deprecated API functions:
101 
102 - `dwEgomotion_getHistoryEntry` (please use `dwEgomotion_getHistoryElement()` instead)
103 - `dwEgomotion_applyRelativeUncertainty`
104 - `dwEgomotion_addGPSMeasurement` (please use the `dwGlobalEgomotion` module instead)
105 
106 This release has removed the deprecated `estimationPeriod` parameter in `::dwEgomotionParameters`. Use
107 the `::dwEgomotionParameters.automaticUpdate` parameter going forward.
108 
109 This release has removed the following GNSS-related parameters and flags:
110 
111 - Configuration parameters:
112  - `dwEgomotionSensorCharacteristics.gpsSamplingRateHz`
113  - `dwEgomotionSensorCharacteristics.gpsHorizontalNoiseMeter`
114  - `dwEgomotionSensorCharacteristics.gpsVerticalNoiseMeter`
115  - `dwEgomotionParameters.gps2rig`
116  - `dwEgomotionParameters.disableLocationFilter`
117 
118 - Validity flags:
119  - `dwEgomotionDataField.DW_EGOMOTION_LOCATION_LON`
120  - `dwEgomotionDataField.DW_EGOMOTION_LOCATION_LAT`
121  - `dwEgomotionDataField.DW_EGOMOTION_LOCATION_ALT`
122 
123 - Types:
124  - `dwEgomotionReferenceFrame`
125 
126 - Estimates:
127  - `dwEgomotionResult.location`
128  - `dwEgomotionResult.rotationFrame`
129  - `dwEgomotionUncertainty.location`
130 
131 This release has added an interpolation and extrapolation limit; requests for interpolation over an
132 interval larger than 5 seconds or extrapolation of more than 2.5 seconds into the future will return
133 DW_NOT_AVAILABLE. Affected APIs:
134 - `dwEgomotion_estimate()`
135 - `dwEgomotion_computeRelativeTransformation()`
136 
137 
138 ------------------------------------------------------------------
139 
140 @subsection pg3_image_processing Image Processing
141 
142 @subsubsection pg3_feature_det_track Feature Detector and Feature Tracker
143 
144 `dwConnectedComponents_labelImage` has been removed. Instead the following API should be used:
145 
146 - `dwConnectedComponents_bindInput()`
147 - `dwConnectedComponents_bindOutputLabels()`
148 - `dwConnectedComponents_setThreshold()`
149 - `dwConnectedComponents_process()`
150 
151 This release removes `dw_features` module, header file `dw/features/Features.h` should be replaced to
152 `dw/imageprocessing/features/FeatureList.h`, `dw/imageprocessing/features/FeatureDetector.h`
153 and `dw/imageprocessing/tracking/FeatureTracker.h` respectively.
154 
155 Refer to @ref dwx_porting_guide_2_0 for API changings.
156 
157 ------------------------------------------------------------------
158 
159 @subsection pg3_ipc Inter Process Communication
160 
161 @subsubsection pg3_socketclientserver SocketClientServer
162 
163 This release has removed the following previously deprecated APIs:
164 - `dwSocketConnection_send`
165 - `dwSocketConnection_peek`
166 - `dwSocketConnection_peekNonBlock`
167 - `dwSocketConnection_recv`
168 - `dwSocketConnection_recvNonBlock`
169 
170 and renamed:
171 - `dwSocketConnection_peekNew` to `dwSocketConnection_peek()`
172 
173 ------------------------------------------------------------------
174 
175 @subsection pg3_lidaraccumulator Lidar Accumulator
176 
177 `dwLidarAccumulator` has been removed. Use `dwPointCloudAccumulator` from `PointCloudAccumulator.h` instead.
178 
179 ------------------------------------------------------------------
180 
181 @subsection pg3_pointcloudprocessing Point Cloud Processing
182 
183 The following depracated items have been removed:
184 - `xyzi` member of `dwPointCloud` structure
185 - `dwPointCloudAccumulator_bindInput`
186 - `dwPointCloudStitcher_setMotionCompensation`
187 
188 The old `dwPointCloudStitcher_bindInput` has been removed and `dwPointCloudStitcher_bindInputToSlot` has been renamed to `dwPointCloudStitcher_bindInput()`.
189 
190 Refer to @ref dwx_porting_guide_2_0 for more details.
191 
192 ------------------------------------------------------------------
193 
194 @subsection pg3_rigfile Rig File
195 
196 This release updates the rig files to `version 6`, converting the rig throttle and brake maps to a torque map.
197 That is, instead of mapping the inputs to an output force it maps them to a torque value.
198 The old output force values can be mapped to torque values by multiplying them by the nominal wheel radius.
199 (Torque = Force x Nominal_Radius)
200 
201 The fields [`throttleStateInput`, `throttleForceOutput`, `brakeStateInput`, `brakeForceOutput`]
202 are changed to [`throttlePedalInput`, `throttleSpeedInput`, `throttleTorqueOutput`,
203 `brakePedalInput`, `brakeTorqueOutput`] under the field `torqueLUT`.
204 
205 The throttle map is also now a 2-d table, mapping a pedal position at a
206 given speed to a torque value. As such, the `throttleTorqueOutput` table is of size
207 (`throttlePedalInput` x `throttleSpeedInput`).
208 
209 With `VERSION 6`, there is also an additional field `effectiveMass`, providing the effective mass due to vehicle rotational inertia
210 (wheel rotation, engine, and other parts of the CVT drive-train) in kg.
211 
212 DriveWorks SDK documentation contains examples for the new `version 6` rig files.
213 
214 ------------------------------------------------------------------
215 
216 @subsection pg3_sal Sensor Abstraction Layer
217 
218 @subsubsection pg3_sensors Sensors
219 
220 This release removes the following previously deprecated APIs:
221 
222 - `dwSensor_getSeekTable`
223 - `dwSensorSerializer_serializeImage`
224 - `dwSensorSerializer_serializeImageAsync`
225 
226 See wFrameCapture_appendFrame() and dwFrameCapture_appendFrameAsync() to support of the use cases previously covered by `dwSensorSerializer_serializeImage` and `dwSensorSerializer_serializeImageAsync`.
227 
228 This release also removes support for Pointgrey cameras, therefore camera.pointgrey protocol is deprecated.
229 
230 This release removes support for dwSoftISP and the isp module all together. Raw cameras and raw videos are to be processed via Tegra ISP, automatically in place when `output-format` contains `processed` and a processed image is requested from the acquired frame handle.
231 
232 The previously separate concepts of HV (Human Vision) using Tegra ISP and MV (Machine Vision) using dwSoftISP are now surpassed for a unified vision paradigm. DNN (refer to the specific DNNs documentation) are now compatible with the unified paradigm, unless specified otherwise
233 
234 The equivalent sample common classes CameraRawFramePipeline and RawSimpleCamera are also removed as based on dwSoftISP.
235 
236 All samples have been stripped of dwSoftISP.
237 
238 Protocol `camera.gmsl` based on NvMedia's IPP has been moved to `camera.gmsl.ipp` and replaced in functionality by NvSIPL library, see @ref camera_nvsipl_ipp_porting_guide for info
239 
240 sample_camera_gmsl, sample_camera_gmsl_raw, sample_camera_multiple_gmsl and sample_camera_gmsl_custom are all combined into `sample_camera`. Refer to its README for more details
241 
242 ------------------------------------------------------------------
243 
244 @subsection pg3_vehicle_and_motion Vehicle and Motion Actuation
245 
246 @subsubsection pg3_rig Rig
247 
248 This release has removed the API `dwRig_initializeFromStringWithPath` and integrated
249 its functionality into `dwRig_initializeFromString()` with a new parameter `relativeBasePath`.
250 If `relativeBasePath` is `NULL`, then the current working directory of the current process
251 is used to initialize it. Existing calls to `dwRig_initializeFromString()` can
252 be updated to pass `NULL` for `relativeBasePath`.
253 
254 ------------------------------------------------------------------
255 
256 @subsubsection pg3_vehicleio VehicleIO
257 
258 Following APIs have been removed:
259 - `dwVehicleIO_consume`
260 - `dwVehicleIO_sendVehicleCommand`
261 - `dwVehicleIOCommand::steeringSpeed` has been replaced by `dwVehicleIOCommand::maxSteeringWheelSpeed` for specifying the maximum steering wheel speed.
262 - `dwVehicleIOCommand::steeringValid` has been replaced by `dwVehicleIOCommand::steeringWheelValid` for specifying the validity status of steering wheel-based control interface.
263 - `dwVehicleIOState::steeringCmd` has been replaced by `dwVehicleIOState::steeringWheelAngleCmd` for the steering wheel angle command.
264 - `dwVehicleIOState::steeringAngle` has been replaced by `dwVehicleIOState::frontSteeringAngle` for the front wheel steering angle.
265 
266 ------------------------------------------------------------------
267 
268 @section dws_release_only For NVIDIA DRIVE Software Releases
269 
270 @note The following subsections are applicable for **NVIDIA DRIVE Software** releases only.
271 
272 ------------------------------------------------------------------
273 
274 @subsection pg3_driveperception Perception
275 
276 @subsubsection pg3_ahbnet AhbNet
277 
278 AhbNet.h has been removed in favor of LightSourceNet.h.
279 
280 ------------------------------------------------------------------
281 
282 @subsubsection pg3_clearsightnet ClearSightNet
283 
284 ClearSightNet.h has been moved to `perception/safety/camera/`.
285 
286 `dwClearSightNet_initDefaultParameters` now requires an additional argument: `::dwContextHandle_t`.
287 
288 The context handle is required to determine the current GPU architecture so that the default precision is selected accordingly. If the architecture is `Pascal` and a DNN model for this architecture is available, the default precision is set to `FP32`. Otherwise, it is set to `FP16`.
289 
290 ------------------------------------------------------------------
291 
292 @subsubsection pg3_drivenet DriveNet
293 
294 DriveNet.h has been moved to `perception/object/camera/`.
295 
296 `dwDriveNet_initDefaultParameters()` now requires an additional argument: `::dwContextHandle_t`.
297 
298 The context handle is required to determine the current GPU architecture so that the default precision is selected accordingly. If the architecture is `Pascal` and a DNN model for this architecture is available, the default precision is set to `FP32`. Otherwise, it is set to `FP16`.
299 
300 ------------------------------------------------------------------
301 
302 @subsubsection pg3_lanenet LaneNet
303 
304 This module has been removed. Lane detection is now performed by `dwMapNet`.
305 
306 ------------------------------------------------------------------
307 
308 @subsubsection pg3_lightnet LightNet
309 
310 LightNet.h has been moved to `perception/object/camera/`.
311 
312 `dwLightNet_initDefaultParameters` now requires an additional argument: `::dwContextHandle_t`.
313 
314 The context handle is required to determine the current GPU architecture so that the default precision is selected accordingly. If the architecture is `Pascal` and a DNN model for this architecture is available, the default precision is set to `FP32`. Otherwise, it is set to `FP16`.
315 
316 -----------------------------------------------------------------
317 
318 @subsubsection pg3_mapnet MapNet
319 
320 MapNet.h has been moved to `perception/landmarks/camera/`.
321 
322 `dwMapNet_initDefaultParamsNew` has been renamed to `dwMapNet_initDefaultParams()`, and now requires additional arguments: `::dwMapNetType` and `::dwContextHandle_t`.
323 
324 ------------------------------------------------------------------
325 
326 @subsubsection pg3_openroadnet OpenRoadNet
327 
328 OpenRoadNet.h has been moved to `perception/freespace/camera/`.
329 
330 `dwOpenRoadNet_initDefaultParameters` now requires an additional argument: `::dwContextHandle_t`.
331 
332 The context handle is required to determine the current GPU architecture so that the default precision is selected accordingly. If the architecture is `Pascal` and a DNN model for this architecture is available, the default precision is set to `FP32`. Otherwise, it is set to `FP16`.
333 
334 ------------------------------------------------------------------
335 
336 @subsubsection pg3_pathnet PathNet
337 
338 PathNet.h has been moved to `perception/path/camera/`.
339 
340 `dwPathNet_initDefaultParameters` now requires an additional argument: `::dwContextHandle_t`.
341 
342 The context handle is required to determine the current GPU architecture so that the default precision is selected accordingly. If the architecture is `Pascal` and a DNN model for this architecture is available, the default precision is set to `FP32`. Otherwise, it is set to `FP16`.
343 
344 ------------------------------------------------------------------
345 
346 @subsubsection pg3_signnet SignNet
347 
348 SignNet.h has been moved to `perception/object/camera/`.
349 
350 `dwSignNet_initDefaultParameters` now requires an additional argument: `::dwContextHandle_t`.
351 
352 The context handle is required to determine the current GPU architecture so that the default precision is selected accordingly. If the architecture is `Pascal` and a DNN model for this architecture is available, the default precision is set to `FP32`. Otherwise, it is set to `FP16`.
353 
354 ------------------------------------------------------------------
355 
356 @subsubsection pg3_waitnet WaitNet
357 
358 WaitNet.h has been moved to `perception/object/camera/`.
359 
360 `dwWaitNet_initDefaultParameters` now requires an additional argument: `::dwContextHandle_t`.
361 
362 The context handle is required to determine the current GPU architecture so that the default precision is selected accordingly. If the architecture is `Pascal` and a DNN model for this architecture is available, the default precision is set to `FP32`. Otherwise, it is set to `FP16`.
363 
364 -----------------------------------------------------------------
365 
366 @subsubsection pg3_landmarkdetector LandmarkDetector
367 
368 struct `dwLandmarkDetectorOutput` has been removed, please directly use `::dwLaneDetection` and `::dwLandmarkDetection` types to take LandmarkDetector output.
369 `dwLandmarkDetector_initializeDefaultParamsNew` has been renamed to `dwLandmarkDetector_initializeDefaultParams()`, and now takes frame width and height as additional input.
370 `dwLandmarkDetector_detectLandmarksNew` has been renamed to `dwLandmarkDetector_detectLandmarks()`, and now takes `::dwLaneDetection` and `::dwLandmarkDetection` as input instead of `dwLandmarkDetectorOutput`.
371 `dwLandmarkDetector_setDetectionROI`, `dwLandmarkDetector_setDetectionThreshold`, `dwLandmarkDetector_setTemporalSmoothFactor`, `dwLandmarkDetector_getTemporalSmoothFactor`, `dwLandmarkDetector_setModelParameterFitting` functions have all been removed, these are now set as part of `::dwLandmarkDetectorParams`.
372 
373 ------------------------------------------------------------------
374 
375 @subsection pg3_drivemapping Mapping
376 
377 @subsubsection pg_maps_3_0 Maps
378 
379 The object model for map access has been significantly refactored for release 3.0.
380 
381 Instead of directly initializing a `dwMapHandle_t` with `dwMaps_initialize()` application
382 should instead first initialize a `::dwMapProviderHandle_t` instance and subsequently use the
383 Map Provider API to request Maps appropriately for scenario-specific needs.
384 
385 An important change to the programming model is that Map resources are no longer owned
386 directly by the application. Maps are only "requested" from the Map Provider and must
387 be released back to the Map Provider via `dwMapProvider_releaseMap()` instead of
388 being directly released by `dwMaps_release()`.
389 
390 Enum `dwMapsLaneGeometry` is changed to have mapping enum entry consistent with
391 the 'side' concept at `dwSide` eg., DW_MAPS_LANE_GEOMETRY_LANEDIVIDERLEFT = DW_SIDE_LEFT.
392 
393 `layers/ImageLayer.h` is now available and contains 3 modules:
394  - Image Layer module, to work with `dwMapsContentLayerType` of type `DW_MAPS_CONTENT_LAYER_TYPE_IMAGES`
395  - Image layer types available defined in enum `dwMapsImageType`
396  - `dwMapsImageLayer_checkType` to check if contentLayer is an image type.
397  - `dwMapsImageLayer_getProperties` to get a handle to `dwMapsImageLayerProperties` of loaded image layer
398  - Image Layer View module to extend the layer views of content layers
399  - `dwMapsImageLayerView_getImageCount` get number of image layers in layer view
400  - `dwMapsImageLayerView_getLocalImages` get references to image layers from layer view into a buffer
401  - Maps Image Layer Storage module for loading and serving maps images
402  - `dwMapsImageStorage_initialize` to create a maps image storage handle
403  - `dwMapsImageStorage_release` to release a maps image storage handle
404  - `dwMapsImageStorage_getMapsImage` to request a specific maps image with a road segment ID
405  - `dwMapsImageStorage_returnMapsImage` to release memory for a specific maps image
406  - `dwMapsImageStorage_getProperties` to get image properties of the images being served.
407 
408 
409 DriveWorks SDK documentation contains example for correct Map request and release code
410 following the Map Provider programming model.
411 
412 This release also replaces the `dwMapsLaneWaitCondition` structure with `dwMapsLaneWaitElement` structure.
413 The structure had limitations in holding required information such as map rules, ego, contender lane information etc.
414 The new wait element structures are more inline with world model wait element objects and contain more information.
415 
416 The previous APIs `dwLanePlan_getLaneForNextWaitConditionAt()`, `dwLanePlan_getLaneForNextWaitCondition()` are not
417 supported through direct API as the has changed to use via local map. The usage to get new wait elements is through
418 the LocalMap interface `dwLocalMap_initialize()`, `dwLocalMap_bindOutput()`,
419 `dwLocalMap_computeLaneGraphFromRelativePose()` and `dwLocalMap_bindWaitElementGroupsBuffer()`.
420 Clients can process new wait elements ego lane graph information find the next wait element in the lane plan.
421 
422 ------------------------------------------------------------------
423 
424 @subsubsection pg3_localization Localization
425 
426 This release adds the functionality of localization with radar, lidar, and the fusion of localization
427 with any combination of camera, radar, and liar sensors. To facilitate these new functions, we have
428 renamed the following old localization types and functions to be for camera only:
429 
430 - Configuration parameters:
431  - `dwLocalizationParameters` -> `dwLocalizationCameraParameters`
432 
433 - Functions:
434  - `dwLocalization_initParamsFromRig` -> `dwLocalization_cameraInitParamsFromRig()`
435  - `dwLocalization_initialize` -> `dwLocalization_cameraInitialize()`
436  - `dwLocalization_localize` -> `dwLocalization_cameraLocalize()`
437  - `dwLocalization_setCameraExtrinsics` -> `dwLocalization_cameraSetExtrinsics()`
438 
439 The following functions have been generalized to be used for camera, radar, and lidar localization:
440  - `dwLocalization_setMap()`
441  - `dwLocalization_reset()`
442  - `dwLocalization_release()`
443  - `dwLocalization_setCUDAStream()`
444  - `dwLocalization_getCUDAStream()`
445 
446 The following new types and functions have been added:
447 
448 - Configuration parameters:
449  - `dwLocalizationRadarParameters()` for radar localization parameters.
450  - `dwLocalizationLidarParameters()` for lidar localization parameters.
451 
452 - Radar functions:
453  - `dwLocalization_radarInitialize()` for initialization of radar localization.
454  - `dwLocalization_radarLocalize()` for localization with radar.
455 
456 - Lidar functions:
457  - `dwLocalization_lidarInitialize()` for initialization of lidar localization.
458  - `dwLocalization_lidarLocalize()` for localization with lidar.
459 
460 - Localization fusion:
461  - `::dwLocalizationFusionHandle_t` as fusion localization handle.
462  - `dwLocalizationFusion_initialize()` for initialization of localization fusion.
463  - `dwLocalizationFusion_localize()` for localization fusion.
464  - `dwLocalizationFusion_setMap()` for set a new map for localization fusion.
465  - `dwLocalizationFusion_reset()` for resetting localization fusion.
466  - `dwLocalizationFusion_release()` for release the resource acquired by localization fusion.
467 
468 We have also renamed, reordered, and added variables in `::dwLocalizationResult` struct:
469  - `absolutePos` -> `::dwLocalizationResult.globalPosition`.
470  - `absoluteOriQuat` -> `::dwLocalizationResult.globalOrientation`.
471  - `relativePos` -> `::dwLocalizationResult.relativePosition`.
472  - `relativeOriQuat` -> `::dwLocalizationResult.relativeOrientation`.
473  - `isRelativePoseValid` -> `::dwLocalizationResult.isMapAvailable`.
474  - `translationUncertainty` -> `::dwLocalizationResult.positionUncertainty`.
475  - `rotationUncertainty` -> `::dwLocalizationResult.globalOrientation`.
476  - Add `::dwLocalizationResult.indicator` and `::dwLocalizationResult.confidence`.
477 
478 
479 ------------------------------------------------------------------
480 
481 @subsection pg3_driveplanning Planning
482 
483 @subsubsection pg3_laneplanner Lane Planner
484 
485 The `dwLanePlanner_run()` function now accepts a list of target lane pointers instead of a target road segment. To get the same behavior, a list of pointers to the lanes in the road segment can be passed as target lanes:
486 ```
487 std::vector<const dwMapsLane*> targetLanes;
488 for (uint32_t laneIdx = 0; laneIdx < targetRS->laneCount; ++laneIdx)
489 {
490  targetLanes.push_back(&targetRoadSegment->lanes[laneIdx]);
491 }
492 dwLanePlanner_run(... , targetLanes.data(), static_cast<uint32_t>(targetLanes.size()), ...)
493 ```