void DrivingWidget::SLO_ToggleDrivingMode() {
    ui_->label_WaitingForACK->setText(tr("Waiting for ACK..."));

    std_msgs::Bool enable_msg;
    enable_msg.data = !controller_enabled_;
    controller_enable_pub_.publish(enable_msg);

    setGUIEnabled(false);
}
示例#2
0
void ScopeSync::applyConfiguration()
{
	DBG("ScopeSync::applyConfiguration");
#ifdef __DLL_EFFECT__
    scopeSyncAsync.toggleUpdateProcessing(false);
#endif
	parameterController->toggleAsyncUpdates(false);
    
	setGUIEnabled(false);
    parameterController->endAllParameterChangeGestures();

    systemError        = String::empty;
    systemErrorDetails = String::empty;
    
    if (ScopeSyncApplication::inPluginContext())
        parameterController->storeParameterValues();

    parameterController->reset();
    
    // Firstly create the BCMParameter entries for each of the Host Parameters
    ValueTree parameterTree = configuration->getParameters();

    for (int i = 0; i < parameterTree.getNumChildren(); i++)
        parameterController->addParameter(parameterTree.getChild(i));

	parameterController->setupHostParameters();

#ifndef __DLL_EFFECT__
    pluginProcessor->updateHostDisplay();
#endif // __DLL_EFFECT__

#ifndef __DLL_EFFECT__
    parameterController->restoreParameterValues();
#else
	scopeSyncAsync.snapshot();
    scopeSyncAsync.toggleUpdateProcessing(true);
#endif // __DLL_EFFECT__

    UserSettings::getInstance()->updateConfigurationLibraryEntry(getConfigurationFile().getFullPathName(),
                                                                 getConfigurationFile().getFileName(),
                                                                 getConfigurationRoot());
    setGUIReload(true);

    if (configurationManagerWindow != nullptr)
    {
        configurationManagerWindow->refreshContent();
        configurationManagerWindow->restoreWindowPosition();
    }

    parameterController->toggleAsyncUpdates(true);
}
void DrivingWidget::handleControllerEnableACK(std_msgs::BoolConstPtr msg) {
    if ( msg->data ) { // controller enabled
        ui_->pushButton_ToggleDrivingMode->setText(tr("Disable Driving Mode"));
        ui_->label_WaitingForACK->setText(tr("Driving Mode Active!"));
        controller_enabled_ = true;
    }
    else { // controller disabled
        ui_->pushButton_ToggleDrivingMode->setText(tr("Enable Driving Mode"));
        ui_->label_WaitingForACK->setText(tr("Driving Mode Disabled!"));
        ui_->pushButton_ShowCameraImage->setChecked(false);
        controller_enabled_ = false;
    }

    setGUIEnabled(controller_enabled_);
}
DrivingWidget::DrivingWidget(QWidget *parent) :
    QMainWindow(parent),
    ui_(new Ui::DrivingWidget),
    node_handle_private_("~")
{
    ui_->setupUi(this);

    // steering parameters    
    steering_speed_ = 0.0;    
    ignore_steering_limits_ = false;

    // Driving control elements
    current_state_.steering_wheel_angle = 0.0;
    current_state_.head_pan = 0.0;
    current_state_.head_tilt = 0.0;
    current_state_.connection_loss = false;
    current_state_.driving_counter = 0;

    target_command_.all_hold = true;
    target_command_.steering_wheel_angle = 0.0;
    target_command_.drive_forward = false;
    target_command_.head_pan = 0.0;
    target_command_.head_tilt = 0.0;

    controller_enabled_ = false;

    head_tilt_speed_ = 0.0;
    head_pan_speed_ = 0.0;

    setGUIEnabled(false);

    // Get camera image topic
    node_handle_private_.param("camera_topic", camera_topic_, std::string("/head_cam/image_raw"));

    // Get joypad values
    joypad_command_sub_ = node_handle_.subscribe("/joy", 1, &DrivingWidget::handleJoyPadEvent, this);

    // Get joypad ids
    node_handle_private_.param("joypad_axis_steering", joypad_ids_[AXIS_STEERING], 0);
    node_handle_private_.param("joypad_axis_head_pan", joypad_ids_[AXIS_HEAD_PAN], 2);
    node_handle_private_.param("joypad_axis_head_tilt", joypad_ids_[AXIS_HEAD_TILT], 3);
    node_handle_private_.param("joypad_axis_head_tilt_2", joypad_ids_[AXIS_HEAD_TILT_2], 4);
    node_handle_private_.param("joypad_axis_head_pan_2", joypad_ids_[AXIS_HEAD_PAN_2], 5);

    node_handle_private_.param("joypad_button_forward", joypad_ids_[BUTTON_FORWARD], 1);
    node_handle_private_.param("joypad_button_all_hold", joypad_ids_[BUTTON_ALL_HOLD], 2);
    node_handle_private_.param("joypad_button_steering_sensitivity_plus", joypad_ids_[BUTTON_STEERING_SENSITIVITY_PLUS], 7);
    node_handle_private_.param("joypad_button_steering_sensitivity_minus", joypad_ids_[BUTTON_STEERING_SENSITIVITY_MINUS], 6);
    node_handle_private_.param("joypad_button_head_sensitivity_plus", joypad_ids_[BUTTON_HEAD_SENSITIVITY_PLUS], 5);
    node_handle_private_.param("joypad_button_head_sensitivity_minus", joypad_ids_[BUTTON_HEAD_SENSITIVITY_MINUS], 4);
    node_handle_private_.param("joypad_button_head_to_default", joypad_ids_[BUTTON_HEAD_TO_DEFAULT], 11);
    node_handle_private_.param("joypad_button_steering_to_default", joypad_ids_[BUTTON_STEERING_TO_DEFAULT], 10);

    node_handle_private_.param("steering_sensitivity", steering_sensitivity_, -0.08);
    node_handle_private_.param("head_tilt_sensitivity", head_tilt_sensitivity_, -0.05);
    node_handle_private_.param("head_pan_sensitivity", head_pan_sensitivity_, 0.05);

    // Setup driving commands
    all_hold_enabled_sub_ = node_handle_.subscribe("driving_controller/all_hold", 1, &DrivingWidget::handleAllHoldEnabled, this);
    driving_command_pub_ = node_handle_.advertise<humanoid_driving_controller::DrivingCommand>("driving_controller/driving_command", 1, false);

    // Enable / Disable controller, Reset
    controller_enable_pub_ = node_handle_.advertise<std_msgs::Bool>("driving_controller/controller_enable", 1, true);
    controller_enable_ack_sub_ = node_handle_.subscribe("driving_controller/controller_enable_ack", 1, &DrivingWidget::handleControllerEnableACK, this);

    // Get absolute steering angle from controller
    driving_state_sub_ = node_handle_.subscribe("driving_controller/driving_state", 1, &DrivingWidget::handleNewDrivingState, this);

    // Publish wheel angle
    wheel_angle_pub_ = node_handle_.advertise<std_msgs::Float64>("driving_widget/wheel_angle_rad", 1, true);

    // setup user interface
    connect(ui_->pushButton_ConfirmSteeringSensitivity, SIGNAL(clicked()), this, SLOT(SLO_SteeringSensitivityConfirmed()));
    connect(ui_->spinBox_SteeringSensitivity, SIGNAL(valueChanged(double)), this, SLOT(SLO_SteeringSensitivityChanged()));
    connect(ui_->pushButton_ConfirmHeadTiltSensitivity, SIGNAL(clicked()), this, SLOT(SLO_HeadTiltSensitivityConfirmed()));
    connect(ui_->spinBox_HeadTiltSensitivity, SIGNAL(valueChanged(double)), this, SLOT(SLO_HeadTiltSensitivityChanged()));
    connect(ui_->pushButton_ConfirmHeadPanSensitivity, SIGNAL(clicked()), this, SLOT(SLO_HeadPanSensitivityConfirmed()));
    connect(ui_->spinBox_HeadPanSensitivity, SIGNAL(valueChanged(double)), this, SLOT(SLO_HeadPanSensitivityChanged()));
    connect(ui_->pushButton_ShowCameraImage, SIGNAL(toggled(bool)), this, SLOT(SLO_ShowCameraImage(bool)));
    connect(ui_->pushButton_AllHold, SIGNAL(clicked(bool)), this, SLOT(SLO_AllHoldButtonChecked(bool)));
    connect(ui_->pushButton_ToggleDrivingMode, SIGNAL(clicked()), this, SLOT(SLO_ToggleDrivingMode()));
    connect(ui_->pushButton_OverrideLimits, SIGNAL(toggled(bool)), this, SLOT(SLO_OverrideLimits(bool)));

    timer_.start(66, this);

    // UI init
    updateUI(true, true);
    ui_->graphicsView_Wheels->setScene(&wheel_scene_);
}