Please provide the following info (tick the boxes after creating this topic):
Software Version
DRIVE OS 6.0.10.0
Target Operating System
Linux
Hardware Platform
DRIVE AGX Orin Developer Kit (940-63710-0010-300)
Host Machine Version
native Ubuntu Linux 20.04 Host installed with DRIVE OS Docker Containers
Issue Description
The egomotion module is the only module for which we have got all the supported sensors, while I cannot populate the VehicleIO structs completely the Egomotion header takes in internally, I parse the Vehicle data from the canbus via separate parser function to fill the data structure values just as needed for Egomotion module to work.
However there are still some challenges to be tackled here :
CASE ONE } I need verification that the Global Egomotion module which takes in GPS sensors data, can it be used without RTK subscription (context : we dont have RTK, and hence GPS logger sample produces “GPS not working on most accurate “)
What I find is this →
dwGlobalEgomotionResult globalResult{}; // → this struct somewhat looks like this ::
typedef struct dwGlobalEgomotionUncertainty
{
dwConfidence3f position; //!< Position uncertainty (easting [m], northing [m], altitude [m]).
dwConfidence3f orientation; //!< Orientation uncertainty (roll [rad], pitch [rad], yaw [rad]).
bool validPosition; //!< Indicates validity of `position` uncertainty estimate.
bool validOrientation; //!< Indicates validity of `orientation` uncertainty estimate.
dwTime_t timestamp; //!< Estimate timestamp.
} dwGlobalEgomotionUncertainty;
/**
* @brief Holds global egomotion state estimate.
*/
typedef struct dwGlobalEgomotionResult
{
dwGeoPointWGS84 position; //!< Position in WGS-84 reference system.
dwQuaternionf orientation; //!< Rotation from rig coordinate system to ENU coordinate system.
bool validPosition; //!< Indicates validity of `position` estimate.
bool validOrientation; //!< Indicates validity of `orientation` estimate.
dwTime_t timestamp; //!< Estimate timestamp.
dwGlobalEgomotionUncertainty uncertainty;
} dwGlobalEgomotionResult;
Question 1 → If CASE 1 is correct deduction from my side, do I need to override the bool values as True in the result and uncertainty structs?
Question 2 → A parser module embedded into this creates latency and synchronisation issue, I am aware that egomotion module takes the sensors data in ordered timestamps, can it be pointed out explicitly how this happens? Is synchronisation done via hosttimestamps? sensortimestamps? Please see my log below to understand the timestamping issues
Question 3 → I want a proper parametric string with Novatel device to be able to run on ethernet connection type.
Can I get some insights here? Happy to PM source code only to mods here.
Logs
pomo@tegra-ubuntu:/usr/local/driveworks/bin$ sudo ./sygnalpomo_egomotion --rig=/usr/local/driveworks/data/samples/recordings/cloverleaf2/rig_ego.json
ProgramArguments: Missing argument 'dwTracePath' requested
Starting real-time egomotion processing...
[26-08-2025 21:59:17] Platform: Detected Drive Orin P3710
[26-08-2025 21:59:17] Adding variable DW_Base:DW_Version
[26-08-2025 21:59:17] Added variable DW_Base:DW_Version
[26-08-2025 21:59:17] Platform: number of GPU devices detected 1
[26-08-2025 21:59:17] Platform: currently selected GPU device 0, Resource Data Dir: trt_08_06_12_04, Arch: ga10b
[26-08-2025 21:59:17] Platform: currently selected GPU device integrated ID 0
[26-08-2025 21:59:17] CUDLAEngine:getDLACount: CUDLA version is = 1004000
[26-08-2025 21:59:17] CUDLAEngine:getDLACount: Number of DLA devices = 2
[26-08-2025 21:59:17] Context::mountResourceCandidateDataPath resource FAILED to mount from './resources': VirtualFileSystem: Failed to mount './resources/resources.pak'
[26-08-2025 21:59:17] Context::mountResourceCandidateDataPath resource FAILED to mount from '/usr/local/driveworks-5.20/bin/data': VirtualFileSystem: Failed to mount '/usr/local/driveworks-5.20/bin/data/resources.pak'
[26-08-2025 21:59:17] Context::findDataRootInPathWalk data/DATA_ROOT found at: /usr/local/driveworks-5.20/data
[26-08-2025 21:59:17] Context::mountResourceCandidateDataPath resource FAILED to mount from '/usr/local/driveworks-5.20/data': VirtualFileSystem: Failed to mount '/usr/local/driveworks-5.20/data/resources.pak'
[26-08-2025 21:59:17] Context::findDataRootInPathWalk data/DATA_ROOT found at: /usr/local/driveworks-5.20/data
[26-08-2025 21:59:17] Context::mountResourceCandidateDataPath resource FAILED to mount from '/usr/local/driveworks-5.20/data': VirtualFileSystem: Failed to mount '/usr/local/driveworks-5.20/data/resources.pak'
[26-08-2025 21:59:17] Context::findResourcesPackageInPathWalk: Could not find ./resources/resources.pak in upto 7 parent directories from /usr/local/driveworks-5.20/targets/aarch64-Linux/lib/libdw_base.so.5.20
[26-08-2025 21:59:17] Context::findResourcesPackageInPathWalk: Could not find ./resources/resources.pak in upto 7 parent directories from /usr/local/driveworks-5.20/targets/aarch64-Linux/lib/libdw_base.so.5.20
[26-08-2025 21:59:17] SDK: No resources(.pak) mounted, some modules will not function properly
[26-08-2025 21:59:17] [26-08-2025 21:59:17] Initialize DriveWorks SDK v5.20.24
[26-08-2025 21:59:17] [26-08-2025 21:59:17] Release build with GNU 9.3.0 from buildbrain-branch-0-gb4c0b405b15 against Drive PDK v6.0.10.0
[26-08-2025 21:59:17] Initialize DriveWorks VisualizationSDK v5.20.24
[26-08-2025 21:59:17] Initialize DriveWorksGL SDK v5.20.24
[26-08-2025 21:59:17] egl::Display: found 1 EGL devices
[26-08-2025 21:59:17] egl::Display: use drm device: /dev/dri/card0
[26-08-2025 21:59:17] fromFile: Loading rig file: /usr/local/driveworks/data/samples/recordings/cloverleaf2/rig_ego.json
[26-08-2025 21:59:17] createFromVehicleVIN: Failed to open a file '/tmp/car_vin' - file likely does not exist - skipping overlay
[26-08-2025 21:59:17] No valid data file found for can in parameter string: device=can3,bitrate=500000,type=native (using configuration folder /usr/local/driveworks/data/samples/recordings/cloverleaf2/)
[26-08-2025 21:59:17] No valid data file found for imu:novatel in parameter string: connection-type=ethernet,fifo-size=1024 (using configuration folder /usr/local/driveworks/data/samples/recordings/cloverleaf2/)
[26-08-2025 21:59:17] No valid data file found for gps:novatel in parameter string: connection-type=ethernet,fifo-size=1024 (using configuration folder /usr/local/driveworks/data/samples/recordings/cloverleaf2/)
[26-08-2025 21:59:17] No valid data file found for camera_front in parameter string: camera-name=F008A120RM0AV2,interface=csi-ab,CPHY-mode=1,link=0,output-format=processed,async-record=1,file-buffer-size=16777216 (using configuration folder /usr/local/driveworks/data/samples/recordings/cloverleaf2/)
[26-08-2025 21:59:17] createFromVehicleVIN: Failed to open a file '/tmp/car_vin' - file likely does not exist - skipping overlay
[SENSORS INIT] Vehicle CAN interface found: can
[SENSORS INIT] IMU Sensor found: imu:novatel
[SENSORS INIT] GPS Sensor found: gps:novatel
[SENSORS INIT] Camera Sensor found, Rig intake name: camera_front
[26-08-2025 21:59:17] Egomotion: gyroscope measurement filter factor 0.50000000, gravity filter factor in rotational filter 0.09090909
[26-08-2025 21:59:17] Egomotion: slip angle coefficient computed from vehicle params: -0.014475
[26-08-2025 21:59:17] Egomotion: likely invalid slip angle coefficient, should not be lower than -0.010000
[26-08-2025 21:59:17] Using default slip angle coefficient: -0.002830
[26-08-2025 21:59:17] SensorFactory::createSensor() -> time.nvpps, nvpps-device=/dev/nvpps0
[26-08-2025 21:59:17] Found driver: time.nvpps
[26-08-2025 21:59:17] TimeSensor: failed to set NVPPS parameters. Error: Invalid argument
[26-08-2025 21:59:17] This platform does not support NVPPS GPIO mode. Fallback to timer mode
[26-08-2025 21:59:17] TimeSensor: initialized with no UTC time reference.
[26-08-2025 21:59:17] SensorFactory: Override default timeSensor with the user passed one
[26-08-2025 21:59:17] EndpointNVPPS: started on /dev/nvpps0
[26-08-2025 21:59:17] SensorFactory::loadPluginLibraryHelper:Succeed to load dynamic lib - /usr/local/driveworks-5.20/targets/aarch64-Linux/lib/libsensor_plugin_public_radar.so
[26-08-2025 21:59:17] SensorFactory::createSensor() -> can.socket, device=can3,bitrate=500000,type=native
[26-08-2025 21:59:17] Found driver: can.socket
[26-08-2025 21:59:17] CANSocket: Cannot get current state of hardware time stamping: ioctl(SIOCGHWTSTAMP, can3) -> Operation not supported
[26-08-2025 21:59:17] CANSocket: software based timestamps will be used for can3
[26-08-2025 21:59:17] SensorFactory::createSensor() -> imu.novatel, connection-type=ethernet,fifo-size=1024
[26-08-2025 21:59:17] Found driver: imu.novatel
[26-08-2025 21:59:17] SensorManager::addSensor DW_INVALID_ARGUMENT: IMUNovatelProprietary: invalid ip parameter
[26-08-2025 21:59:17] SensorManager::addSensorsFromRig() failed to add sensor from rig: imu:novatel imu.novatel connection-type=ethernet,fifo-size=1024 (Error: DW_INVALID_ARGUMENT)
[26-08-2025 21:59:17] Driveworks exception thrown: DW_INVALID_ARGUMENT: SensorManager::SensorManager() Failed to add sensors from rig
Error initializing SensorManager for real-time processing: DW_INVALID_ARGUMENT
pomo@tegra-ubuntu:/usr/local/driveworks/bin$