update behavior

This commit is contained in:
jakethesake420
2023-11-10 04:19:30 -06:00
parent 34bda21ec1
commit 88e828bc76
5 changed files with 56 additions and 31 deletions
+1 -1
View File
@@ -86,7 +86,7 @@ private:
};
std::unordered_map<std::string, uint32_t> keys = {
{"BehaviordInitialiazed", PERSISTENT},
{"BehaviordInitialized", PERSISTENT},
{"MaxDeacceleration", PERSISTENT},
{"AccelCruiseMaxFactor", PERSISTENT},
{"AccessToken", CLEAR_ON_MANAGER_START | DONT_LOG},
+2 -2
View File
@@ -7,7 +7,7 @@ import time
# Update this dict and run slider_gen.py to generate the code for the sliders, params, and log.capnp
PARAMS = {
"MaxDeacceleration": {"default": -1.2, "range": (-3.0, 0.0), "label": "Minimum Cruise Accel:", "units": "m/s<sup>2</sup>"},
"MaxDeacceleration": {"default": -1.2, "range": (-3.0, 0.0), "label": "Max Cruise De-accel:", "units": "m/s<sup>2</sup>"},
"AccelCruiseMaxFactor": {"default": 1.0, "range": (0.0, 3.0), "label": "Cruise Accel Factor:", "units": "Coef."},
}
@@ -68,7 +68,7 @@ class Behaviord:
for param in PARAMS.keys():
self.p.put(param, str(self.get_param(param)))
if not self.initialized:
self.p.put_bool("BehaviordInitialiazed", True)
self.p.put_bool("BehaviordInitialized", True)
self.initialized = True
def behaviord_thread(self):
+2 -7
View File
@@ -342,7 +342,7 @@ BehaviorPanel::BehaviorPanel(SettingsWindow *parent) : ListWidget(parent){
// Add sliders here
// name, label, units, min, max, default, setter function
std::vector<SliderDefinition> slider_defs{
{"MaxDeacceleration", tr("Minimum Cruise Accel:"), "m/s<sup>2</sup>", -3.0, 0.0, -1.2,
{"MaxDeacceleration", tr("Max Cruise De-accel:"), "m/s<sup>2</sup>", -3.0, 0.0, -1.2,
[](cereal::Behavior::Builder &behavior, double value) {
behavior.setMaxDeacceleration(static_cast<float>(value));
}
@@ -371,18 +371,13 @@ BehaviorPanel::BehaviorPanel(SettingsWindow *parent) : ListWidget(parent){
sliders[slider_def.paramName] = slider; // Store the slider pointer in the map
sliderItems[slider_def.paramName] = slider->getSliderItem(); // Store the slider item pointer in the map
addItem(slider->getSliderItem()); // Add the slider item to the list widget
}
// create a pubmaster for all the sliders
pm = std::make_unique<PubMaster, const std::initializer_list<const char *>>(
{"behavior"});
timer = new QTimer(this);
timer->setInterval(1000); // Send all slider values every interval
timer->start();
connect(timer, &QTimer::timeout, this, &BehaviorPanel::sendAllSliderValues);
sendAllSliderValues();
}
void BehaviorPanel::sendAllSliderValues()
+45 -18
View File
@@ -43,7 +43,20 @@ void CustomSlider::initialize()
connect(resetButton, &ButtonControl::clicked, [&]() {
if (ConfirmationDialog::confirm(tr("Are you sure you want to reset ") + QString::fromStdString(param) + "?", tr("Reset"), this)) {
this->setValue(sliderMin + (defaultVal - paramMin) / (paramMax - paramMin) * (sliderRange));
}
QWidget* widget = this->parentWidget();
BehaviorPanel* parentBehaviorPanel = nullptr;
while (widget) {
parentBehaviorPanel = qobject_cast<BehaviorPanel *>(widget);
if (parentBehaviorPanel) {
break;
}
widget = widget->parentWidget();
}
if (parentBehaviorPanel) {
parentBehaviorPanel->sendAllSliderValues();
}
}
});
// slider settings
@@ -52,14 +65,13 @@ void CustomSlider::initialize()
setMaximum(sliderMax);
// Set the default value of the slider to begin with
setValue(sliderMin + (defaultVal - paramMin) / (paramMax - paramMin) * (sliderRange));
label->setText(title + " " + QString::number(defaultVal, 'f', 2) + " " + unit);
setSliderValue(defaultVal);
try // Try to get the value of the param from params. If it doesn't exist, catch the error
{
QString valueStr;
double value;
if (Params().getBool("BehaviordInitialiazed")){
if (Params().getBool("BehaviordInitialized")){
valueStr = QString::fromStdString(Params().get(param));
value = QString(valueStr).toDouble();
} else{
@@ -71,8 +83,7 @@ void CustomSlider::initialize()
auto behavior = msg.initEvent().initBehavior();
cerealSetFunc(behavior, value);
setValue(sliderMin + (value - paramMin) / (paramMax - paramMin) * (sliderRange)); // Set the value of the slider. The value is scaled to the slider range
label->setText(title + " " + QString::number(value, 'f', 2) + " " + unit);
setSliderValue(value);
// Set the slider to be enabled or disabled depending on the lock status
bool locked = Params().getBool((param + "Lock"));
@@ -92,22 +103,38 @@ void CustomSlider::initialize()
mainLayout->addWidget(this);
connect(this, &CustomSlider::valueChanged, [=](int value)
{
// Update the label as the slider is moved. Don't save the value to params here
double dValue = paramMin + (paramMax - paramMin) * (value - sliderMin) / (sliderRange);
label->setText(title + " " + QString::number(dValue, 'f', 2) + " " + unit);
});
connectSliderValueChanged();
connect(this, &CustomSlider::sliderReleasedWithValue, [this]() {
// Call the sendAllSliderValues method from the BehaviorPanel
auto parentBehaviorPanel = qobject_cast<BehaviorPanel *>(this->parentWidget());
if (parentBehaviorPanel)
{
connect(this, &CustomSlider::sliderReleased, [this]() {
QWidget* widget = this->parentWidget();
BehaviorPanel* parentBehaviorPanel = nullptr;
while (widget) {
parentBehaviorPanel = qobject_cast<BehaviorPanel *>(widget);
if (parentBehaviorPanel) {
break;
}
widget = widget->parentWidget();
}
if (parentBehaviorPanel) {
parentBehaviorPanel->sendAllSliderValues();
}
});
}
void CustomSlider::setSliderValue(double value) {
setValue(sliderMin + (value - paramMin) / (paramMax - paramMin) * (sliderRange));
updateLabel(value);
}
void CustomSlider::connectSliderValueChanged() {
connect(this, &CustomSlider::valueChanged, [=](int value) {
double dValue = paramMin + (paramMax - paramMin) * (value - sliderMin) / (sliderRange);
updateLabel(dValue);
});
}
void CustomSlider::updateLabel(double value) {
label->setText(title + " " + QString::number(value, 'f', 2) + " " + unit);
}
+6 -3
View File
@@ -34,17 +34,20 @@ public:
int sliderMax = 10000;
signals:
void sliderReleasedWithValue(int value);
void sliderValueChanged();
protected:
void mouseReleaseEvent(QMouseEvent *event) override {
QSlider::mouseReleaseEvent(event);
emit sliderReleasedWithValue(value());
emit sliderValueChanged();
}
private:
void initialize();
void setSliderValue(double value);
void updateLabel(double value);
void connectSliderValueChanged();
double defaultVal;
double scaleFactor;
std::string param;