mirror of
https://github.com/MoreTore/openpilot.git
synced 2026-08-03 08:41:47 +08:00
update behavior
This commit is contained in:
+1
-1
@@ -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},
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user