{ "_Comment": "Config test cho ZLAC8015D: MỘT node CAN (can0, node 1, 500kbps) điều khiển CẢ HAI bánh. Hai device dưới đây là 2 facade trái/phải của cùng một drive - phải trỏ cùng CanInterface + NodeId, khác nhau ở Axis. WheelDiameter/CountsPerRevolution/PulsesPerRevolution cần đo lại theo bánh thực tế (mặc định: encoder ZLAC 4096 counts/vòng, bánh 8.5 inch ~0.17m).", "Devices": { "ZLAC_LeftWheel": { "DeviceId": "left-wheel", "Enabled": true, "DeviceType": "CiA402Servo", "DeviceName": "Left Wheel (ZLAC8015D)", "DriverName": "ZLAC8015D", "DriverVersion": "1.0.0", "Description": "ZLAC8015D dual hub servo - truc trai", "Connection": { "CanInterface": "can0", "NodeId": "1", "Axis": "Left", "CountsPerRevolution": 4096, "SpeedResolution": 1, "AccelTimeMs": 200, "DecelTimeMs": 200, "AutoReconnectEnabled": true, "ReconnectDelayMs": 3000, "MaxReconnectAttempts": 0, "PdoConfigRetryCount": 3, "PdoConfigRetryTimeoutMs": 1000, "UseHeartbeatCheck": true } }, "ZLAC_RightWheel": { "DeviceId": "right-wheel", "Enabled": true, "DeviceType": "CiA402Servo", "DeviceName": "Right Wheel (ZLAC8015D)", "DriverName": "ZLAC8015D", "DriverVersion": "1.0.0", "Description": "ZLAC8015D dual hub servo - truc phai", "Connection": { "CanInterface": "can0", "NodeId": "1", "Axis": "Right", "CountsPerRevolution": 4096, "SpeedResolution": 1, "AccelTimeMs": 200, "DecelTimeMs": 200, "AutoReconnectEnabled": true, "ReconnectDelayMs": 3000, "MaxReconnectAttempts": 0, "PdoConfigRetryCount": 3, "PdoConfigRetryTimeoutMs": 1000, "UseHeartbeatCheck": true } } }, "Motion": { "DifferentialDrive": { "Enable": true, "LeftWheel": { "DeviceId": "left-wheel", "Position": { "Position": { "X": 0.0, "Y": 0.2, "Z": 0.0 }, "Orientation": { "X": 0.0, "Y": 0.0, "Z": 0.7071067, "W": 0.7071067 } }, "WheelDiameter": 0.17, "PulsesPerRevolution": 4096, "IsReversed": false }, "RightWheel": { "DeviceId": "right-wheel", "Position": { "Position": { "X": 0.0, "Y": -0.2, "Z": 0.0 }, "Orientation": { "X": 0.0, "Y": 0.0, "Z": -0.7071067, "W": 0.7071067 } }, "WheelDiameter": 0.17, "PulsesPerRevolution": 4096, "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 } }, "Cartographer": { "Enable": false } }