#include "mainwindow.h" #include "./ui_mainwindow.h" #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); timerId = startTimer(50); ui->statusbar->addPermanentWidget(ui->label_author); ui->label_author->setText("Juan Jose Quiroz Omana"); ui->statusbar->showMessage("Welcome to JuankaEmika", 5000); ui->lineEdit_robotIp->setText("172.16.0.2"); reference_joint_x_ = {ui->reference_joint_1, ui->reference_joint_2, ui->reference_joint_3, ui->reference_joint_4, ui->reference_joint_5, ui->reference_joint_6, ui->reference_joint_7}; label_ref_joint_x_ ={ui->label_ref_joint_1, ui->label_ref_joint_2, ui->label_ref_joint_3, ui->label_ref_joint_4, ui->label_ref_joint_5, ui->label_ref_joint_6, ui->label_ref_joint_7}; spin_box_read_joint_x_ = {ui->doubleSpinBox_q_1, ui->doubleSpinBox_q_2, ui->doubleSpinBox_q_3, ui->doubleSpinBox_q_4, ui->doubleSpinBox_q_5, ui->doubleSpinBox_q_6, ui->doubleSpinBox_q_7}; spin_box_read_deg_joint_x_ = {ui->doubleSpinBox_deg_q_1, ui->doubleSpinBox_deg_q_2, ui->doubleSpinBox_deg_q_3, ui->doubleSpinBox_deg_q_4, ui->doubleSpinBox_deg_q_5, ui->doubleSpinBox_deg_q_6, ui->doubleSpinBox_deg_q_7}; spin_box_read_deg_joint_vel_x_ ={ui->doubleSpinBox_q_dot_1, ui->doubleSpinBox_q_dot_2, ui->doubleSpinBox_q_dot_3, ui->doubleSpinBox_q_dot_4, ui->doubleSpinBox_q_dot_5, ui->doubleSpinBox_q_dot_6, ui->doubleSpinBox_q_dot_7,}; enable_reference_sliders(false); ui->pushButton_robotHoming->setEnabled(false); ui->pushButton_handHoming->setEnabled(false); ui->pushButton_default_ref->setEnabled(false); ui->pushButton_joint_commands->setEnabled(false); ui->pushButton_move_hand->setEnabled(false); ui->horizontalSlider_gripper->setEnabled(false); ui->horizontalSlider_gripper->setRange(0, 800); ui->horizontalSlider_gripper->setSliderPosition(500); ui->checkBox_handGripper->setCheckState(Qt::Checked); ui->checkBox_handGripper->setEnabled(false); //ui->checkBox_robotHoming->setEnabled(false); //ui->checkBox_homingGripper->setEnabled(false); //ui->checkBox_joint_commands->setEnabled(false); //ui->checkBox_move_hand->setEnabled(false); enable_check_boxes(false); ui->pushButton_led->setEnabled(false); ui->pushButton_initialize->setEnabled(false); ui->pushButton_deinitialize->setEnabled(false); ui->pushButton_disconnect->setEnabled(false); set_push_button_color(ui->pushButton_connect, green_color_); set_push_button_color(ui->pushButton_initialize, gray_color_); set_push_button_color(ui->pushButton_deinitialize, gray_color_); set_push_button_color(ui->pushButton_disconnect, gray_color_); set_reference_sliders(q_rest_configuration_); set_push_button_color(ui->pushButton_joint_commands, gray_color_); set_push_button_color(ui->pushButton_default_ref, gray_color_); set_push_button_color(ui->pushButton_handHoming, gray_color_); set_push_button_color(ui->pushButton_move_hand, gray_color_); set_push_button_color(ui->pushButton_robotHoming, gray_color_); std::cout<<"---------------------------------------------------------------"<checkBox_robotHoming->setEnabled(state); ui->checkBox_homingGripper->setEnabled(state); ui->checkBox_joint_commands->setEnabled(state); ui->checkBox_move_hand->setEnabled(state); } void MainWindow::update_status_bar(const std::string &message) { ui->statusbar->showMessage(QString::fromStdString(message), 5000); } void MainWindow::set_reference_sliders(const VectorXd& q_initial) { /* connect(ui->reference_joint_1, SIGNAL(valueChanged(int)), ui->label_ref_joint_1, SLOT(setValue(int))); */ Eigen::VectorXd q_max_ = (Eigen::VectorXd(7)<< 130, 85, 140, -25, 140, 240, 150).finished(); Eigen::VectorXd q_min_ = (Eigen::VectorXd(7)<<-130,-85, -140, -150, -140, 48, -150).finished(); int i=0; for (auto& elem : reference_joint_x_) { elem->setRange(q_min_[i], q_max_[i]); elem->setSliderPosition((180/M_PI)*q_initial[i]); label_ref_joint_x_[i]->setText(QString::number((180/M_PI)*q_initial[i])); i++; } } void MainWindow::enable_reference_sliders(const bool& status) { ui->pushButton_joint_commands->setDisabled(status); for (auto& elem : reference_joint_x_) { elem->setEnabled(status); } } void MainWindow::set_push_button_color(QPushButton *push_button, const QColor &color) { push_button->setStyleSheet(QString("background-color: %1").arg(color.name())); } void MainWindow::on_pushButton_connect_clicked() { QString robotIp = ui->lineEdit_robotIp->text(); std::string robotIp_std = robotIp.toStdString(); //QMessageBox::about(this,"title", "This will move the robot!"); //QMessageBox::critical(this, "Title", "Hey hey"); auto mode_txt = ui->comboBox->currentText().toStdString(); RobotInterfaceFranka::MODE MODE; if (mode_txt== std::string("None")) { MODE = RobotInterfaceFranka::MODE::None; }else if (mode_txt== std::string("PositionControl")) { MODE = RobotInterfaceFranka::MODE::PositionControl; }else if (mode_txt== std::string("VelocityControl")) { MODE = RobotInterfaceFranka::MODE::VelocityControl; } else { std::runtime_error(std::string("Wrong mode. ")); } //qDebug()<<"Robot pointer: "<< !!robot_driver_franka_sptr_; if (!robot_driver_franka_sptr_) { //qDebug()<<"Create Pointer "; robot_driver_franka_sptr_ = std::make_shared(robotIp_std, MODE, RobotInterfaceFranka::HAND::ON); } robot_driver_franka_sptr_->connect(); q_rest_configuration_ = robot_driver_franka_sptr_->get_home_robot_configuration(); set_reference_sliders(robot_driver_franka_sptr_->get_joint_positions()); connect_flag_ = true; initialize_flag_ = false; deinitialize_flag_ = false; disconnect_flag_ = false; enable_push_button(ui->pushButton_connect, false); enable_push_button(ui->pushButton_initialize, true); enable_push_button(ui->pushButton_disconnect, true); auto max_width = robot_driver_franka_sptr_->read_gripper(RobotInterfaceFranka::MAX_WIDTH); ui->horizontalSlider_gripper->setRange(100, int(max_width*10000)-100); auto width = robot_driver_franka_sptr_->read_gripper(RobotInterfaceFranka::WIDTH); ui->doubleSpinBox_hand->setValue(width); //qDebug()<<"Hola: "<< mode_txt ; } void MainWindow::on_pushButton_initialize_clicked() { QMessageBox::warning(this, "Warning", "Initialize can move the robot. " "Please make sure to have the user stop button at hand! " "Use at your own risk"); enable_push_button(ui->pushButton_initialize, false); enable_push_button(ui->pushButton_deinitialize, true); enable_push_button(ui->pushButton_disconnect, false); initialize_flag_ = true; robot_driver_franka_sptr_->initialize(); enable_check_boxes(true); } void MainWindow::on_pushButton_deinitialize_clicked() { enable_push_button(ui->pushButton_deinitialize, false); enable_push_button(ui->pushButton_disconnect, true); initialize_flag_ = false; deinitialize_flag_ = true; enable_check_boxes(false); robot_driver_franka_sptr_->deinitialize(); ui->checkBox_homingGripper->setCheckState(Qt::Unchecked); ui->checkBox_move_hand->setCheckState(Qt::Unchecked); ui->checkBox_handGripper->setCheckState(Qt::Unchecked); ui->checkBox_joint_commands->setCheckState(Qt::Unchecked); ui->checkBox_robotHoming->setCheckState(Qt::Unchecked); } void MainWindow::on_pushButton_disconnect_clicked() { enable_push_button(ui->pushButton_disconnect, false); enable_push_button(ui->pushButton_initialize, false); enable_push_button(ui->pushButton_deinitialize, false); enable_push_button(ui->pushButton_connect, true); update_status_bar(robot_driver_franka_sptr_->get_status_message()); ui->comboBox->setEnabled(false); connect_flag_ = false; initialize_flag_ = false; deinitialize_flag_ = false; disconnect_flag_ = false; robot_driver_franka_sptr_->disconnect(); ui->checkBox_homingGripper->setCheckState(Qt::Unchecked); ui->checkBox_move_hand->setCheckState(Qt::Unchecked); ui->checkBox_handGripper->setCheckState(Qt::Checked); ui->checkBox_joint_commands->setCheckState(Qt::Unchecked); ui->checkBox_robotHoming->setCheckState(Qt::Unchecked); } void MainWindow::timerEvent(QTimerEvent *event) { //qDebug() << "Update... "<get_joint_positions(); auto q_dot = robot_driver_franka_sptr_->get_joint_velocities(); time_from_robot_ = robot_driver_franka_sptr_->get_time(); //std::cout<<"q: "<doubleSpinBox_time->setValue(time_from_robot_); robot_driver_franka_sptr_->set_target_joint_positions(q_target_); ui->label_robot_mode->setText(QString::fromStdString(robot_driver_franka_sptr_->get_robot_mode())); }else { enable_push_button(ui->pushButton_led, false); } if (robot_driver_franka_sptr_) { update_status_bar(robot_driver_franka_sptr_->get_status_message()); } } void MainWindow::update_led_timer_status() { int number = int(time_from_robot_)%2; blink_button(ui->pushButton_led, number, green_led_color_, gray_color_); } void MainWindow::update_read_joints(const VectorXd& q, const VectorXd& q_dot) { int i=0; for (auto& elem : spin_box_read_joint_x_) { elem->setValue(q[i]); spin_box_read_deg_joint_x_[i]->setValue(q[i]*180/M_PI); spin_box_read_deg_joint_vel_x_[i]->setValue(q_dot[i]); i++; } } void MainWindow::enable_push_button(QPushButton* push_button, const bool& state) { push_button->setEnabled(state); QColor color; if (state == true) { color = green_color_; }else { color = gray_color_; } set_push_button_color(push_button, color); } void MainWindow::blink_button(QPushButton* push_button, const bool& state, const QColor& color_on, const QColor& color_off) { //push_button->setEnabled(false); QColor color; if (state == true) { color = color_on; }else { color = color_off; } set_push_button_color(push_button, color); } void MainWindow::on_reference_joint_1_valueChanged(int value) { ui->label_ref_joint_1->setText(QString::number(value)); q_target_[0] = value*(M_PI/180.0); } void MainWindow::on_reference_joint_2_valueChanged(int value) { ui->label_ref_joint_2->setText(QString::number(value)); q_target_[1] = value*(M_PI/180.0); } void MainWindow::on_reference_joint_3_valueChanged(int value) { ui->label_ref_joint_3->setText(QString::number(value)); q_target_[2] = value*(M_PI/180.0); } void MainWindow::on_reference_joint_4_valueChanged(int value) { ui->label_ref_joint_4->setText(QString::number(value)); q_target_[3] = value*(M_PI/180.0); } void MainWindow::on_reference_joint_5_valueChanged(int value) { ui->label_ref_joint_5->setText(QString::number(value)); q_target_[4] = value*(M_PI/180.0); } void MainWindow::on_reference_joint_6_valueChanged(int value) { ui->label_ref_joint_6->setText(QString::number(value)); q_target_[5] = value*(M_PI/180.0); } void MainWindow::on_reference_joint_7_valueChanged(int value) { ui->label_ref_joint_7->setText(QString::number(value)); q_target_[6] = value*(M_PI/180.0); } void MainWindow::on_pushButton_default_ref_clicked() { set_reference_sliders(q_rest_configuration_); ui->horizontalSlider_gripper->setSliderPosition(7); } void MainWindow::on_horizontalSlider_gripper_valueChanged(int value) { ui->label_ref_joint_hand->setText(QString::number(value)); command_gripper_ = double(value*0.0001); //qDebug()<<"command: "<checkBox_homingGripper->setCheckState(Qt::Unchecked); ui->checkBox_move_hand->setCheckState(Qt::Unchecked); ui->checkBox_handGripper->setCheckState(Qt::Unchecked); ui->checkBox_joint_commands->setCheckState(Qt::Unchecked); ui->checkBox_robotHoming->setCheckState(Qt::Unchecked); } } void MainWindow::on_checkBox_move_hand_clicked(bool checked) { if (checked){ // Uncheck other checkboxeshandHoming ui->checkBox_homingGripper->setCheckState(Qt::Unchecked); //ui->checkBox_move_hand->setCheckState(Qt::Unchecked); ui->checkBox_handGripper->setCheckState(Qt::Unchecked); ui->checkBox_joint_commands->setCheckState(Qt::Unchecked); ui->checkBox_robotHoming->setCheckState(Qt::Unchecked); } } void MainWindow::on_checkBox_robotHoming_clicked(bool checked) { if (checked){ // Uncheck other checkboxes ui->checkBox_homingGripper->setCheckState(Qt::Unchecked); ui->checkBox_move_hand->setCheckState(Qt::Unchecked); ui->checkBox_handGripper->setCheckState(Qt::Unchecked); ui->checkBox_joint_commands->setCheckState(Qt::Unchecked); //ui->checkBox_robotHoming->setCheckState(Qt::Unchecked); } } void MainWindow::on_checkBox_joint_commands_clicked(bool checked) { if (checked){ // Uncheck other checkboxes ui->checkBox_homingGripper->setCheckState(Qt::Unchecked); ui->checkBox_move_hand->setCheckState(Qt::Unchecked); ui->checkBox_handGripper->setCheckState(Qt::Unchecked); //ui->checkBox_joint_commands->setCheckState(Qt::Unchecked); ui->checkBox_robotHoming->setCheckState(Qt::Unchecked); } } void MainWindow::on_checkBox_joint_commands_stateChanged() { Qt::CheckState current_state = ui->checkBox_joint_commands->checkState(); if (current_state == Qt::Checked) { enable_reference_sliders(true); ui->pushButton_joint_commands->setEnabled(true); ui->pushButton_default_ref->setEnabled(true); set_push_button_color(ui->pushButton_joint_commands, green_color_); set_push_button_color(ui->pushButton_default_ref, green_color_); //set_push_button_color(ui->pushButton_handHoming, gray_color_); //set_push_button_color(ui->pushButton_move_hand, gray_color_); //set_push_button_color(ui->pushButton_robotHoming, gray_color_); } else{ enable_reference_sliders(false); ui->pushButton_joint_commands->setEnabled(false); ui->pushButton_default_ref->setEnabled(false); set_push_button_color(ui->pushButton_joint_commands, gray_color_); set_push_button_color(ui->pushButton_default_ref, gray_color_); } } void MainWindow::on_checkBox_robotHoming_stateChanged() { Qt::CheckState current_state = ui->checkBox_robotHoming->checkState(); if (current_state == Qt::Checked) { ui->pushButton_robotHoming->setEnabled(true); set_push_button_color(ui->pushButton_robotHoming, green_color_); } else{ ui->pushButton_robotHoming->setEnabled(false); set_push_button_color(ui->pushButton_robotHoming, gray_color_); } } void MainWindow::on_checkBox_move_hand_stateChanged() { Qt::CheckState current_state = ui->checkBox_move_hand->checkState(); if (current_state == Qt::Checked) { ui->pushButton_move_hand->setEnabled(true); set_push_button_color(ui->pushButton_move_hand, green_color_); ui->horizontalSlider_gripper->setEnabled(true); } else{ ui->pushButton_move_hand->setEnabled(false); set_push_button_color(ui->pushButton_move_hand, gray_color_); ui->horizontalSlider_gripper->setEnabled(false); } } void MainWindow::on_checkBox_homingGripper_stateChanged() { Qt::CheckState current_state = ui->checkBox_homingGripper->checkState(); if (current_state == Qt::Checked) { ui->pushButton_handHoming->setEnabled(true); set_push_button_color(ui->pushButton_handHoming, green_color_); } else{ ui->pushButton_handHoming->setEnabled(false); set_push_button_color(ui->pushButton_handHoming, gray_color_); } } void MainWindow::on_pushButton_robotHoming_clicked() { QMessageBox::warning(this, "Warning", "This will move the robot. " "Please make sure to have the user stop button at hand! " "Use at your own risk"); robot_driver_franka_sptr_->move_robot_to_target_joint_positions( robot_driver_franka_sptr_->get_home_robot_configuration()); } void MainWindow::on_pushButton_joint_commands_clicked() { std::cout<<"q_target_: "<move_robot_to_target_joint_positions(q_target_); robot_driver_franka_sptr_->move_robot_to_target_joint_positions(q_target_); } void MainWindow::on_pushButton_handHoming_clicked() { robot_driver_franka_sptr_->gripper_homing(); auto width = robot_driver_franka_sptr_->read_gripper(RobotInterfaceFranka::WIDTH); ui->doubleSpinBox_hand->setValue(width); } void MainWindow::on_pushButton_move_hand_clicked() { auto max_width = robot_driver_franka_sptr_->read_gripper(RobotInterfaceFranka::MAX_WIDTH); auto width = robot_driver_franka_sptr_->read_gripper(RobotInterfaceFranka::WIDTH); ui->doubleSpinBox_hand->setValue(width); if (command_gripper_ < 0.01 or command_gripper_ > max_width) { qDebug()<<"The desired value is outside the range. "; }else{ robot_driver_franka_sptr_->set_gripper(command_gripper_); } }