Skip to content
This repository was archived by the owner on Feb 25, 2021. It is now read-only.

Commit 603cb2b

Browse files
author
Johannes Formann
committed
Implemented Ackermann
1 parent 1d8eaa6 commit 603cb2b

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

src/sensor.cpp

+29-2
Original file line numberDiff line numberDiff line change
@@ -538,12 +538,39 @@ void sensorWorkerSteeringPoller( void* z ) {
538538
wheelAngleTmp *= ( float ) -1;
539539
}
540540

541-
wheelAngleTmp -= steerConfig.wheelAngleOffset;
541+
// Ackermann (ignore everything below 0,5°)
542+
if ( (steerConfig.wheelAngleSensorType == SteerConfig::WheelAngleSensorType::AckermannLeft
543+
|| steerConfig.wheelAngleSensorType == SteerConfig::WheelAngleSensorType::AckermannRight)
544+
&& (wheelAngleTmp > 0.5 || wheelAngleTmp < 0.5)) {
545+
// just for the human, nicer names
546+
float wheelbase = steerConfig.wheelAngleFirstArmLenght;
547+
float trackWidth = steerConfig.wheelAngleSecondArmLenght;
548+
bool negativeAngel = wheelAngleTmp < 0;
549+
float mathAngle = abs(wheelAngleTmp) * PI / 180;
550+
551+
// calculate the distance of the adjacent side of the triangle (turning point rear axle <-> turn circle center)
552+
float distance = wheelbase / tan( mathAngle );
553+
// add or substract half the trackWidth
554+
if ( ( negativeAngel && steerConfig.wheelAngleSensorType == SteerConfig::WheelAngleSensorType::AckermannLeft )
555+
|| ( ! negativeAngel && steerConfig.wheelAngleSensorType == SteerConfig::WheelAngleSensorType::AckermannRight ) ) {
556+
distance += trackWidth / 2;
557+
} else {
558+
distance -= trackWidth / 2;
559+
}
542560

561+
// now calculate the virtual wheel in the center
562+
mathAngle = atan(wheelbase / distance);
563+
564+
// convert back to degrees and add go back to negative/positive
565+
if (negativeAngel) {
566+
wheelAngleTmp = mathAngle * 180 / PI * -1;
567+
} else {
568+
wheelAngleTmp = mathAngle * 180 / PI;
569+
}
570+
}
543571
wheelAngleTmp = wheelAngleSensorFilter.step( wheelAngleTmp );
544572
steerSetpoints.actualSteerAngle = wheelAngleTmp;
545573
}
546-
547574
}
548575

549576
{

0 commit comments

Comments
 (0)