Add Defines and steering trim
This commit is contained in:
parent
ec3f95cf2b
commit
62b9d1ace9
@ -22,6 +22,7 @@ public:
|
|||||||
void setInputScale(Scaling scale);
|
void setInputScale(Scaling scale);
|
||||||
void setOutputScale(float scale);
|
void setOutputScale(float scale);
|
||||||
void setDeadzone(float deadzone);
|
void setDeadzone(float deadzone);
|
||||||
|
void setTrimSteering(float trimSteering);
|
||||||
|
|
||||||
Motormixer() = default;
|
Motormixer() = default;
|
||||||
|
|
||||||
@ -29,4 +30,5 @@ private:
|
|||||||
Scaling m_inputScale = {0.3f, 1.0f};
|
Scaling m_inputScale = {0.3f, 1.0f};
|
||||||
float m_outputScale = 100.0f;
|
float m_outputScale = 100.0f;
|
||||||
float m_deadzone = 0.1;
|
float m_deadzone = 0.1;
|
||||||
|
float m_trimSteering = 0.0f;
|
||||||
};
|
};
|
@ -27,7 +27,7 @@ board_build.partitions = min_spiffs.csv
|
|||||||
; upload_port = esp32-3DD870.lan
|
; upload_port = esp32-3DD870.lan
|
||||||
|
|
||||||
|
|
||||||
[env:espressif32-OTA]
|
[env:espressif32-OTA-Orange]
|
||||||
platform = espressif32
|
platform = espressif32
|
||||||
; board = esp32-c3-devkitm-1
|
; board = esp32-c3-devkitm-1
|
||||||
; board = wemos_d1_mini32
|
; board = wemos_d1_mini32
|
||||||
@ -47,6 +47,10 @@ lib_deps =
|
|||||||
; To avoid "undefined reference to `esp_spp_init'" error"
|
; To avoid "undefined reference to `esp_spp_init'" error"
|
||||||
build_flags =
|
build_flags =
|
||||||
-Os ; Optimize for size
|
-Os ; Optimize for size
|
||||||
|
-D JOY_ADDRESS=\"dc:a2:66:dd:72:c0\"
|
||||||
|
-D LEFT_MOTOR_PIN=15
|
||||||
|
-D RIGHT_MOTOR_PIN=16
|
||||||
|
-D TRIM_STEERING=0.025
|
||||||
; -D CONFIG_BT_ENABLED=1
|
; -D CONFIG_BT_ENABLED=1
|
||||||
; -D CONFIG_BT_CLASSIC_ENABLED=1
|
; -D CONFIG_BT_CLASSIC_ENABLED=1
|
||||||
|
|
||||||
@ -62,6 +66,36 @@ upload_protocol = espota
|
|||||||
; upload_port = esp32c3-8783B4.lan
|
; upload_port = esp32c3-8783B4.lan
|
||||||
upload_port = esp32-3DD870.lan
|
upload_port = esp32-3DD870.lan
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[env:espressif32-OTA-BIG]
|
||||||
|
platform = espressif32
|
||||||
|
; board = wemos_d1_mini32
|
||||||
|
board = esp32dev
|
||||||
|
framework = arduino
|
||||||
|
lib_deps =
|
||||||
|
madhephaestus/ESP32Servo
|
||||||
|
|
||||||
|
; espidf implementation
|
||||||
|
https://github.com/saippua/PS4-esp-idf
|
||||||
|
|
||||||
|
; build_flags = @${PROJECT_DIR}/big-robot-defines.txt
|
||||||
|
build_flags =
|
||||||
|
-Os ; Optimize for size
|
||||||
|
-D JOY_ADDRESS=\"dc:a2:66:dd:72:c0\"
|
||||||
|
-D LEFT_MOTOR_PIN=25
|
||||||
|
-D RIGHT_MOTOR_PIN=32
|
||||||
|
|
||||||
|
monitor_speed = 115200
|
||||||
|
|
||||||
|
|
||||||
|
board_build.partitions = min_spiffs.csv
|
||||||
|
; to save size
|
||||||
|
build_type = release
|
||||||
|
|
||||||
|
upload_protocol = espota
|
||||||
|
upload_port = esp32-3A6900.lan
|
||||||
|
|
||||||
[env:espressif32-USB]
|
[env:espressif32-USB]
|
||||||
platform = espressif32
|
platform = espressif32
|
||||||
; board = esp32-c3-devkitm-1
|
; board = esp32-c3-devkitm-1
|
||||||
@ -82,6 +116,9 @@ lib_deps =
|
|||||||
; To avoid "undefined reference to `esp_spp_init'" error"
|
; To avoid "undefined reference to `esp_spp_init'" error"
|
||||||
build_flags =
|
build_flags =
|
||||||
-Os ; Optimize for size
|
-Os ; Optimize for size
|
||||||
|
-D JOY_ADDRESS=\"dc:a2:66:dd:72:c0\"
|
||||||
|
-D LEFT_MOTOR_PIN=15
|
||||||
|
-D RIGHT_MOTOR_PIN=16
|
||||||
; -D CONFIG_BT_ENABLED=1
|
; -D CONFIG_BT_ENABLED=1
|
||||||
; -D CONFIG_BT_CLASSIC_ENABLED=1
|
; -D CONFIG_BT_CLASSIC_ENABLED=1
|
||||||
|
|
||||||
|
@ -2,10 +2,9 @@
|
|||||||
|
|
||||||
#include <ArduinoOTA.h>
|
#include <ArduinoOTA.h>
|
||||||
|
|
||||||
void OTA::setup()
|
|
||||||
// Initialize OTA
|
// Initialize OTA
|
||||||
|
void OTA::setup()
|
||||||
{
|
{
|
||||||
// Initialize OTA
|
|
||||||
ArduinoOTA.onStart([]()
|
ArduinoOTA.onStart([]()
|
||||||
{
|
{
|
||||||
String type = (ArduinoOTA.getCommand() == U_FLASH) ? "sketch" : "filesystem";
|
String type = (ArduinoOTA.getCommand() == U_FLASH) ? "sketch" : "filesystem";
|
||||||
@ -26,8 +25,8 @@ void OTA::setup()
|
|||||||
ArduinoOTA.begin();
|
ArduinoOTA.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OTA::loop()
|
|
||||||
// Handle OTA updates
|
// Handle OTA updates
|
||||||
|
void OTA::loop()
|
||||||
{
|
{
|
||||||
ArduinoOTA.handle();
|
ArduinoOTA.handle();
|
||||||
}
|
}
|
@ -2,7 +2,7 @@
|
|||||||
#include <PS4Controller.h> // Include the PS4-esp32 library
|
#include <PS4Controller.h> // Include the PS4-esp32 library
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
#define EXPO 0.7
|
#define EXPO 0.3
|
||||||
// z = x*(1.0-y)+x^3*y
|
// z = x*(1.0-y)+x^3*y
|
||||||
float ExpoCurve(float x)
|
float ExpoCurve(float x)
|
||||||
{
|
{
|
||||||
|
@ -19,7 +19,9 @@ const char* password = "Johansson85";
|
|||||||
|
|
||||||
OTA ota;
|
OTA ota;
|
||||||
|
|
||||||
Controller controller{"dc:a2:66:dd:72:c0"};
|
// Controller controller{"dc:a2:66:dd:72:c0"};
|
||||||
|
Controller controller(JOY_ADDRESS);
|
||||||
|
|
||||||
// Controller controller;
|
// Controller controller;
|
||||||
Motormixer motormixer;
|
Motormixer motormixer;
|
||||||
|
|
||||||
@ -46,13 +48,18 @@ void setup() {
|
|||||||
ota.setup();
|
ota.setup();
|
||||||
|
|
||||||
// Attach servos
|
// Attach servos
|
||||||
leftMotor.attach(15);
|
// leftMotor.attach(15);
|
||||||
rightMotor.attach(16);
|
// rightMotor.attach(16);
|
||||||
|
leftMotor.attach(LEFT_MOTOR_PIN);
|
||||||
|
rightMotor.attach(RIGHT_MOTOR_PIN);
|
||||||
|
|
||||||
|
|
||||||
// Initialize PS4 controller
|
// Initialize PS4 controller
|
||||||
controller.setup();
|
controller.setup();
|
||||||
motormixer.setOutputScale(100.0);
|
motormixer.setOutputScale(100.0);
|
||||||
|
#ifdef TRIM_STEERING
|
||||||
|
motormixer.setTrimSteering(TRIM_STEERING);
|
||||||
|
#endif
|
||||||
// PS4.begin("7C:9E:BD:3D:D8:72"); // Replace with your ESP32's Bluetooth MAC address
|
// PS4.begin("7C:9E:BD:3D:D8:72"); // Replace with your ESP32's Bluetooth MAC address
|
||||||
// PS4.begin("DC:A2:66:DD:72:C0");
|
// PS4.begin("DC:A2:66:DD:72:C0");
|
||||||
// PS4.begin("dc:a2:66:dd:72:c0");
|
// PS4.begin("dc:a2:66:dd:72:c0");
|
||||||
|
@ -17,21 +17,42 @@ void Motormixer::setDeadzone(float deadzone)
|
|||||||
m_deadzone = deadzone;
|
m_deadzone = deadzone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Motormixer::setTrimSteering(float trimSteering)
|
||||||
|
{
|
||||||
|
m_trimSteering = trimSteering;
|
||||||
|
}
|
||||||
|
|
||||||
Motormixer::Output Motormixer::calculate(float throttle, float steering)
|
Motormixer::Output Motormixer::calculate(float throttle, float steering)
|
||||||
{
|
{
|
||||||
|
|
||||||
float steeringMagnitude = fabs(steering);
|
auto compensateDeadzone = [&](float x) -> float
|
||||||
float throttleMagnitude = fabs(throttle);
|
|
||||||
|
|
||||||
// Apply deadzone
|
|
||||||
if (throttleMagnitude < m_deadzone)
|
|
||||||
{
|
{
|
||||||
throttle = 0.0;
|
const float deadzoneComp = 1.0f - m_deadzone;
|
||||||
}
|
|
||||||
if (steeringMagnitude < m_deadzone)
|
if (fabs(x) < m_deadzone)
|
||||||
{
|
{
|
||||||
steering = 0.0;
|
return 0.0f;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x *= deadzoneComp;
|
||||||
|
if (x > 0.0f)
|
||||||
|
x -= m_deadzone;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x += m_deadzone;
|
||||||
|
}
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
auto steeringMagnitude = fabs(steering);
|
||||||
|
auto throttleMagnitude = fabs(throttle);
|
||||||
|
|
||||||
|
throttle = compensateDeadzone(throttle);
|
||||||
|
steering = compensateDeadzone(steering);
|
||||||
|
|
||||||
|
steering += m_trimSteering;
|
||||||
|
|
||||||
// Apply scaling
|
// Apply scaling
|
||||||
throttle *= m_inputScale.throttle;
|
throttle *= m_inputScale.throttle;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user