main_window.cpp
Go to the documentation of this file.
1 /*******************************************************************************
2 * Copyright 2020 ROBOTIS CO., LTD.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *******************************************************************************/
16 
17 /* Authors: Ryan Shim */
18 
19 /*****************************************************************************
20 ** Includes
21 *****************************************************************************/
22 
23 #include <QtGui>
24 #include <QMessageBox>
25 #include <iostream>
26 #include "../include/turtlebot3_manipulation_gui/main_window.hpp"
27 
28 /*****************************************************************************
29 ** Namespaces
30 *****************************************************************************/
31 
33 
34 using namespace Qt;
35 
36 /*****************************************************************************
37 ** Implementation [MainWindow]
38 *****************************************************************************/
39 
40 MainWindow::MainWindow(int argc, char** argv, QWidget *parent)
41  : QMainWindow(parent),
42  qnode(argc,argv)
43 {
44  ui.setupUi(this); // Calling this incidentally connects all ui's triggers to on_...() callbacks in this class.
45  QObject::connect(ui.actionAbout_Qt, SIGNAL(triggered(bool)), qApp, SLOT(aboutQt())); // qApp is a global variable for the application
46  connect(ui.tabWidget, SIGNAL(currentChanged(int)), this, SLOT(tabSelected()));
47  QObject::connect(&qnode, SIGNAL(rosShutdown()), this, SLOT(close()));
48 
49  qnode.init();
50 }
51 
53 
55 {
56  std::vector<double> joint_angle = qnode.getPresentJointAngle();
57  ui.txt_j1->setText(QString::number(joint_angle.at(0),'f', 3));
58  ui.txt_j2->setText(QString::number(joint_angle.at(1),'f', 3));
59  ui.txt_j3->setText(QString::number(joint_angle.at(2),'f', 3));
60  ui.txt_j4->setText(QString::number(joint_angle.at(3),'f', 3));
61  ui.txt_grip->setText(QString::number(joint_angle.at(4),'f', 3));
62 
63  std::vector<double> position = qnode.getPresentKinematicsPosition();
64 
65  if(position.size() != 3)
66  return;
67 
68  ui.txt_x->setText(QString::number(position.at(0),'f', 3));
69  ui.txt_y->setText(QString::number(position.at(1),'f', 3));
70  ui.txt_z->setText(QString::number(position.at(2),'f', 3));
71 }
73 {
74  if(ui.tabWidget->currentIndex()==0)
76  if(ui.tabWidget->currentIndex()==1)
78 }
79 
80 void MainWindow::writeLog(QString str)
81 {
82  ui.plainTextEdit_log->moveCursor (QTextCursor::End);
83  ui.plainTextEdit_log->appendPlainText(str);
84 }
85 
87 {
88  timer = new QTimer(this);
89  connect(timer, SIGNAL(timeout()), this, SLOT(timerCallback()));
90  timer->start(100);
91 
92  writeLog("QTimer start : 100ms");
93  ui.btn_timer_start->setEnabled(false);
94  ui.btn_home_pose->setEnabled(true);
95  ui.btn_init_pose->setEnabled(true);
96  ui.btn_read_joint_angle->setEnabled(true);
97  ui.btn_read_kinematic_pose->setEnabled(true);
98  ui.btn_send_joint_angle->setEnabled(true);
99  ui.btn_send_kinematic_pose->setEnabled(true);
100  ui.btn_gripper_close->setEnabled(true);
101  ui.btn_gripper_open->setEnabled(true);
102  ui.btn_set_gripper->setEnabled(true);
103 }
104 
106 {
107  std::vector<double> joint_angle;
108  double path_time = 2.0;
109  joint_angle.push_back(0.0);
110  joint_angle.push_back(0.0);
111  joint_angle.push_back(0.0);
112  joint_angle.push_back(0.0);
113 
114  if(!qnode.setJointSpacePath(joint_angle, path_time))
115  {
116  writeLog("[ERR!!] Failed to send service");
117  return;
118  }
119 
120  writeLog("Send joint angle to initial pose");
121 }
122 
124 {
125  std::vector<double> joint_angle;
126  double path_time = 2.0;
127 
128  joint_angle.push_back(0.0);
129  joint_angle.push_back(-1.0);
130  joint_angle.push_back(0.3);
131  joint_angle.push_back(0.7);
132 
133  if(!qnode.setJointSpacePath(joint_angle, path_time))
134  {
135  writeLog("[ERR!!] Failed to send service");
136  return;
137  }
138  writeLog("Send joint angle to home pose");
139 }
140 
142 {
143  std::vector<double> joint_angle;
144  joint_angle.push_back(0.010);
145 
146  if(!qnode.setToolControl(joint_angle))
147  {
148  writeLog("[ERR!!] Failed to send service");
149  return;
150  }
151  writeLog("Send gripper open");
152 }
153 
155 {
156  std::vector<double> joint_angle;
157  joint_angle.push_back(-0.010);
158  if(!qnode.setToolControl(joint_angle))
159  {
160  writeLog("[ERR!!] Failed to send service");
161  return;
162  }
163  writeLog("Send gripper close");
164 }
165 
167 {
168  std::vector<double> joint_angle = qnode.getPresentJointAngle();
169  ui.doubleSpinBox_j1->setValue(joint_angle.at(0));
170  ui.doubleSpinBox_j2->setValue(joint_angle.at(1));
171  ui.doubleSpinBox_j3->setValue(joint_angle.at(2));
172  ui.doubleSpinBox_j4->setValue(joint_angle.at(3));
173  ui.doubleSpinBox_gripper->setValue(joint_angle.at(4));
174 
175  writeLog("Read joint angle");
176 }
177 
179 {
180  std::vector<double> joint_angle;
181  double path_time = ui.doubleSpinBox_time_js->value();
182 
183  joint_angle.push_back(ui.doubleSpinBox_j1->value());
184  joint_angle.push_back(ui.doubleSpinBox_j2->value());
185  joint_angle.push_back(ui.doubleSpinBox_j3->value());
186  joint_angle.push_back(ui.doubleSpinBox_j4->value());
187 
188  if (!qnode.setJointSpacePath(joint_angle, path_time))
189  {
190  writeLog("[ERR!!] Failed to send service");
191  return;
192  }
193 
194  writeLog("Send joint angle");
195 }
196 
198 {
199  std::vector<double> position = qnode.getPresentKinematicsPosition();
200  ui.doubleSpinBox_x->setValue(position.at(0));
201  ui.doubleSpinBox_y->setValue(position.at(1));
202  ui.doubleSpinBox_z->setValue(position.at(2));
203 
204  writeLog("Read task pose");
205 }
206 
208 {
209  std::vector<double> kinematics_pose;
210  Eigen::Quaterniond temp_orientation;
211 
212  double path_time = ui.doubleSpinBox_time_cs->value();
213  kinematics_pose.push_back(ui.doubleSpinBox_x->value());
214  kinematics_pose.push_back(ui.doubleSpinBox_y->value());
215  kinematics_pose.push_back(ui.doubleSpinBox_z->value());
216 
217  if(!qnode.setTaskSpacePath(kinematics_pose, path_time))
218  {
219  writeLog("[ERR!!] Failed to send service");
220  return;
221  }
222 
223  writeLog("Send task pose");
224 }
225 
227 {
228  std::vector<double> joint_angle;
229  joint_angle.push_back(ui.doubleSpinBox_gripper->value());
230  if(!qnode.setToolControl(joint_angle))
231  {
232  writeLog("[ERR!!] Failed to send service");
233  return;
234  }
235  writeLog("Send gripper value");
236 }
237 } // namespace turtlebot3_manipulation_gui
bool setToolControl(std::vector< double > joint_angle)
Definition: qnode.cpp:200
std::vector< double > getPresentKinematicsPosition()
Definition: qnode.cpp:122
MainWindow(int argc, char **argv, QWidget *parent=0)
Definition: main_window.cpp:40
std::vector< double > getPresentJointAngle()
Definition: qnode.cpp:117
bool setTaskSpacePath(std::vector< double > kinematics_pose, double path_time)
Definition: qnode.cpp:159
bool setJointSpacePath(std::vector< double > joint_angle, double path_time)
Definition: qnode.cpp:127


turtlebot3_manipulation_gui
Author(s): Darby Lim , Ryan Shim
autogenerated on Sun May 10 2020 03:49:19