Initial commit
This commit is contained in:
@@ -0,0 +1,804 @@
|
||||
{
|
||||
"Devices": {
|
||||
"MBDV_Servo01": {
|
||||
"DeviceId": "right-wheel",
|
||||
"Enabled": true,
|
||||
"DeviceType": "CiA402Servo",
|
||||
"DeviceName": "Right Wheel Servo",
|
||||
"DriverName": "CiA402Servo",
|
||||
"DriverVersion": "1.0.0",
|
||||
"Description": "Right Wheel servo motor",
|
||||
"Connection": {
|
||||
"CanInterface": "can0",
|
||||
"NodeId": "1",
|
||||
"AutoReconnectEnabled": true,
|
||||
"ReconnectDelayMs": 3000,
|
||||
"MaxReconnectAttempts": 0,
|
||||
"PdoConfigRetryCount": 3,
|
||||
"PdoConfigRetryTimeoutMs": 1000,
|
||||
"UseHeartbeatCheck": true,
|
||||
"AllowedHomingMethods": [],
|
||||
"PdoMappings": {
|
||||
"_Comment": "CiA402 Object Dictionary Index Definitions: 0x6040=Controlword[WO UINT16] - State machine control (Enable/Disable/Fault Reset), 0x6041=Statusword[RO UINT16] - Motor status (Ready/Enabled/Fault), 0x6060=ModesOfOperation[RW INT8] - Operation mode (1=PP/3=PV/4=PT/6=HM/8=CSP/9=CSV/10=CST), 0x6061=ModesOfOperationDisplay[RO INT8] - Current active mode, 0x6064=PositionActualValue[RO INT32] - Actual position (encoder counts), 0x606C=VelocityActualValue[RO INT32] - Actual velocity (user units/s), 0x6071=TargetTorque[RW INT16] - Target torque (per-mille of rated torque), 0x607A=TargetPosition[RW INT32] - Target position (Profile Position mode), 0x6081=ProfileVelocity[RW UINT32] - Max profile velocity (user units/s), 0x6083=ProfileAcceleration[RW UINT32] - Profile acceleration (user units/s²), 0x6084=ProfileDeceleration[RW UINT32] - Profile deceleration (user units/s²), 0x60FF=TargetVelocity[RW INT32] - Target velocity (Profile Velocity mode). Wheel motors use Profile Velocity mode (mode 3).",
|
||||
"RPDO1": [
|
||||
{
|
||||
"Index": "0x6040",
|
||||
"_Description": "Controlword - State machine control (Enable/Disable/Fault Reset/Quick Stop)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 16
|
||||
},
|
||||
{
|
||||
"Index": "0x6060",
|
||||
"_Description": "Modes of Operation - Operation mode (1=PP/3=PV/4=PT/6=HM/8=CSP/9=CSV/10=CST)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 8
|
||||
}
|
||||
],
|
||||
"RPDO2": [
|
||||
{
|
||||
"Index": "0x6081",
|
||||
"_Description": "Profile Velocity - Max profile velocity for profile motion (user units/s)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
}
|
||||
],
|
||||
"RPDO3": [
|
||||
{
|
||||
"Index": "0x6083",
|
||||
"_Description": "Profile Acceleration - Profile acceleration for profile motion (user units/s²)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
},
|
||||
{
|
||||
"Index": "0x6084",
|
||||
"_Description": "Profile Deceleration - Profile deceleration for profile motion (user units/s²)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
}
|
||||
],
|
||||
"RPDO4": [
|
||||
{
|
||||
"Index": "0x60FF",
|
||||
"_Description": "Target Velocity - Target velocity in Profile Velocity mode (user units/s)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
}
|
||||
],
|
||||
"TPDO1": [
|
||||
{
|
||||
"Index": "0x6041",
|
||||
"_Description": "Statusword - Motor status (Ready/Enabled/Fault/Warning/Target Reached)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 16
|
||||
},
|
||||
{
|
||||
"Index": "0x6061",
|
||||
"_Description": "Modes of Operation Display - Current active/running operation mode",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 8
|
||||
}
|
||||
],
|
||||
"TPDO2": [
|
||||
{
|
||||
"Index": "0x6064",
|
||||
"_Description": "Position Actual Value - Current actual position (encoder counts, real-time feedback)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
}
|
||||
],
|
||||
"TPDO3": [
|
||||
{
|
||||
"Index": "0x606C",
|
||||
"_Description": "Velocity Actual Value - Vận tốc thực tế hiện tại (user units/s hoặc RPM, real-time feedback)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
}
|
||||
]
|
||||
},
|
||||
"TPDOEventTimers": {
|
||||
"TPDO1": 0,
|
||||
"TPDO2": 0,
|
||||
"TPDO3": 50
|
||||
},
|
||||
"TPDOInhibitTimes": {
|
||||
"TPDO1": 100,
|
||||
"TPDO2": 10,
|
||||
"TPDO3": 10
|
||||
}
|
||||
}
|
||||
},
|
||||
"MBDV_Servo02": {
|
||||
"DeviceId": "left-wheel",
|
||||
"Enabled": true,
|
||||
"DeviceType": "CiA402Servo",
|
||||
"DeviceName": "Left Wheel Servo",
|
||||
"DriverName": "CiA402Servo",
|
||||
"DriverVersion": "1.0.0",
|
||||
"Description": "Left Wheel servo motor",
|
||||
"Connection": {
|
||||
"CanInterface": "can0",
|
||||
"NodeId": "2",
|
||||
"AutoReconnectEnabled": true,
|
||||
"ReconnectDelayMs": 3000,
|
||||
"MaxReconnectAttempts": 0,
|
||||
"PdoConfigRetryCount": 3,
|
||||
"PdoConfigRetryTimeoutMs": 1000,
|
||||
"UseHeartbeatCheck": true,
|
||||
"AllowedHomingMethods": [],
|
||||
"PdoMappings": {
|
||||
"_Comment": "CiA402 Object Dictionary Index Definitions: 0x6040=Controlword[WO UINT16] - State machine control (Enable/Disable/Fault Reset), 0x6041=Statusword[RO UINT16] - Motor status (Ready/Enabled/Fault), 0x6060=ModesOfOperation[RW INT8] - Operation mode (1=PP/3=PV/4=PT/6=HM/8=CSP/9=CSV/10=CST), 0x6061=ModesOfOperationDisplay[RO INT8] - Current active mode, 0x6064=PositionActualValue[RO INT32] - Actual position (encoder counts), 0x606C=VelocityActualValue[RO INT32] - Actual velocity (user units/s), 0x6071=TargetTorque[RW INT16] - Target torque (per-mille of rated torque), 0x607A=TargetPosition[RW INT32] - Target position (Profile Position mode), 0x6081=ProfileVelocity[RW UINT32] - Max profile velocity (user units/s), 0x6083=ProfileAcceleration[RW UINT32] - Profile acceleration (user units/s²), 0x6084=ProfileDeceleration[RW UINT32] - Profile deceleration (user units/s²), 0x60FF=TargetVelocity[RW INT32] - Target velocity (Profile Velocity mode). Wheel motors use Profile Velocity mode (mode 3).",
|
||||
"RPDO1": [
|
||||
{
|
||||
"Index": "0x6040",
|
||||
"_Description": "Controlword - State machine control (Enable/Disable/Fault Reset/Quick Stop)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 16
|
||||
},
|
||||
{
|
||||
"Index": "0x6060",
|
||||
"_Description": "Modes of Operation - Operation mode (1=PP/3=PV/4=PT/6=HM/8=CSP/9=CSV/10=CST)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 8
|
||||
}
|
||||
],
|
||||
"RPDO2": [
|
||||
{
|
||||
"Index": "0x6081",
|
||||
"_Description": "Profile Velocity - Max profile velocity for profile motion (user units/s)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
}
|
||||
],
|
||||
"RPDO3": [
|
||||
{
|
||||
"Index": "0x6083",
|
||||
"_Description": "Profile Acceleration - Profile acceleration for profile motion (user units/s²)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
},
|
||||
{
|
||||
"Index": "0x6084",
|
||||
"_Description": "Profile Deceleration - Profile deceleration for profile motion (user units/s²)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
}
|
||||
],
|
||||
"RPDO4": [
|
||||
{
|
||||
"Index": "0x60FF",
|
||||
"_Description": "Target Velocity - Target velocity in Profile Velocity mode (user units/s)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
}
|
||||
],
|
||||
"TPDO1": [
|
||||
{
|
||||
"Index": "0x6041",
|
||||
"_Description": "Statusword - Motor status (Ready/Enabled/Fault/Warning/Target Reached)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 16
|
||||
},
|
||||
{
|
||||
"Index": "0x6061",
|
||||
"_Description": "Modes of Operation Display - Current active/running operation mode",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 8
|
||||
}
|
||||
],
|
||||
"TPDO2": [
|
||||
{
|
||||
"Index": "0x6064",
|
||||
"_Description": "Position Actual Value - Current actual position (encoder counts, real-time feedback)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
}
|
||||
],
|
||||
"TPDO3": [
|
||||
{
|
||||
"Index": "0x606C",
|
||||
"_Description": "Velocity Actual Value - Vận tốc thực tế hiện tại (user units/s hoặc RPM, real-time feedback)",
|
||||
"SubIndex": 0,
|
||||
"BitLength": 32
|
||||
}
|
||||
]
|
||||
},
|
||||
"TPDOEventTimers": {
|
||||
"TPDO1": 0,
|
||||
"TPDO2": 0,
|
||||
"TPDO3": 50
|
||||
},
|
||||
"TPDOInhibitTimes": {
|
||||
"TPDO1": 100,
|
||||
"TPDO2": 10,
|
||||
"TPDO3": 10
|
||||
}
|
||||
}
|
||||
},
|
||||
"SickScanXdLidar01": {
|
||||
"DeviceId": "scan_1",
|
||||
"Enabled": true,
|
||||
"DeviceName": "SICK Scan XD LiDAR 1",
|
||||
"DeviceType": "Lidar",
|
||||
"DriverName": "SickScanXdLidarDriver",
|
||||
"DriverVersion": "1.0.0",
|
||||
"Description": "SICK Scan XD LiDAR Driver - TCP/IP SOPAS Protocol",
|
||||
"Connection": {
|
||||
"IpAddress": "192.168.254.11",
|
||||
"TcpPort": 2371,
|
||||
"ScannerType": "sick_tim_7xxS",
|
||||
"Protocol": "ColaB",
|
||||
"FrameId": "scan",
|
||||
"ConnectTimeoutMs": 5000,
|
||||
"CommandTimeoutMs": 5000,
|
||||
"ReadTimeoutMs": 5000,
|
||||
"AutoReconnectEnabled": true,
|
||||
"ReconnectDelayMs": 3000,
|
||||
"MaxReconnectAttempts": 0
|
||||
}
|
||||
},
|
||||
"SickScanXdLidar02": {
|
||||
"DeviceId": "scan_2",
|
||||
"Enabled": true,
|
||||
"DeviceName": "SICK Scan XD LiDAR 2",
|
||||
"DeviceType": "Lidar",
|
||||
"DriverName": "SickScanXdLidarDriver",
|
||||
"DriverVersion": "1.0.0",
|
||||
"Description": "SICK Scan XD LiDAR Driver - TCP/IP SOPAS Protocol",
|
||||
"Connection": {
|
||||
"IpAddress": "192.168.254.12",
|
||||
"TcpPort": 2372,
|
||||
"ScannerType": "sick_tim_7xxS",
|
||||
"Protocol": "ColaB",
|
||||
"FrameId": "scan",
|
||||
"ConnectTimeoutMs": 5000,
|
||||
"CommandTimeoutMs": 5000,
|
||||
"ReadTimeoutMs": 5000,
|
||||
"AutoReconnectEnabled": true,
|
||||
"ReconnectDelayMs": 3000,
|
||||
"MaxReconnectAttempts": 0
|
||||
}
|
||||
},
|
||||
"SickScanXdLidar03": {
|
||||
"DeviceId": "scan_3",
|
||||
"Enabled": true,
|
||||
"DeviceName": "SICK Scan XD LiDAR 3",
|
||||
"DeviceType": "Lidar",
|
||||
"DriverName": "SickScanXdLidarDriver",
|
||||
"DriverVersion": "1.0.0",
|
||||
"Description": "SICK Scan XD LiDAR Driver - TCP/IP SOPAS Protocol",
|
||||
"Connection": {
|
||||
"IpAddress": "192.168.254.13",
|
||||
"TcpPort": 2373,
|
||||
"ScannerType": "sick_tim_7xxS",
|
||||
"Protocol": "ColaB",
|
||||
"FrameId": "scan",
|
||||
"ConnectTimeoutMs": 5000,
|
||||
"CommandTimeoutMs": 5000,
|
||||
"ReadTimeoutMs": 5000,
|
||||
"AutoReconnectEnabled": true,
|
||||
"ReconnectDelayMs": 3000,
|
||||
"MaxReconnectAttempts": 0
|
||||
}
|
||||
},
|
||||
"Oleilidar": {
|
||||
"DeviceId": "olei-front",
|
||||
"Enabled": true,
|
||||
"DeviceName": "Olei",
|
||||
"DeviceType": "Lidar",
|
||||
"DriverName": "Olei2dLidarDriver",
|
||||
"DriverVersion": "1.0.0",
|
||||
"Description": "Olei Safety Scanner LiDAR with custom scan angle configuration",
|
||||
"Connection": {
|
||||
"UdpPort": 2368,
|
||||
"FrameId": "olei-front"
|
||||
}
|
||||
},
|
||||
"WheeltecIMU": {
|
||||
"DeviceId": "wheetec-imu",
|
||||
"Enabled": true,
|
||||
"DeviceName": "Wheetec N100 IMU",
|
||||
"DeviceType": "IMU",
|
||||
"DriverName": "WheeltecN100IMU",
|
||||
"DriverVersion": "1.0.0",
|
||||
"Description": "IMU",
|
||||
"Connection": {
|
||||
"Port": "/dev/ttyUSB0",
|
||||
"BaudRate": 921600,
|
||||
"Timeout": 2000
|
||||
}
|
||||
}
|
||||
},
|
||||
"Motion": {
|
||||
"DifferentialDrive": {
|
||||
"Enable": true,
|
||||
"LeftWheel": {
|
||||
"DeviceId": "left-wheel",
|
||||
"Position": {
|
||||
"Position": {
|
||||
"X": 0.0,
|
||||
"Y": 0.23625,
|
||||
"Z": 0.0
|
||||
},
|
||||
"Orientation": {
|
||||
"X": 0.0,
|
||||
"Y": 0.0,
|
||||
"Z": 0.7071067,
|
||||
"W": 0.7071067
|
||||
}
|
||||
},
|
||||
"WheelDiameter": 0.2495,
|
||||
"PulsesPerRevolution": 100000,
|
||||
"IsReversed": false
|
||||
},
|
||||
"RightWheel": {
|
||||
"DeviceId": "right-wheel",
|
||||
"Position": {
|
||||
"Position": {
|
||||
"X": 0.0,
|
||||
"Y": -0.23625,
|
||||
"Z": 0.0
|
||||
},
|
||||
"Orientation": {
|
||||
"X": 0.0,
|
||||
"Y": 0.0,
|
||||
"Z": -0.7071067,
|
||||
"W": 0.7071067
|
||||
}
|
||||
},
|
||||
"WheelDiameter": 0.2495,
|
||||
"PulsesPerRevolution": 100000,
|
||||
"IsReversed": true
|
||||
}
|
||||
},
|
||||
"ManualControl": {
|
||||
"Enable": true,
|
||||
"UsingKeyboard": true,
|
||||
"MinLinearVelocity": 0.0,
|
||||
"MaxLinearVelocity": 0.5,
|
||||
"MinAngularVelocity": 0.0,
|
||||
"MaxAngularVelocity": 0.3,
|
||||
"UpdateRate": 20.0,
|
||||
"Acceleration": 0.5,
|
||||
"Deceleration": 0.5
|
||||
}
|
||||
},
|
||||
"Modules": {
|
||||
"LiftModule": {
|
||||
"Enable": false
|
||||
},
|
||||
"RotationModule": {
|
||||
"Enable": false
|
||||
}
|
||||
},
|
||||
"Cartographer": {
|
||||
"Enable": true,
|
||||
"Sensors": {
|
||||
"Lidars": [
|
||||
{
|
||||
"DeviceId": "scan_1",
|
||||
"Enabled": false,
|
||||
"Transform": {
|
||||
"Translation": {
|
||||
"X": 0.7072,
|
||||
"Y": 0.28235,
|
||||
"Z": 0.0
|
||||
},
|
||||
"Rotation": {
|
||||
"X": 0.0,
|
||||
"Y": 0.0,
|
||||
"Z": -0.3826834,
|
||||
"W": 0.9238795
|
||||
}
|
||||
},
|
||||
"AngleMin": -40,
|
||||
"AngleMax": 220
|
||||
},
|
||||
{
|
||||
"DeviceId": "scan_2",
|
||||
"Enabled": true,
|
||||
"Transform": {
|
||||
"Translation": {
|
||||
"X": 0.7072,
|
||||
"Y": -0.28235,
|
||||
"Z": 0.0
|
||||
},
|
||||
"Rotation": {
|
||||
"X": 0.0,
|
||||
"Y": 0.0,
|
||||
"Z": -0.9238795,
|
||||
"W": 0.3826834
|
||||
}
|
||||
},
|
||||
"AngleMin": -40,
|
||||
"AngleMax": 220
|
||||
},
|
||||
{
|
||||
"DeviceId": "scan_3",
|
||||
"Enabled": false,
|
||||
"Transform": {
|
||||
"Translation": {
|
||||
"X": -0.1184,
|
||||
"Y": 0.0,
|
||||
"Z": 0.0
|
||||
},
|
||||
"Rotation": {
|
||||
"X": 0.0,
|
||||
"Y": 0.0,
|
||||
"Z": 0.7071068,
|
||||
"W": 0.7071068
|
||||
}
|
||||
},
|
||||
"AngleMin": -40,
|
||||
"AngleMax": 220
|
||||
}
|
||||
],
|
||||
"Imu": {
|
||||
"DeviceId": "wheetec-imu",
|
||||
"Enabled": true,
|
||||
"Transform": {
|
||||
"Translation": {
|
||||
"X": 0.0,
|
||||
"Y": 0.0,
|
||||
"Z": 0.0
|
||||
},
|
||||
"Rotation": {
|
||||
"X": 1.0,
|
||||
"Y": 0.0,
|
||||
"Z": 0.0,
|
||||
"W": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"TrajectoryBuilder": {
|
||||
"Use2D": true,
|
||||
"MinRange": 0.1,
|
||||
"MaxRange": 18.0,
|
||||
"MinZ": -0.8,
|
||||
"MaxZ": 2.0,
|
||||
"MissingDataRayLength": 5.0,
|
||||
"VoxelFilterSize": 0.01,
|
||||
"NumAccumulatedRangeData": 1,
|
||||
"UseImuData": true,
|
||||
"UseOnlineCorrelativeScanMatching": true,
|
||||
"RealTimeCorrelativeScanMatcherOptions": {
|
||||
"LinearSearchWindow": 0.05,
|
||||
"AngularSearchWindow": 0.1745,
|
||||
"TranslationDeltaCostWeight": 1.0,
|
||||
"RotationDeltaCostWeight": 1.0,
|
||||
"NumThreads": 3
|
||||
},
|
||||
"CeresScanMatcherOptions": {
|
||||
"OccupiedSpaceWeight": 2.0,
|
||||
"TranslationWeight": 20.0,
|
||||
"RotationWeight": 60.0,
|
||||
"HighResOccupiedSpaceWeight": 2.0,
|
||||
"HighResTranslationWeight": 20.0,
|
||||
"HighResRotationWeight": 60.0,
|
||||
"LandmarkWeight": 0.0,
|
||||
"CeresSolverOptions": {
|
||||
"UseNonmonotonicSteps": true,
|
||||
"MaxNumIterations": 30,
|
||||
"NumThreads": 3
|
||||
}
|
||||
},
|
||||
"InitialPoseRealTimeCorrelativeScanMatcherOptions": {
|
||||
"_comment": "Enhanced scan matching for SetInitialPoseAsync - wider search window for relocalization",
|
||||
"LinearSearchWindow": 0.5,
|
||||
"AngularSearchWindow": 0.5,
|
||||
"TranslationDeltaCostWeight": 1.0,
|
||||
"RotationDeltaCostWeight": 1.0,
|
||||
"NumThreads": 3
|
||||
},
|
||||
"InitialPoseCeresScanMatcherOptions": {
|
||||
"_comment": "Stricter Ceres optimization for SetInitialPoseAsync - higher weights for better accuracy",
|
||||
"OccupiedSpaceWeight": 20.0,
|
||||
"TranslationWeight": 50.0,
|
||||
"RotationWeight": 10.0,
|
||||
"CeresSolverOptions": {
|
||||
"UseNonmonotonicSteps": true,
|
||||
"MaxNumIterations": 100,
|
||||
"NumThreads": 3,
|
||||
"FunctionTolerance": 0.0001,
|
||||
"GradientTolerance": 0.000001,
|
||||
"ParameterTolerance": 0.000001
|
||||
}
|
||||
},
|
||||
"MotionFilterOptions": {
|
||||
"MaxTimeSeconds": 5.0,
|
||||
"MaxDistanceMeters": 0.2,
|
||||
"MaxAngleRadians": 0.0175
|
||||
},
|
||||
"AdaptiveVoxelFilterOptions": {
|
||||
"MaxLength": 0.3,
|
||||
"MinNumPoints": 250,
|
||||
"MaxRange": 50.0
|
||||
},
|
||||
"LoopClosureAdaptiveVoxelFilterOptions": {
|
||||
"MaxLength": 0.9,
|
||||
"MinNumPoints": 100,
|
||||
"MaxRange": 50.0
|
||||
},
|
||||
"PoseExtrapolatorOptions": {
|
||||
"UseImuBased": true,
|
||||
"ConstantVelocity": {
|
||||
"ImuGravityTimeConstant": 10.0,
|
||||
"PoseQueueDuration": 0.001
|
||||
},
|
||||
"ImuBased": {
|
||||
"PoseQueueDuration": 5.0,
|
||||
"GravityConstant": 9.806,
|
||||
"PoseTranslationWeight": 1.0,
|
||||
"PoseRotationWeight": 1.0,
|
||||
"ImuAccelerationWeight": 1.0,
|
||||
"ImuRotationWeight": 1.0,
|
||||
"OdometryTranslationWeight": 1.0,
|
||||
"OdometryRotationWeight": 1.0,
|
||||
"SolverOptions": {
|
||||
"UseNonmonotonicSteps": false,
|
||||
"MaxNumIterations": 20,
|
||||
"NumThreads": 3,
|
||||
"FunctionTolerance": null,
|
||||
"GradientTolerance": null,
|
||||
"ParameterTolerance": null
|
||||
}
|
||||
},
|
||||
"_comment_deprecated": "The following fields are DEPRECATED and IGNORED by PoseExtrapolator (removed in C++ port to match original Cartographer): VelocityThreshold, AccelerationThreshold, GravityDeviationThreshold, UseOdometryDirectly. They remain here for backward compatibility but have no effect.",
|
||||
"VelocityThreshold": 0.003,
|
||||
"AccelerationThreshold": 0.4,
|
||||
"GravityDeviationThreshold": 0.1,
|
||||
"UseOdometryDirectly": true
|
||||
},
|
||||
"ScanMatchingDebugOptions": {
|
||||
"EnableDebugMode": true,
|
||||
"MinCostReductionPercent": 80.0,
|
||||
"MaxPoseChangeDistanceMeters": 0.5,
|
||||
"MaxPoseChangeRotationDegrees": 5.0
|
||||
},
|
||||
"SubmapsOptions": {
|
||||
"NumRangeData": 100,
|
||||
"GridOptions": {
|
||||
"GridType": 1,
|
||||
"Resolution": 0.025
|
||||
},
|
||||
"RangeDataInserterOptions": {
|
||||
"RangeDataInserterType": 1,
|
||||
"ProbabilityGridRangeDataInserterOptions": {
|
||||
"HitProbability": 0.6,
|
||||
"MissProbability": 0.45,
|
||||
"InsertFreeSpace": true
|
||||
},
|
||||
"TsdfRangeDataInserterOptions": {
|
||||
"TruncationDistance": 0.3,
|
||||
"MaximumWeight": 10.0,
|
||||
"UpdateFreeSpace": false,
|
||||
"NormalEstimationOptions": {
|
||||
"NumNormalSamples": 4,
|
||||
"SampleRadius": 0.5
|
||||
},
|
||||
"ProjectSdfDistanceToScanNormal": true,
|
||||
"UpdateWeightRangeExponent": 0,
|
||||
"UpdateWeightAngleScanNormalToRayKernelBandwidth": 0.5,
|
||||
"UpdateWeightDistanceCellToHitKernelBandwidth": 0.5
|
||||
}
|
||||
}
|
||||
},
|
||||
"HighResGridOptions": {
|
||||
"GridType": 1,
|
||||
"Resolution": 0.025
|
||||
},
|
||||
"HighResAdaptiveVoxelFilterOptions": {
|
||||
"MaxLength": 0.5,
|
||||
"MinNumPoints": 200,
|
||||
"MaxRange": 50.0
|
||||
},
|
||||
"HighResVoxelFilterSize": 0.025,
|
||||
"LandmarkThreshold": {
|
||||
"MirrorLandmarkMatchingDistance": 0.5,
|
||||
"NewLandmarkDistance": 2.0,
|
||||
"LocalLandmarksHistory": 80
|
||||
},
|
||||
"NumDuplicateInsertToAccurateSubmap": 1,
|
||||
"TrueScoreCellThreshold": 0.75,
|
||||
"_comment_ProvideConfidenceScore": "When enabled, computes a confidence score for each pose estimate using RealTimeCorrelativeScanMatcher. The confidence score indicates how well the scan matches the current submap (0.0 = poor match, 1.0 = perfect match). Useful for detecting localization failures or low-quality pose estimates. Default: false (disabled for performance).",
|
||||
"ProvideConfidenceScore": true
|
||||
},
|
||||
"MapBuilder": {
|
||||
"UseTrajectoryBuilder2D": true,
|
||||
"UseTrajectoryBuilder3D": null,
|
||||
"NumBackgroundThreads": 4,
|
||||
"CollateByTrajectory": true,
|
||||
"OptimizeEveryNNodes": 0,
|
||||
"MatcherTranslationWeight": 500.0,
|
||||
"MatcherRotationWeight": 1600.0,
|
||||
"MaxNumFinalIterations": 200,
|
||||
"GlobalSamplingRatio": 0.05,
|
||||
"LogResidualHistograms": false,
|
||||
"GlobalConstraintSearchAfterNSeconds": 30.0,
|
||||
"PoseGraphOptimizationProblemOptions": {
|
||||
"HuberScale": 10.0,
|
||||
"OdometryHuberScale": 1.0,
|
||||
"LocalSlamPoseHuberScale": 1.0,
|
||||
"AccelerationWeight": 110.0,
|
||||
"RotationWeight": 16000.0,
|
||||
"LocalSlamPoseTranslationWeight": 10.0,
|
||||
"LocalSlamPoseRotationWeight": 10.0,
|
||||
"OdometryTranslationWeight": 10.0,
|
||||
"OdometryRotationWeight": 10.0,
|
||||
"FixedFramePoseTranslationWeight": 10.0,
|
||||
"FixedFramePoseRotationWeight": 100.0,
|
||||
"FixedFramePoseUseTolerantLoss": false,
|
||||
"FixedFramePoseTolerantLossParamA": 1.0,
|
||||
"FixedFramePoseTolerantLossParamB": 1.0,
|
||||
"LogSolverSummary": false,
|
||||
"MaxNumIterations": 20,
|
||||
"CeresSolverOptions": {
|
||||
"UseNonmonotonicSteps": true,
|
||||
"MaxNumIterations": 50,
|
||||
"NumThreads": 3,
|
||||
"FunctionTolerance": 0.001,
|
||||
"GradientTolerance": 0.000001,
|
||||
"ParameterTolerance": 0.000001
|
||||
}
|
||||
},
|
||||
"ConstraintBuilderOptions": {
|
||||
"SamplingRatio": 0.1,
|
||||
"MaxConstraintDistance": 15.0,
|
||||
"MinScore": 0.5,
|
||||
"GlobalLocalizationMinScore": 0.55,
|
||||
"LoopClosureTranslationWeight": 11000.0,
|
||||
"LoopClosureRotationWeight": 100000.0,
|
||||
"LogMatches": false,
|
||||
"FastCorrelativeScanMatcherOptions": {
|
||||
"LinearSearchWindow": 3,
|
||||
"AngularSearchWindow": 3.1415,
|
||||
"BranchAndBoundDepth": 5,
|
||||
"LocalizationLinearSearchWindow": 3.0,
|
||||
"LocalizationAngularSearchWindow": 3.14159
|
||||
},
|
||||
"CeresScanMatcherOptions": {
|
||||
"OccupiedSpaceWeight": 20.0,
|
||||
"TranslationWeight": 10.0,
|
||||
"RotationWeight": 1.0,
|
||||
"HighResOccupiedSpaceWeight": 1.0,
|
||||
"HighResTranslationWeight": 10.0,
|
||||
"HighResRotationWeight": 40.0,
|
||||
"LandmarkWeight": 0.0,
|
||||
"CeresSolverOptions": {
|
||||
"UseNonmonotonicSteps": true,
|
||||
"MaxNumIterations": 50,
|
||||
"NumThreads": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
"OverlappingSubmapsTrimmer2D": {
|
||||
"FreshSubmapsCount": 2,
|
||||
"MinCoveredArea": 1.0,
|
||||
"MinAddedSubmapsCount": 5
|
||||
}
|
||||
},
|
||||
"MapStorage": {
|
||||
"Directory": "./bin/maps",
|
||||
"OccupancyGridResolution": 0.05,
|
||||
"MapPadding": 0.5,
|
||||
"PngVisualizationOptions": {
|
||||
"ShowGrid": true,
|
||||
"ShowTrajectory": true,
|
||||
"GridColor": "#CCCCCC",
|
||||
"TrajectoryColor": "#FF0000"
|
||||
}
|
||||
},
|
||||
"Mcl": {
|
||||
"_comment": "Monte Carlo Localization (xloc MCL). Params aligned with refs/xloc_cpp-main/configuration_files/mcl.yaml and MCLThread convergence (pose_change 0.03m, yaw 0.05rad, stable 0.3s, reliability>=0.9, mae<=0.12, timeout 3s).",
|
||||
"Enabled": true,
|
||||
"PrimaryLidarId": "sick-lidar-002",
|
||||
"InitialNoiseX": 1.0,
|
||||
"InitialNoiseY": 1.0,
|
||||
"InitialNoiseYaw": 0.3,
|
||||
"InitialNoiseWhenPoseGivenX": 0.15,
|
||||
"InitialNoiseWhenPoseGivenY": 0.15,
|
||||
"InitialNoiseWhenPoseGivenYaw": 0.05,
|
||||
"ParticlesNum": 1000,
|
||||
"UseAugmentedMcl": true,
|
||||
"AddRandomParticlesInResampling": true,
|
||||
"RandomParticlesRate": 0.1,
|
||||
"RandomParticlesNoise": [
|
||||
0.05,
|
||||
0.05,
|
||||
0.1
|
||||
],
|
||||
"OdomNoiseDdm": [
|
||||
1.0,
|
||||
0.5,
|
||||
0.5,
|
||||
1.5
|
||||
],
|
||||
"OdomNoiseOdm": [
|
||||
4.0,
|
||||
1.0,
|
||||
1.0,
|
||||
1.0,
|
||||
4.0,
|
||||
1.0,
|
||||
1.0,
|
||||
1.0,
|
||||
8.0
|
||||
],
|
||||
"UseOmniDirectionalModel": false,
|
||||
"MeasurementModelType": 2,
|
||||
"ScanStep": 10,
|
||||
"ZHit": 0.9,
|
||||
"ZShort": 0.2,
|
||||
"ZMax": 0.05,
|
||||
"ZRand": 0.05,
|
||||
"VarHit": 0.08,
|
||||
"LambdaShort": 1.0,
|
||||
"LambdaUnknown": 0.01,
|
||||
"KnownClassPrior": 0.5,
|
||||
"UnknownScanProbThreshold": 0.9,
|
||||
"AlphaSlow": 0.001,
|
||||
"AlphaFast": 0.99,
|
||||
"RejectUnknownScan": true,
|
||||
"ResampleThresholdEss": 0.5,
|
||||
"ResampleThresholds": [
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.02,
|
||||
-99999.0
|
||||
],
|
||||
"RelTransDdm": [
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"RelTransOdm": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"ClassifierType": 0,
|
||||
"EstimateReliability": true,
|
||||
"FailureThreshold": 0.12,
|
||||
"UseGLPoseSampler": true,
|
||||
"GLSampledPoseTimeTH": 0.5,
|
||||
"GmmPositionalVariance": 0.1,
|
||||
"GmmAngularVariance": 0.1,
|
||||
"PredDistUnifRate": 0.05,
|
||||
"ConvergencePoseChangeThresholdMeters": 0.03,
|
||||
"ConvergenceYawChangeThresholdRad": 0.05,
|
||||
"ConvergenceStableDurationSeconds": 0.3,
|
||||
"ConvergenceReliabilityMin": 0.9,
|
||||
"ConvergenceMaeMaxMeters": 0.12,
|
||||
"ConvergenceTimeoutSeconds": 3.0,
|
||||
"ConvergenceMaxIterations": 300,
|
||||
"ConvergenceMinIterations": 10,
|
||||
"ReliabilityMonitoring": {
|
||||
"EnableReliabilityMonitoring": true,
|
||||
"MonitoringIntervalSeconds": 2.0,
|
||||
"MonitoringParticlesNum": 500,
|
||||
"MonitoringIterationsPerCycle": 5
|
||||
}
|
||||
}
|
||||
},
|
||||
"Detection": {
|
||||
"MarkerDetector": {
|
||||
"LidarDevices": [
|
||||
{
|
||||
"DeviceId": "olei-front",
|
||||
"Position": {
|
||||
"X": 0.72,
|
||||
"Y": 0.0,
|
||||
"Z": 0.0
|
||||
},
|
||||
"Orientation": {
|
||||
"X": 1.0,
|
||||
"Y": 0.0,
|
||||
"Z": 0.0,
|
||||
"W": 0.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"QrDevices": []
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user