Files
Denso/srcs/RobotNet10/RobotApp/RobotNet10.RobotApp/ModelConfigs/T800.json
2026-07-03 16:31:37 +07:00

1215 lines
39 KiB
JSON

{
"Devices": {
"YNZDH_Rfhandle": {
"DeviceId": "rfhandle-YNZDH-001",
"Enabled": true,
"DeviceName": "YNZDH_RfHandle",
"DeviceType": "RfHandle",
"DriverName": "YNZDH_RfHandle",
"DriverVersion": "1.0.0",
"Connection": {
"Port": "/dev/ttyS0",
"BaudRate": 9600,
"AxisCount": 4,
"ButtonCount": 8,
"HatCount": 1,
"AutoReconnectEnabled": true
}
},
"BatteryTada": {
"DeviceId": "battery-tada-001",
"Enabled": false,
"DeviceName": "Battery Tada 1",
"DeviceType": "Battery",
"DriverName": "TadaBattery",
"DriverVersion": "1.0.0",
"Connection": {
"Port": "/dev/ttyS1",
"BaudRate": 19200,
"AutoReconnectEnabled": true,
"ReconnectDelayMs": 3000,
"MaxReconnectAttempts": 0
}
},
"MBDV_Servo01": {
"DeviceId": "right-wheel",
"Enabled": true,
"DeviceType": "CiA402Servo",
"DeviceName": "Right Wheel Servo",
"DriverName": "CiA402Servo",
"DriverVersion": "1.0.0",
"Description": "Right Wheel servo motor (Profile Velocity mode)",
"Connection": {
"CanInterface": "can0",
"NodeId": "1",
"AutoReconnectEnabled": true,
"ReconnectDelayMs": 3000,
"MaxReconnectAttempts": 0,
"PdoConfigRetryCount": 3,
"PdoConfigRetryTimeoutMs": 1000,
"UseHeartbeatCheck": true,
"AllowedHomingMethods": [],
"ObjectInitialValues": [],
"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 - Current actual velocity (user units/s or 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 (Profile Velocity mode)",
"Connection": {
"CanInterface": "can0",
"NodeId": "2",
"AutoReconnectEnabled": true,
"ReconnectDelayMs": 3000,
"MaxReconnectAttempts": 0,
"PdoConfigRetryCount": 3,
"PdoConfigRetryTimeoutMs": 1000,
"UseHeartbeatCheck": true,
"AllowedHomingMethods": [],
"ObjectInitialValues": [],
"PdoMappings": {
"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 - Gia tốc giảm tốc trong 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
}
}
},
"Kinco_Servo01": {
"DeviceId": "motor-lift",
"Enabled": true,
"DeviceType": "CiA402Servo",
"DeviceName": "Lift Servo",
"DriverName": "CiA402Servo",
"DriverVersion": "1.0.0",
"Description": "Lift servo motor (Profile Position mode)",
"Connection": {
"CanInterface": "can1",
"NodeId": "1",
"AutoReconnectEnabled": true,
"ReconnectDelayMs": 3000,
"MaxReconnectAttempts": 0,
"PdoConfigRetryCount": 3,
"PdoConfigRetryTimeoutMs": 1000,
"UseHeartbeatCheck": true,
"AllowedHomingMethods": [],
"ObjectInitialValues": [
{
"Index": 4119,
"SubIndex": 0,
"Type": "UInt16",
"Value": "500"
}
],
"PdoMappings": {
"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": "0x607A",
"_Description": "Target Position - Target position in Profile Position mode (encoder counts)",
"SubIndex": 0,
"BitLength": 32
},
{
"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": 0
},
"TPDOInhibitTimes": {
"TPDO1": 100,
"TPDO2": 10,
"TPDO3": 10
}
}
},
"Kinco_Servo02": {
"DeviceId": "motor-rotary",
"Enabled": true,
"DeviceType": "CiA402Servo",
"DeviceName": "Station Rotary Servo",
"DriverName": "CiA402Servo",
"DriverVersion": "1.0.0",
"Description": "Station Rotary servo motor (Profile Position mode)",
"Connection": {
"CanInterface": "can1",
"NodeId": "2",
"AutoReconnectEnabled": true,
"ReconnectDelayMs": 3000,
"MaxReconnectAttempts": 0,
"PdoConfigRetryCount": 3,
"PdoConfigRetryTimeoutMs": 1000,
"UseHeartbeatCheck": true,
"AllowedHomingMethods": [],
"ObjectInitialValues": [
{
"Index": 4119,
"SubIndex": 0,
"Type": "UInt16",
"Value": "500"
}
],
"PdoMappings": {
"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": "0x607A",
"_Description": "Target Position - Target position in Profile Position mode (encoder counts)",
"SubIndex": 0,
"BitLength": 32
},
{
"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 - Gia tốc giảm tốc trong 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 - Current actual velocity (user units/s or RPM, real-time feedback)",
"SubIndex": 0,
"BitLength": 32
}
]
},
"TPDOEventTimers": {
"TPDO1": 0,
"TPDO2": 0,
"TPDO3": 0
},
"TPDOInhibitTimes": {
"TPDO1": 100,
"TPDO2": 10,
"TPDO3": 10
}
}
},
"SickLidar01": {
"DeviceId": "sick-lidar-001",
"Enabled": true,
"DeviceName": "SICK Safety Scanner LiDAR 1",
"DeviceType": "Lidar",
"DriverName": "SickLidarDriver",
"DriverVersion": "1.0.0",
"Description": "SICK Safety Scanner LiDAR Driver - UDP Streaming Mode",
"Connection": {
"IpAddress": "192.168.254.11",
"TcpPort": 2122,
"UdpLocalPort": 6060,
"HostIp": null,
"StartAngle": null,
"EndAngle": null,
"ConnectTimeoutMs": 5000,
"CommandTimeoutMs": 5000,
"AutoReconnectEnabled": true,
"ReconnectDelayMs": 5000,
"MaxReconnectAttempts": 5,
"ScanTopic": "/scan",
"FrameId": "lidar_frame"
}
},
"SickLidar02": {
"DeviceId": "sick-lidar-002",
"Enabled": true,
"DeviceName": "SICK Safety Scanner LiDAR 2",
"DeviceType": "Lidar",
"DriverName": "SickLidarDriver",
"DriverVersion": "1.0.0",
"Description": "SICK Safety Scanner LiDAR with custom scan angle configuration",
"Connection": {
"IpAddress": "192.168.254.12",
"TcpPort": 2122,
"UdpLocalPort": 6061,
"HostIp": null,
"StartAngle": null,
"EndAngle": null,
"ConnectTimeoutMs": 10000,
"CommandTimeoutMs": 10000,
"AutoReconnectEnabled": true,
"ReconnectDelayMs": 5000,
"MaxReconnectAttempts": 5,
"ScanTopic": "/scan",
"FrameId": "lidar_frame"
}
},
"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
}
},
"PLC": {
"DeviceId": "plc-001",
"Enabled": true,
"DeviceName": "PLC_Controller",
"DeviceType": "ModbusTcp",
"DriverName": "ModbusTCP",
"DriverVersion": "1.0.0",
"Connection": {
"Port": 502,
"IpAddress": "192.168.254.5",
"SlaveId": 1,
"SyncIntervalMs": 200,
"ConnectTimeoutMs": 5000,
"AutoReconnectEnabled": true,
"Coils": {
"Range1": {
"StartAddress": 2848,
"Quantity": 32,
"Name": "Input PLC"
},
"Range2": {
"StartAddress": 2948,
"Quantity": 33,
"Name": "Output PLC"
}
}
}
},
"HikVisionQr": {
"DeviceId": "hik-qr-001",
"Enabled": true,
"DeviceName": "HikVision QR Camera",
"DeviceType": "CameraQr",
"DriverName": "HikVisionQr",
"DriverVersion": "1.0.0",
"Description": "HikVision Camera for QR Code Detection",
"Connection": {
"LocalIP": "192.168.254.2",
"LocalPort": 1024,
"CameraWidth": 800,
"CameraHeight": 600,
"DistanceToQr": 0.115,
"FovRangeWidthMm": 170.0,
"FovRangeHeightMm": 130.0,
"FovRangeDistanceMm": 100.0,
"QrDataTimeoutSeconds": 3.0,
"AutoReconnectEnabled": true,
"ReconnectDelayMs": 3000,
"MaxReconnectAttempts": 0
}
}
},
"Motion": {
"DifferentialDrive": {
"Enable": true,
"LeftWheel": {
"DeviceId": "left-wheel",
"Position": {
"Position": {
"X": 0.0,
"Y": 0.398,
"Z": 0.0
},
"Orientation": {
"X": 0.0,
"Y": 0.0,
"Z": 0.7071067,
"W": 0.7071067
}
},
"WheelDiameter": 0.18,
"PulsesPerRevolution": 100000,
"IsReversed": true
},
"RightWheel": {
"DeviceId": "right-wheel",
"Position": {
"Position": {
"X": 0.0,
"Y": -0.398,
"Z": 0.0
},
"Orientation": {
"X": 0.0,
"Y": 0.0,
"Z": -0.7071067,
"W": 0.7071067
}
},
"WheelDiameter": 0.18,
"PulsesPerRevolution": 100000,
"IsReversed": false
},
"Ekf": {
"Enable": true,
"ImuDeviceId": "wheetec-imu",
"ImuPose": {
"Position": {
"X": 0.0,
"Y": 0.0,
"Z": 0.0
},
"Orientation": {
"_comment": "IMU mounted upside-down: 180deg rotation around X-axis. This inverts Z-axis.",
"X": 1.0,
"Y": 0.0,
"Z": 0.0,
"W": 0.0
}
},
"InitialPositionVariance": 0.001,
"InitialOrientationVariance": 0.001,
"InitialVelocityVariance": 0.01,
"ProcessNoisePosition": 0.0001,
"ProcessNoiseOrientation": 0.001,
"_comment_ProcessNoiseOrientation": "Increased from 0.00001 to 0.001 for faster response to IMU. Higher value = more responsive to measurements, lower = more trust in encoder model.",
"ProcessNoiseVelocity": 0.01,
"MeasurementNoiseOdometryVelocity": 0.05,
"MeasurementNoiseOdometryAngular": 0.01,
"MeasurementNoiseImuAccel": 0.1,
"MeasurementNoiseImuAngular": 0.005,
"_comment_MeasurementNoiseImuAngular": "Reduced from 0.01 to 0.005 to trust IMU angular velocity more"
}
},
"ManualControl": {
"Enable": true,
"UsingKeyboard": false,
"RfHandleDeviceId": "rfhandle-YNZDH-001",
"MinLinearVelocity": 0.0,
"MaxLinearVelocity": 1.5,
"MinAngularVelocity": 0.0,
"MaxAngularVelocity": 1.0,
"UpdateRate": 20.0,
"Acceleration": 0.5,
"Deceleration": 0.5
}
},
"Modules": {
"LiftModule": {
"Enable": true,
"DeviceId": "motor-lift",
"HomingMethod": 17,
"HomingSpeed": 5000000,
"HomingOffset": 10000,
"ProfileVelocity": 10000000,
"ProfileAcceleration": 50000,
"ProfileDeceleration": 50000,
"MinPosition": 0,
"MaxPosition": 3500000,
"StatusWordCheckIntervalMs": 50
},
"RotationModule": {
"Enable": true,
"DeviceId": "motor-rotary",
"HomingMethod": 20,
"HomingSpeed": 5000000,
"HomingOffset": -21000,
"ProfileVelocity": 5000000,
"ProfileAcceleration": 10000,
"ProfileDeceleration": 10000,
"Resolution": 3556000,
"IsReversed": true,
"MinAngle": null,
"MaxAngle": null,
"StatusWordCheckIntervalMs": 50
}
},
"Cartographer": {
"Enabled": true,
"UseOdometry": true,
"Sensors": {
"OdometryUpdateIntervalMs": 5,
"ImuUpdateIntervalMs": 0,
"Lidars": [
{
"DeviceId": "sick-lidar-001",
"Enabled": true,
"Transform": {
"Translation": {
"X": 0.488,
"Y": 0.39,
"Z": 0.0
},
"Rotation": {
"X": 0.0,
"Y": 0.0,
"Z": -0.3826834,
"W": 0.9238795
}
},
"AngleMin": -40,
"AngleMax": 220
},
{
"DeviceId": "sick-lidar-002",
"Enabled": true,
"Transform": {
"Translation": {
"X": -0.488,
"Y": -0.39,
"Z": 0.0
},
"Rotation": {
"X": 0.0,
"Y": 0.0,
"Z": 0.9238795,
"W": 0.3826834
}
},
"AngleMin": -40,
"AngleMax": 220
}
],
"Imu": {
"DeviceId": "wheetec-imu",
"Enabled": false,
"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.5,
"MaxRange": 18.0,
"MinZ": -0.8,
"MaxZ": 2.0,
"MissingDataRayLength": 5.0,
"VoxelFilterSize": 0.025,
"NumAccumulatedRangeData": 2,
"UseImuData": false,
"UseOnlineCorrelativeScanMatching": true,
"RealTimeCorrelativeScanMatcherOptions": {
"LinearSearchWindow": 0.15,
"AngularSearchWindow": 0.1745329252,
"TranslationDeltaCostWeight": 20.0,
"RotationDeltaCostWeight": 20.0,
"NumThreads": 8
},
"CeresScanMatcherOptions": {
"OccupiedSpaceWeight": 10.0,
"TranslationWeight": 40.0,
"RotationWeight": 100.0,
"HighResOccupiedSpaceWeight": 5.0,
"HighResTranslationWeight": 40.0,
"HighResRotationWeight": 100.0,
"LandmarkWeight": 0.0,
"CeresSolverOptions": {
"UseNonmonotonicSteps": false,
"MaxNumIterations": 20,
"NumThreads": 8,
"_comment_tolerances": "Aggressive tolerances for fast convergence with accurate odometry/IMU",
"FunctionTolerance": 0.0001,
"GradientTolerance": 0.000001,
"ParameterTolerance": 0.000001
}
},
"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": 8
},
"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": 20,
"NumThreads": 8,
"FunctionTolerance": 0.0001,
"GradientTolerance": 0.000001,
"ParameterTolerance": 0.000001
}
},
"MotionFilterOptions": {
"MaxTimeSeconds": 5.0,
"MaxDistanceMeters": 0.1,
"MaxAngleRadians": 0.0873
},
"AdaptiveVoxelFilterOptions": {
"MaxLength": 0.8,
"MinNumPoints": 100,
"MaxRange": 50.0
},
"LoopClosureAdaptiveVoxelFilterOptions": {
"MaxLength": 0.9,
"MinNumPoints": 100,
"MaxRange": 50.0
},
"PoseExtrapolatorOptions": {
"UseImuBased": false,
"ConstantVelocity": {
"ImuGravityTimeConstant": 10.0,
"PoseQueueDuration": 0.05
},
"ImuBased": {
"PoseQueueDuration": 1.0,
"GravityConstant": 9.806,
"PoseTranslationWeight": 1.0,
"PoseRotationWeight": 1.0,
"ImuAccelerationWeight": 1.0,
"ImuRotationWeight": 1.0,
"OdometryTranslationWeight": 0.5,
"OdometryRotationWeight": 0.5,
"SolverOptions": {
"UseNonmonotonicSteps": false,
"MaxNumIterations": 20,
"NumThreads": 8,
"FunctionTolerance": 0.0001,
"GradientTolerance": 0.000001,
"ParameterTolerance": 0.000001
}
},
"_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": 15.0
},
"SubmapsOptions": {
"NumRangeData": 90,
"GridOptions": {
"GridType": 2,
"Resolution": 0.05
},
"RangeDataInserterOptions": {
"RangeDataInserterType": 2,
"ProbabilityGridRangeDataInserterOptions": {
"HitProbability": 0.55,
"MissProbability": 0.49,
"InsertFreeSpace": true
},
"TsdfRangeDataInserterOptions": {
"TruncationDistance": 0.3,
"MaximumWeight": 5.0,
"UpdateFreeSpace": true,
"NormalEstimationOptions": {
"NumNormalSamples": 4,
"SampleRadius": 0.5
},
"ProjectSdfDistanceToScanNormal": true,
"UpdateWeightRangeExponent": 1,
"UpdateWeightAngleScanNormalToRayKernelBandwidth": 0.5,
"UpdateWeightDistanceCellToHitKernelBandwidth": 0.5
}
}
},
"HighResGridOptions": {
"GridType": 2,
"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,
"_comment_CeresScoreLimits": "Two-tier Ceres cost thresholds calibrated for TSDF (FinalCost range ~0-4.5). TSDF FinalCost scale is much smaller than ProbabilityGrid (~17-50). SoftLimit: cost above this skips submap insertion but trusts pose. HardLimit: cost above this rejects pose entirely (uses odometry). After MaxConsecutiveHighCostBeforeNewSubmap consecutive hard failures, a new submap is forced.",
"CeresScoreSoftLimit": 1.0,
"CeresScoreHardLimit": 1.5,
"MaxConsecutiveHighCostBeforeNewSubmap": 8
},
"MapBuilder": {
"UseTrajectoryBuilder2D": true,
"UseTrajectoryBuilder3D": null,
"NumBackgroundThreads": 16,
"CollateByTrajectory": true,
"OptimizeEveryNNodes": 90,
"MatcherTranslationWeight": 500.0,
"MatcherRotationWeight": 1600.0,
"MaxNumFinalIterations": 200,
"GlobalSamplingRatio": 0.3,
"LogResidualHistograms": false,
"GlobalConstraintSearchAfterNSeconds": 5.0,
"EnableSingleTrajectoryLoopClosure": true,
"SingleTrajectoryLoopClosureDistanceThreshold": 3.0,
"PoseGraphOptimizationProblemOptions": {
"HuberScale": 10.0,
"OdometryHuberScale": 2.0,
"LocalSlamPoseHuberScale": 1.0,
"AccelerationWeight": 110.0,
"RotationWeight": 16000.0,
"LocalSlamPoseTranslationWeight": 10.0,
"LocalSlamPoseRotationWeight": 10.0,
"OdometryTranslationWeight": 5.0,
"OdometryRotationWeight": 5.0,
"FixedFramePoseTranslationWeight": 10.0,
"FixedFramePoseRotationWeight": 100.0,
"FixedFramePoseUseTolerantLoss": false,
"FixedFramePoseTolerantLossParamA": 1.0,
"FixedFramePoseTolerantLossParamB": 1.0,
"LogSolverSummary": false,
"MaxNumIterations": 70,
"CeresSolverOptions": {
"UseNonmonotonicSteps": true,
"MaxNumIterations": 70,
"NumThreads": 8,
"FunctionTolerance": 0.0001,
"GradientTolerance": 0.0000001,
"ParameterTolerance": 0.0000001
}
},
"ConstraintBuilderOptions": {
"SamplingRatio": 0.5,
"MaxConstraintDistance": 15.0,
"MinScore": 0.45,
"GlobalLocalizationMinScore": 0.5,
"LoopClosureTranslationWeight": 11000.0,
"LoopClosureRotationWeight": 100000.0,
"LogMatches": true,
"FastCorrelativeScanMatcherOptions": {
"LinearSearchWindow": 5,
"AngularSearchWindow": 0.34906585,
"BranchAndBoundDepth": 7,
"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": 20,
"NumThreads": 8,
"FunctionTolerance": 0.0001,
"GradientTolerance": 0.0000001,
"ParameterTolerance": 0.0000001
}
}
},
"OverlappingSubmapsTrimmer2D": {
"FreshSubmapsCount": 2,
"MinCoveredArea": 1.0,
"MinAddedSubmapsCount": 5
}
},
"MapStorage": {
"Directory": "./bin/maps",
"OccupancyGridResolution": 0.05,
"MapPadding": 0.5,
"LocalizingStateDirectory": "./bin/localizing_state",
"PoseSyncIntervalSeconds": 5.0,
"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": 30.0,
"ConvergenceMaxIterations": 1500,
"ConvergenceMinIterations": 10,
"ReliabilityMonitoring": {
"EnableReliabilityMonitoring": true,
"MonitoringIntervalSeconds": 2.0,
"MonitoringParticlesNum": 500,
"MonitoringIterationsPerCycle": 5
}
},
"OccupancyGrid": {
"OccupancyGrid": {
"MergeStrategy": 1,
"LogOddsClamp": 6.0,
"UseLogOddsAverage": true,
"FreeSpaceThreshold": 100,
"OccupiedSpaceThreshold": 0,
"UseBinaryOutput": false,
"EnableWallThinning": false,
"WallThinningIterations": 1,
"MinWallThicknessPixels": 1,
"AmbiguousCellValue": -1,
"AmbiguousRangeLower": 0.35,
"AmbiguousRangeUpper": 0.65,
"EnableMedianFilter": true,
"MedianFilterKernelSize": 3,
"TsdfFreeThreshold": 0.03,
"TsdfOccupiedThreshold": -0.01,
"TsdfMinWeight": 0.5,
"TsdfMaxTsd": 0.3
}
}
},
"Detection": {
"MarkerDetector": {
"LidarDevices": [
{
"DeviceId": "olei-front",
"IntensityThreshold": 2500,
"Position": {
"X": 0.527,
"Y": 0.0,
"Z": 0.0
},
"Orientation": {
"X": 0.1,
"Y": 0.0,
"Z": 0.0,
"W": 0.0
}
},
{
"DeviceId": "sick-lidar-001",
"IntensityThreshold": 0.89,
"Position": {
"X": 0.488,
"Y": 0.39,
"Z": 0.0
},
"Orientation": {
"X": 0.0,
"Y": 0.0,
"Z": -0.3826834,
"W": 0.9238795
}
}
],
"QrDevices": [
{
"DeviceId": "hik-qr-001",
"Position": {
"X": 0.0,
"Y": 0.0,
"Z": 0.0
},
"Orientation": {
"X": 0.0,
"Y": 0.0,
"Z": 0.0,
"W": 1.0
}
}
]
}
}
}