added robot interfacw

This commit is contained in:
Steffen Vogel 2015-01-15 11:51:58 +01:00
parent e627a02a3d
commit 2124770855
5 changed files with 718 additions and 0 deletions

103
robot.cpp Normal file
View file

@ -0,0 +1,103 @@
#include "robot.h"
GCode::GCode(QByteArray c) :
cmd(c)
{ }
GCode & GCode::arg(char param, int v)
{
QByteArray arg;
arg.push_back(param);
arg.push_back(QByteArray::number(v));
args.push_back(arg);
}
GCode & GCode::arg(char param, double v)
{
arg
}
GCode::operator QByteArray()
{
QByteArray ret;
}
/********************************************/
Robot::Robot()
{
}
void Robot::prolog()
{
home();
calibrate();
}
void Robot::epilog()
{
home();
}
void Robot::home()
{
queue << GCode("G28");
}
void Robot::calibrate()
{
queue << GCode("G29");
}
void Robot::stop()
{
queue << GCode("M124");
}
void Robot::moveZ(double z)
{
queue << GCode("G0")
.arg('Z', pos.z);
}
void Robot::moveXY(Point2f pos)
{
queue << GCode("G0")
.arg('X', pos.x)
.arg('Y', pos.y);
}
void Robot::move(Point3f pos)
{
queue << GCode("G0")
.arg('X', pos.x)
.arg('Y', pos.y)
.arg('Z', pos.z);
}
void Robot::moveDelta(Point3f delta)
{
queue << GCode("G91");
move(delta);
queue << GCode("G90");
}
void Robot::processPath(PathResult *path)
{
queue.clear();
prolog();
for (Pad pad : *path) {
moveZ(5.0);
moveXY(pad.center);
moveZ(0.0);
}
epilog();
}

64
robot.h Normal file
View file

@ -0,0 +1,64 @@
#ifndef ROBOT_H
#define ROBOT_H
#include <opencv2/core.hpp>
#include <QQueue>
#include <filters/pathplanner.h>
using namespace cv;
class GCode
{
public:
GCode(QByteArray cmd);
GCode & arg(char param, int v);
GCode & arg(char param, double v);
operator QByteArray();
protected:
QByteArray cmd;
QList<QByteArray> args;
};
class Robot
{
public:
Robot();
void prolog();
void epilog();
void home();
void calibrate();
void stop();
void moveZ(double z);
void moveXY(Point2f pos);
void move(Point3f pos);
void moveDelta(Point3f delta);
void processPath(PathResult *path);
void save();
Point2f map(Point2f);
Point2f unmap(Point2f);
/* Getter */
QByteArray getGCode();
/* Setting */
void setCalibPoint();
protected:
Point2f calibPoints[4];
QQueue<GCode> queue;
};
#endif // ROBOT_H

14
tabrobot.cpp Normal file
View file

@ -0,0 +1,14 @@
#include "tabrobot.h"
#include "ui_tabrobot.h"
TabRobot::TabRobot(QWidget *parent) :
QWidget(parent),
ui(new Ui::TabRobot)
{
ui->setupUi(this);
}
TabRobot::~TabRobot()
{
delete ui;
}

22
tabrobot.h Normal file
View file

@ -0,0 +1,22 @@
#ifndef TABROBOT_H
#define TABROBOT_H
#include <QWidget>
namespace Ui {
class TabRobot;
}
class TabRobot : public QWidget
{
Q_OBJECT
public:
explicit TabRobot(QWidget *parent = 0);
~TabRobot();
private:
Ui::TabRobot *ui;
};
#endif // TABROBOT_H

515
tabrobot.ui Normal file
View file

@ -0,0 +1,515 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TabRobot</class>
<widget class="QWidget" name="TabRobot">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>542</width>
<height>445</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="grpControls">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>200</height>
</size>
</property>
<property name="title">
<string>Control</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QWidget" name="wdgRose" native="true">
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="6" column="2">
<widget class="QPushButton" name="btnYminus">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>64</width>
<height>64</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/go-down.png</normaloff>:/icons/resources/go-down.png</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item row="4" column="0">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="3">
<widget class="QPushButton" name="btnZminus">
<property name="minimumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>64</width>
<height>64</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/go-bottom.png</normaloff>:/icons/resources/go-bottom.png</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QPushButton" name="btnHome">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>64</width>
<height>64</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/go-home.png</normaloff>:/icons/resources/go-home.png</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QPushButton" name="btnXplus">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>64</width>
<height>64</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/go-next.png</normaloff>:/icons/resources/go-next.png</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item row="4" column="4">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="size">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>64</width>
<height>64</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/go-previous.png</normaloff>:/icons/resources/go-previous.png</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="btnYplus">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>64</width>
<height>64</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/go-up.png</normaloff>:/icons/resources/go-up.png</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QPushButton" name="btnZplus">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>64</width>
<height>64</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/go-top.png</normaloff>:/icons/resources/go-top.png</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="wdgControl" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="btnConnect">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Connect</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/octoprint.png</normaloff>:/icons/resources/octoprint.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnCalibrate">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Calibrate</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/calibrate.png</normaloff>:/icons/resources/calibrate.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnStart">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Start</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/media-playback-start.png</normaloff>:/icons/resources/media-playback-start.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnAbort">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Abort</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/media-playback-stop.png</normaloff>:/icons/resources/media-playback-stop.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Save GCode</string>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/icons/resources/document-save.png</normaloff>:/icons/resources/document-save.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="wdgConnection" native="true">
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::FieldsStayAtSizeHint</enum>
</property>
<item row="3" column="1">
<widget class="QWidget" name="widget_4" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="inpHost"/>
</item>
<item>
<widget class="QLabel" name="lblSeperator">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="inpPort">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lblHostPort">
<property name="text">
<string>OctoPrint Server</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="lblApiKey">
<property name="text">
<string>API Key</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="lineEdit_2"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="images.qrc"/>
</resources>
<connections/>
</ui>