initial commit
This commit is contained in:
commit
11afb9f2a4
.gitattributes.gitignorebuild.gradle
app
bin/main
com/cringe_studios/magicianproject
App$1.classApp.class
libDobotDll.solib
DobotDll$DobotResult.classDobotDll$EndEffectorParams.classDobotDll$JOG.classDobotDll$JOGCmd.classDobotDll$JOGCommonParams.classDobotDll$JOGCoordinateParams.classDobotDll$JOGJointParams.classDobotDll$PTPCmd.classDobotDll$PTPCoordinateParams.classDobotDll$PTPJointParams.classDobotDll$PTPJumpParams.classDobotDll$PTPMode.classDobotDll$Pose.classDobotDll.class
src/main
gradle/wrapper
gradlewgradlew.batsettings.gradle
9
.gitattributes
vendored
Normal file
9
.gitattributes
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# https://help.github.com/articles/dealing-with-line-endings/
|
||||||
|
#
|
||||||
|
# Linux start script should use lf
|
||||||
|
/gradlew text eol=lf
|
||||||
|
|
||||||
|
# These are Windows script files and should use crlf
|
||||||
|
*.bat text eol=crlf
|
||||||
|
|
24
.gitignore
vendored
Normal file
24
.gitignore
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Ignore Gradle project-specific cache directory
|
||||||
|
.gradle
|
||||||
|
|
||||||
|
# Ignore Gradle build output directory
|
||||||
|
build
|
||||||
|
|
||||||
|
## Eclipse
|
||||||
|
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
.metadata/
|
||||||
|
/android/bin/
|
||||||
|
/core/bin/
|
||||||
|
/desktop/bin/
|
||||||
|
/html/bin/
|
||||||
|
/ios/bin/
|
||||||
|
*.tmp
|
||||||
|
*.bak
|
||||||
|
*.swp
|
||||||
|
*~.nib
|
||||||
|
.settings/
|
||||||
|
.loadpath
|
||||||
|
.externalToolBuilders/
|
||||||
|
*.launch
|
BIN
app/bin/main/com/cringe_studios/magicianproject/App$1.class
Normal file
BIN
app/bin/main/com/cringe_studios/magicianproject/App$1.class
Normal file
Binary file not shown.
BIN
app/bin/main/com/cringe_studios/magicianproject/App.class
Normal file
BIN
app/bin/main/com/cringe_studios/magicianproject/App.class
Normal file
Binary file not shown.
Binary file not shown.
BIN
app/bin/main/com/cringe_studios/magicianproject/lib/DobotDll$EndEffectorParams.class
Normal file
BIN
app/bin/main/com/cringe_studios/magicianproject/lib/DobotDll$EndEffectorParams.class
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
app/bin/main/com/cringe_studios/magicianproject/lib/DobotDll$JOGCoordinateParams.class
Normal file
BIN
app/bin/main/com/cringe_studios/magicianproject/lib/DobotDll$JOGCoordinateParams.class
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
app/bin/main/com/cringe_studios/magicianproject/lib/DobotDll$PTPCoordinateParams.class
Normal file
BIN
app/bin/main/com/cringe_studios/magicianproject/lib/DobotDll$PTPCoordinateParams.class
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
app/bin/main/libDobotDll.so
Executable file
BIN
app/bin/main/libDobotDll.so
Executable file
Binary file not shown.
53
app/build.gradle
Normal file
53
app/build.gradle
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* This file was generated by the Gradle 'init' task.
|
||||||
|
*
|
||||||
|
* This generated file contains a sample Java application project to get you started.
|
||||||
|
* For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.3/userguide/building_java_projects.html in the Gradle documentation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
// Apply the application plugin to add support for building a CLI application in Java.
|
||||||
|
id 'application'
|
||||||
|
id 'eclipse'
|
||||||
|
}
|
||||||
|
|
||||||
|
mainClassName = 'com.cringe_studios.magicianproject.App'
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
// Use Maven Central for resolving dependencies.
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// This dependency is used by the application.
|
||||||
|
implementation 'net.java.dev.jna:jna:5.13.0'
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply a specific Java toolchain to ease working on different environments.
|
||||||
|
java {
|
||||||
|
toolchain {
|
||||||
|
languageVersion = JavaLanguageVersion.of(17)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
application {
|
||||||
|
// Define the main class for the application.
|
||||||
|
mainClass = project.mainClassName
|
||||||
|
}
|
||||||
|
|
||||||
|
task dist(type: Jar) {
|
||||||
|
duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
|
||||||
|
manifest {
|
||||||
|
attributes 'Main-Class': project.mainClassName
|
||||||
|
}
|
||||||
|
dependsOn configurations.runtimeClasspath
|
||||||
|
from {
|
||||||
|
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
|
||||||
|
}
|
||||||
|
with jar
|
||||||
|
}
|
||||||
|
|
||||||
|
configure(dist) {
|
||||||
|
group = 'build'
|
||||||
|
description = 'Build a JAR with all dependencies'
|
||||||
|
}
|
179
app/src/main/java/com/cringe_studios/magicianproject/App.java
Normal file
179
app/src/main/java/com/cringe_studios/magicianproject/App.java
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
/*
|
||||||
|
* This Java source file was generated by the Gradle 'init' task.
|
||||||
|
*/
|
||||||
|
package com.cringe_studios.magicianproject;
|
||||||
|
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
import com.cringe_studios.magicianproject.lib.DobotDll;
|
||||||
|
import com.cringe_studios.magicianproject.lib.DobotDll.DobotResult;
|
||||||
|
import com.cringe_studios.magicianproject.lib.DobotDll.EndEffectorParams;
|
||||||
|
import com.cringe_studios.magicianproject.lib.DobotDll.JOGCommonParams;
|
||||||
|
import com.cringe_studios.magicianproject.lib.DobotDll.JOGCoordinateParams;
|
||||||
|
import com.cringe_studios.magicianproject.lib.DobotDll.JOGJointParams;
|
||||||
|
import com.cringe_studios.magicianproject.lib.DobotDll.PTPCmd;
|
||||||
|
import com.cringe_studios.magicianproject.lib.DobotDll.PTPCoordinateParams;
|
||||||
|
import com.cringe_studios.magicianproject.lib.DobotDll.PTPJointParams;
|
||||||
|
import com.cringe_studios.magicianproject.lib.DobotDll.PTPJumpParams;
|
||||||
|
import com.cringe_studios.magicianproject.lib.DobotDll.Pose;
|
||||||
|
import com.sun.jna.ptr.FloatByReference;
|
||||||
|
import com.sun.jna.ptr.LongByReference;
|
||||||
|
|
||||||
|
public class App {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
App app = new App();
|
||||||
|
app.Start();
|
||||||
|
|
||||||
|
LongByReference ib = new LongByReference();
|
||||||
|
/*
|
||||||
|
* JOGCmd test = new JOGCmd(); test.isJoint = 1; while(true) { try{ test.cmd =
|
||||||
|
* 1; DobotDll.instance.SetJOGCmd(test, false, ib); Thread.sleep(500); test.cmd
|
||||||
|
* = 0; DobotDll.instance.SetJOGCmd(test, false, ib); Thread.sleep(1000);
|
||||||
|
* test.cmd = 2; DobotDll.instance.SetJOGCmd(test, false, ib);
|
||||||
|
* Thread.sleep(500); test.cmd = 0; DobotDll.instance.SetJOGCmd(test, false,
|
||||||
|
* ib); Thread.sleep(1000);
|
||||||
|
*
|
||||||
|
* } catch (Exception e) { e.printStackTrace(); } }
|
||||||
|
*/
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
PTPCmd ptpCmd = new PTPCmd();
|
||||||
|
ptpCmd.ptpMode = 0;
|
||||||
|
ptpCmd.x = 260;
|
||||||
|
ptpCmd.y = 0;
|
||||||
|
ptpCmd.z = 50;
|
||||||
|
ptpCmd.r = 0;
|
||||||
|
DobotDll.instance.SetPTPCmd(ptpCmd, true, ib);
|
||||||
|
// Thread.sleep(200);
|
||||||
|
|
||||||
|
ptpCmd.ptpMode = 0;
|
||||||
|
ptpCmd.x = 220;
|
||||||
|
ptpCmd.y = 0;
|
||||||
|
ptpCmd.z = 80;
|
||||||
|
ptpCmd.r = 0;
|
||||||
|
DobotDll.instance.SetPTPCmd(ptpCmd, true, ib);
|
||||||
|
// Thread.sleep(200);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// DobotDll.instance.DisconnectDobot();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Start() {
|
||||||
|
byte[] fwtype = new byte[128];
|
||||||
|
byte[] version = new byte[128];
|
||||||
|
FloatByReference time = new FloatByReference(0);
|
||||||
|
DobotResult ret = DobotResult.values()[DobotDll.instance.ConnectDobot((char) 0, 115200, fwtype, version, time)];
|
||||||
|
// <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (ret == DobotResult.DobotConnect_NotFound || ret == DobotResult.DobotConnect_Occupied) {
|
||||||
|
Msg("Connect error, code:" + ret.name());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Msg("connect success code:" + ret.name());
|
||||||
|
|
||||||
|
StartDobot();
|
||||||
|
|
||||||
|
StartGetStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Java-doc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#Object()
|
||||||
|
*/
|
||||||
|
public App() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StartDobot() {
|
||||||
|
// 此方程初始化Dobot的运动参数例如运动时的速度与加速度
|
||||||
|
// This function initializes common parameters of Dobot host such as velocity
|
||||||
|
// and acceleration in motion
|
||||||
|
LongByReference ib = new LongByReference();
|
||||||
|
EndEffectorParams endEffectorParams = new EndEffectorParams();
|
||||||
|
endEffectorParams.xBias = 71.6f;
|
||||||
|
endEffectorParams.yBias = 0;
|
||||||
|
endEffectorParams.zBias = 0;
|
||||||
|
DobotDll.instance.SetEndEffectorParams(endEffectorParams, false, ib);
|
||||||
|
JOGJointParams jogJointParams = new JOGJointParams();
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
jogJointParams.velocity[i] = 200;
|
||||||
|
jogJointParams.acceleration[i] = 200;
|
||||||
|
}
|
||||||
|
DobotDll.instance.SetJOGJointParams(jogJointParams, false, ib);
|
||||||
|
|
||||||
|
JOGCoordinateParams jogCoordinateParams = new JOGCoordinateParams();
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
jogCoordinateParams.velocity[i] = 200;
|
||||||
|
jogCoordinateParams.acceleration[i] = 200;
|
||||||
|
}
|
||||||
|
DobotDll.instance.SetJOGCoordinateParams(jogCoordinateParams, false, ib);
|
||||||
|
|
||||||
|
JOGCommonParams jogCommonParams = new JOGCommonParams();
|
||||||
|
jogCommonParams.velocityRatio = 50;
|
||||||
|
jogCommonParams.accelerationRatio = 50;
|
||||||
|
DobotDll.instance.SetJOGCommonParams(jogCommonParams, false, ib);
|
||||||
|
|
||||||
|
PTPJointParams ptpJointParams = new PTPJointParams();
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
ptpJointParams.velocity[i] = 200;
|
||||||
|
ptpJointParams.acceleration[i] = 200;
|
||||||
|
}
|
||||||
|
DobotDll.instance.SetPTPJointParams(ptpJointParams, false, ib);
|
||||||
|
|
||||||
|
PTPCoordinateParams ptpCoordinateParams = new PTPCoordinateParams();
|
||||||
|
ptpCoordinateParams.xyzVelocity = 200;
|
||||||
|
ptpCoordinateParams.xyzAcceleration = 200;
|
||||||
|
ptpCoordinateParams.rVelocity = 200;
|
||||||
|
ptpCoordinateParams.rAcceleration = 200;
|
||||||
|
DobotDll.instance.SetPTPCoordinateParams(ptpCoordinateParams, false, ib);
|
||||||
|
|
||||||
|
PTPJumpParams ptpJumpParams = new PTPJumpParams();
|
||||||
|
ptpJumpParams.jumpHeight = 20;
|
||||||
|
ptpJumpParams.zLimit = 180;
|
||||||
|
DobotDll.instance.SetPTPJumpParams(ptpJumpParams, false, ib);
|
||||||
|
|
||||||
|
// 设置指令超时时间 清空队列中剩余的指令 并开始执行队列 注:有两种方法可以执行队列 1.先调用api函数setQueuedCmdStartExec()
|
||||||
|
// 然后将指令插入队列中 2.先将指令插入到队列 再调用函数开始执行队列
|
||||||
|
// Set timeout limit and start executing command queue. NOTE: There are two ways
|
||||||
|
// to execute the command queue.1.Call API function setQueueStartExec() first
|
||||||
|
// then queue command
|
||||||
|
// 2. Queue command then call the API function
|
||||||
|
DobotDll.instance.SetCmdTimeout(3000);
|
||||||
|
DobotDll.instance.SetQueuedCmdClear();
|
||||||
|
DobotDll.instance.SetQueuedCmdStartExec();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StartGetStatus() {
|
||||||
|
// 此函数调用GetPose用于定时获得dobot的实时位置
|
||||||
|
// This function call api function GetPose to get the real time pose of Dobot
|
||||||
|
// host periodically.
|
||||||
|
Timer timerPos = new Timer();
|
||||||
|
timerPos.schedule(new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Pose pose = new Pose();
|
||||||
|
DobotDll.instance.GetPose(pose);
|
||||||
|
|
||||||
|
Msg("joint1Angle=" + pose.jointAngle[0] + " " + "joint2Angle=" + pose.jointAngle[1] + " "
|
||||||
|
+ "joint3Angle=" + pose.jointAngle[2] + " " + "joint4Angle=" + pose.jointAngle[3] + " " + "x="
|
||||||
|
+ pose.x + " " + "y=" + pose.y + " " + "z=" + pose.z + " " + "r=" + pose.r + " ");
|
||||||
|
}
|
||||||
|
}, 100, 500);//
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Msg(String string) {
|
||||||
|
System.out.println(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,253 @@
|
|||||||
|
package com.cringe_studios.magicianproject.lib;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.sun.jna.Library;
|
||||||
|
import com.sun.jna.Native;
|
||||||
|
import com.sun.jna.Structure;
|
||||||
|
import com.sun.jna.ptr.FloatByReference;
|
||||||
|
import com.sun.jna.ptr.LongByReference;
|
||||||
|
/* 此文件定义了将在主程序中被使用的类 将dll库中使用的类型封装为对应的java类型
|
||||||
|
* This file define the classes that will be used in the main program. It encapsulates c-structures as corresponding Java class
|
||||||
|
*/
|
||||||
|
public interface DobotDll extends Library
|
||||||
|
{
|
||||||
|
DobotDll instance = Native.load("DobotDll", DobotDll.class);
|
||||||
|
|
||||||
|
public static class Pose extends Structure
|
||||||
|
{
|
||||||
|
//如果Pose只是作为api的参数或返回值则不需要另外声明传递的Pose为ByReference或ByValue 因为JNA将根据c中的定义自行转换 类中的类型声明顺序必须与提供的c头文件相符合
|
||||||
|
//Notice that if the structre is only to be used in api functions as arguments or return value there is no need to include this two line
|
||||||
|
//The declaration must be in the same order as such in the original c header file DobotDllM1.h
|
||||||
|
/*
|
||||||
|
public static class ByReference extends Pose implements Structure.ByReference{}
|
||||||
|
public static class ByValue extends Pose implements Structure.ByValue{}
|
||||||
|
*/
|
||||||
|
public float x;
|
||||||
|
public float y;
|
||||||
|
public float z;
|
||||||
|
public float r;
|
||||||
|
public float[] jointAngle = new float[4];;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
//此步骤为必要步骤 JNA现要求编写时手动规定类中的fields顺序
|
||||||
|
//The getFieldOrder() function must be defined and return a string list represent the proper order of the fields defined in current structure
|
||||||
|
protected List<String> getFieldOrder()
|
||||||
|
{
|
||||||
|
List<String> a = new ArrayList<String>();
|
||||||
|
a.add("x");
|
||||||
|
a.add("y");
|
||||||
|
a.add("z");
|
||||||
|
a.add("r");
|
||||||
|
a.add("jointAngle");
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
//初始化实例时需声明内存按照1byte对齐对应c中头文件的pragma pack(1) 注:部分类型缺少此初始化函数 因为结构本身已经按照1byte对齐
|
||||||
|
//You must initialize the encapsulated class with 1 byte memory alignment corresponding to pragma pack(1) in the c header file.
|
||||||
|
//NOTE:some classes defined in this module miss this initialization function because their memory layouts are naturally aligned to one byte.
|
||||||
|
public Pose()
|
||||||
|
{
|
||||||
|
this.setAlignType(ALIGN_NONE);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static class EndEffectorParams extends Structure
|
||||||
|
{
|
||||||
|
public float xBias;
|
||||||
|
public float yBias;
|
||||||
|
public float zBias;
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder() {
|
||||||
|
List<String> a = new ArrayList<String>();
|
||||||
|
a.add("xBias");
|
||||||
|
a.add("yBias");
|
||||||
|
a.add("zBias");
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public enum JOG
|
||||||
|
{
|
||||||
|
JogIdle,
|
||||||
|
JogAPPressed,
|
||||||
|
JogANPressed,
|
||||||
|
JogBPPressed,
|
||||||
|
JogBNPressed,
|
||||||
|
JogCPPressed,
|
||||||
|
JogCNPressed,
|
||||||
|
JogDPPressed,
|
||||||
|
JogDNPressed,
|
||||||
|
JogEPPressed,
|
||||||
|
JogENPressed
|
||||||
|
};
|
||||||
|
|
||||||
|
public static class JOGCmd extends Structure
|
||||||
|
{
|
||||||
|
public JOGCmd() {
|
||||||
|
setAlignType(Structure.ALIGN_NONE);
|
||||||
|
}
|
||||||
|
public byte isJoint;
|
||||||
|
public byte cmd;
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder() {
|
||||||
|
List<String> a = new ArrayList<String>();
|
||||||
|
a.add("isJoint");
|
||||||
|
a.add("cmd");
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static class JOGJointParams extends Structure
|
||||||
|
{
|
||||||
|
public float[] velocity = new float[4];
|
||||||
|
public float[] acceleration = new float[4];
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder() {
|
||||||
|
List<String> a = new ArrayList<String>();
|
||||||
|
a.add("velocity");
|
||||||
|
a.add("acceleration");
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static class JOGCoordinateParams extends Structure
|
||||||
|
{
|
||||||
|
public float[] velocity = new float[4];
|
||||||
|
public float[] acceleration = new float[4];
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder() {
|
||||||
|
List<String> a = new ArrayList<String>();
|
||||||
|
a.add("velocity");
|
||||||
|
a.add("acceleration");
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static class JOGCommonParams extends Structure
|
||||||
|
{
|
||||||
|
public float velocityRatio;
|
||||||
|
public float accelerationRatio;
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder() {
|
||||||
|
List<String> a = new ArrayList<String>();
|
||||||
|
a.add("velocityRatio");
|
||||||
|
a.add("accelerationRatio");
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public enum PTPMode {
|
||||||
|
PTPJUMPXYZMode,
|
||||||
|
PTPMOVJXYZMode,
|
||||||
|
PTPMOVLXYZMode,
|
||||||
|
|
||||||
|
PTPJUMPANGLEMode,
|
||||||
|
PTPMOVJANGLEMode,
|
||||||
|
PTPMOVLANGLEMode,
|
||||||
|
|
||||||
|
PTPMOVJXYZINCMode,
|
||||||
|
PTPMOVLXYZINCMode
|
||||||
|
};
|
||||||
|
|
||||||
|
public static class PTPCmd extends Structure
|
||||||
|
{
|
||||||
|
public PTPCmd() {
|
||||||
|
setAlignType(Structure.ALIGN_NONE);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
public static class ByReference extends PTPCmd implements Structure.ByReference { }
|
||||||
|
public static class ByValue extends PTPCmd implements Structure.ByValue{ }
|
||||||
|
*/
|
||||||
|
public byte ptpMode;
|
||||||
|
public float x;
|
||||||
|
public float y;
|
||||||
|
public float z;
|
||||||
|
public float r;
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder() {
|
||||||
|
List<String> a = new ArrayList<String>();
|
||||||
|
a.add("ptpMode");
|
||||||
|
a.add("x");
|
||||||
|
a.add("y");
|
||||||
|
a.add("z");
|
||||||
|
a.add("r");
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static class PTPJointParams extends Structure
|
||||||
|
{
|
||||||
|
public float[] velocity = new float[4];
|
||||||
|
public float[] acceleration = new float[4];
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder() {
|
||||||
|
List<String> a = new ArrayList<String>();
|
||||||
|
a.add("velocity");
|
||||||
|
a.add("acceleration");
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static class PTPCoordinateParams extends Structure
|
||||||
|
{
|
||||||
|
public float xyzVelocity;
|
||||||
|
public float rVelocity;
|
||||||
|
public float xyzAcceleration;
|
||||||
|
public float rAcceleration;
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder() {
|
||||||
|
List<String> a = new ArrayList<String>();
|
||||||
|
a.add("xyzVelocity");
|
||||||
|
a.add("rVelocity");
|
||||||
|
a.add("xyzAcceleration");
|
||||||
|
a.add("rAcceleration");
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static class PTPJumpParams extends Structure
|
||||||
|
{
|
||||||
|
public float jumpHeight;
|
||||||
|
public float zLimit;
|
||||||
|
@Override
|
||||||
|
protected List<String> getFieldOrder() {
|
||||||
|
List<String> a = new ArrayList<String>();
|
||||||
|
a.add("jumpHeight");
|
||||||
|
a.add("zLimit");
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public enum DobotResult
|
||||||
|
{
|
||||||
|
DobotConnect_NoError,
|
||||||
|
DobotConnect_NotFound,
|
||||||
|
DobotConnect_Occupied
|
||||||
|
};
|
||||||
|
//c中的char* 对应 java中的byte【】
|
||||||
|
int ConnectDobot(char portName, int baudrate, byte[] fwtype, byte[] version, FloatByReference time);
|
||||||
|
void DisconnectDobot();
|
||||||
|
void SetCmdTimeout(int cmdTimeout);
|
||||||
|
int SetQueuedCmdClear();
|
||||||
|
int SetQueuedCmdStartExec();
|
||||||
|
int SetEndEffectorParams(EndEffectorParams endEffectorParams, boolean isQueued, LongByReference queuedCmdIndex);
|
||||||
|
int DobotExec();
|
||||||
|
|
||||||
|
// Pose
|
||||||
|
int GetPose(Pose pose);
|
||||||
|
|
||||||
|
// Jog functions
|
||||||
|
// C中的float对应java中的long
|
||||||
|
// Float in c correspond to long in java
|
||||||
|
int SetJOGCmd(JOGCmd jogCmd, boolean isQueued, LongByReference ueuedCmdIndex);
|
||||||
|
int SetJOGJointParams(JOGJointParams jogJointParams, boolean isQueued, LongByReference ueuedCmdIndex);
|
||||||
|
int SetJOGCoordinateParams(JOGCoordinateParams jogCoordinateParams, boolean isQueued, LongByReference ueuedCmdIndex);
|
||||||
|
int SetJOGCommonParams(JOGCommonParams jogCommonParams, boolean isQueued, LongByReference ueuedCmdIndex);
|
||||||
|
|
||||||
|
// Playback functions
|
||||||
|
int SetPTPCmd(PTPCmd ptpCmd, boolean isQueued, LongByReference queuedCmdIndex);
|
||||||
|
int SetPTPJointParams(PTPJointParams ptpJointParams, boolean isQueued, LongByReference ueuedCmdIndex);
|
||||||
|
int SetPTPCoordinateParams(PTPCoordinateParams ptpCoordinateParams, boolean isQueued, LongByReference ueuedCmdIndex);
|
||||||
|
int SetPTPJumpParams(PTPJumpParams ptpJumpParams, boolean isQueued, LongByReference ueuedCmdIndex);
|
||||||
|
}
|
BIN
app/src/main/resources/libDobotDll.so
Executable file
BIN
app/src/main/resources/libDobotDll.so
Executable file
Binary file not shown.
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
7
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
7
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
|
||||||
|
networkTimeout=10000
|
||||||
|
validateDistributionUrl=true
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
zipStorePath=wrapper/dists
|
249
gradlew
vendored
Executable file
249
gradlew
vendored
Executable file
@ -0,0 +1,249 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright © 2015-2021 the original authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# Gradle start up script for POSIX generated by Gradle.
|
||||||
|
#
|
||||||
|
# Important for running:
|
||||||
|
#
|
||||||
|
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||||
|
# noncompliant, but you have some other compliant shell such as ksh or
|
||||||
|
# bash, then to run this script, type that shell name before the whole
|
||||||
|
# command line, like:
|
||||||
|
#
|
||||||
|
# ksh Gradle
|
||||||
|
#
|
||||||
|
# Busybox and similar reduced shells will NOT work, because this script
|
||||||
|
# requires all of these POSIX shell features:
|
||||||
|
# * functions;
|
||||||
|
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||||
|
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||||
|
# * compound commands having a testable exit status, especially «case»;
|
||||||
|
# * various built-in commands including «command», «set», and «ulimit».
|
||||||
|
#
|
||||||
|
# Important for patching:
|
||||||
|
#
|
||||||
|
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||||
|
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||||
|
#
|
||||||
|
# The "traditional" practice of packing multiple parameters into a
|
||||||
|
# space-separated string is a well documented source of bugs and security
|
||||||
|
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||||
|
# options in "$@", and eventually passing that to Java.
|
||||||
|
#
|
||||||
|
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||||
|
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||||
|
# see the in-line comments for details.
|
||||||
|
#
|
||||||
|
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||||
|
# Darwin, MinGW, and NonStop.
|
||||||
|
#
|
||||||
|
# (3) This script is generated from the Groovy template
|
||||||
|
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||||
|
# within the Gradle project.
|
||||||
|
#
|
||||||
|
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# Attempt to set APP_HOME
|
||||||
|
|
||||||
|
# Resolve links: $0 may be a link
|
||||||
|
app_path=$0
|
||||||
|
|
||||||
|
# Need this for daisy-chained symlinks.
|
||||||
|
while
|
||||||
|
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||||
|
[ -h "$app_path" ]
|
||||||
|
do
|
||||||
|
ls=$( ls -ld "$app_path" )
|
||||||
|
link=${ls#*' -> '}
|
||||||
|
case $link in #(
|
||||||
|
/*) app_path=$link ;; #(
|
||||||
|
*) app_path=$APP_HOME$link ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# This is normally unused
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
APP_BASE_NAME=${0##*/}
|
||||||
|
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||||
|
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
|
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
|
MAX_FD=maximum
|
||||||
|
|
||||||
|
warn () {
|
||||||
|
echo "$*"
|
||||||
|
} >&2
|
||||||
|
|
||||||
|
die () {
|
||||||
|
echo
|
||||||
|
echo "$*"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
} >&2
|
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false').
|
||||||
|
cygwin=false
|
||||||
|
msys=false
|
||||||
|
darwin=false
|
||||||
|
nonstop=false
|
||||||
|
case "$( uname )" in #(
|
||||||
|
CYGWIN* ) cygwin=true ;; #(
|
||||||
|
Darwin* ) darwin=true ;; #(
|
||||||
|
MSYS* | MINGW* ) msys=true ;; #(
|
||||||
|
NONSTOP* ) nonstop=true ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
|
# Determine the Java command to use to start the JVM.
|
||||||
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
|
# IBM's JDK on AIX uses strange locations for the executables
|
||||||
|
JAVACMD=$JAVA_HOME/jre/sh/java
|
||||||
|
else
|
||||||
|
JAVACMD=$JAVA_HOME/bin/java
|
||||||
|
fi
|
||||||
|
if [ ! -x "$JAVACMD" ] ; then
|
||||||
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
JAVACMD=java
|
||||||
|
if ! command -v java >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Increase the maximum file descriptors if we can.
|
||||||
|
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||||
|
case $MAX_FD in #(
|
||||||
|
max*)
|
||||||
|
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||||
|
# shellcheck disable=SC3045
|
||||||
|
MAX_FD=$( ulimit -H -n ) ||
|
||||||
|
warn "Could not query maximum file descriptor limit"
|
||||||
|
esac
|
||||||
|
case $MAX_FD in #(
|
||||||
|
'' | soft) :;; #(
|
||||||
|
*)
|
||||||
|
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||||
|
# shellcheck disable=SC3045
|
||||||
|
ulimit -n "$MAX_FD" ||
|
||||||
|
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Collect all arguments for the java command, stacking in reverse order:
|
||||||
|
# * args from the command line
|
||||||
|
# * the main class name
|
||||||
|
# * -classpath
|
||||||
|
# * -D...appname settings
|
||||||
|
# * --module-path (only if needed)
|
||||||
|
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||||
|
|
||||||
|
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||||
|
if "$cygwin" || "$msys" ; then
|
||||||
|
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||||
|
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||||
|
|
||||||
|
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||||
|
|
||||||
|
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||||
|
for arg do
|
||||||
|
if
|
||||||
|
case $arg in #(
|
||||||
|
-*) false ;; # don't mess with options #(
|
||||||
|
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||||
|
[ -e "$t" ] ;; #(
|
||||||
|
*) false ;;
|
||||||
|
esac
|
||||||
|
then
|
||||||
|
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||||
|
fi
|
||||||
|
# Roll the args list around exactly as many times as the number of
|
||||||
|
# args, so each arg winds up back in the position where it started, but
|
||||||
|
# possibly modified.
|
||||||
|
#
|
||||||
|
# NB: a `for` loop captures its iteration list before it begins, so
|
||||||
|
# changing the positional parameters here affects neither the number of
|
||||||
|
# iterations, nor the values presented in `arg`.
|
||||||
|
shift # remove old arg
|
||||||
|
set -- "$@" "$arg" # push replacement arg
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
|
|
||||||
|
# Collect all arguments for the java command;
|
||||||
|
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
|
||||||
|
# shell script including quotes and variable substitutions, so put them in
|
||||||
|
# double quotes to make sure that they get re-expanded; and
|
||||||
|
# * put everything else in single quotes, so that it's not re-expanded.
|
||||||
|
|
||||||
|
set -- \
|
||||||
|
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||||
|
-classpath "$CLASSPATH" \
|
||||||
|
org.gradle.wrapper.GradleWrapperMain \
|
||||||
|
"$@"
|
||||||
|
|
||||||
|
# Stop when "xargs" is not available.
|
||||||
|
if ! command -v xargs >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
die "xargs is not available"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use "xargs" to parse quoted args.
|
||||||
|
#
|
||||||
|
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||||
|
#
|
||||||
|
# In Bash we could simply go:
|
||||||
|
#
|
||||||
|
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||||
|
# set -- "${ARGS[@]}" "$@"
|
||||||
|
#
|
||||||
|
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||||
|
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||||
|
# character that might be a shell metacharacter, then use eval to reverse
|
||||||
|
# that process (while maintaining the separation between arguments), and wrap
|
||||||
|
# the whole thing up as a single "set" statement.
|
||||||
|
#
|
||||||
|
# This will of course break if any of these variables contains a newline or
|
||||||
|
# an unmatched quote.
|
||||||
|
#
|
||||||
|
|
||||||
|
eval "set -- $(
|
||||||
|
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||||
|
xargs -n1 |
|
||||||
|
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||||
|
tr '\n' ' '
|
||||||
|
)" '"$@"'
|
||||||
|
|
||||||
|
exec "$JAVACMD" "$@"
|
92
gradlew.bat
vendored
Normal file
92
gradlew.bat
vendored
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
@rem
|
||||||
|
@rem Copyright 2015 the original author or authors.
|
||||||
|
@rem
|
||||||
|
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
@rem you may not use this file except in compliance with the License.
|
||||||
|
@rem You may obtain a copy of the License at
|
||||||
|
@rem
|
||||||
|
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
@rem
|
||||||
|
@rem Unless required by applicable law or agreed to in writing, software
|
||||||
|
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
@rem See the License for the specific language governing permissions and
|
||||||
|
@rem limitations under the License.
|
||||||
|
@rem
|
||||||
|
|
||||||
|
@if "%DEBUG%"=="" @echo off
|
||||||
|
@rem ##########################################################################
|
||||||
|
@rem
|
||||||
|
@rem Gradle startup script for Windows
|
||||||
|
@rem
|
||||||
|
@rem ##########################################################################
|
||||||
|
|
||||||
|
@rem Set local scope for the variables with windows NT shell
|
||||||
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
|
set DIRNAME=%~dp0
|
||||||
|
if "%DIRNAME%"=="" set DIRNAME=.
|
||||||
|
@rem This is normally unused
|
||||||
|
set APP_BASE_NAME=%~n0
|
||||||
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||||
|
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||||
|
|
||||||
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||||
|
|
||||||
|
@rem Find java.exe
|
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
|
set JAVA_EXE=java.exe
|
||||||
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
|
if %ERRORLEVEL% equ 0 goto execute
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:findJavaFromJavaHome
|
||||||
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
|
if exist "%JAVA_EXE%" goto execute
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:execute
|
||||||
|
@rem Setup the command line
|
||||||
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
|
@rem Execute Gradle
|
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||||
|
|
||||||
|
:end
|
||||||
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
if %ERRORLEVEL% equ 0 goto mainEnd
|
||||||
|
|
||||||
|
:fail
|
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
|
rem the _cmd.exe /c_ return code!
|
||||||
|
set EXIT_CODE=%ERRORLEVEL%
|
||||||
|
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
||||||
|
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
||||||
|
exit /b %EXIT_CODE%
|
||||||
|
|
||||||
|
:mainEnd
|
||||||
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
|
||||||
|
:omega
|
14
settings.gradle
Normal file
14
settings.gradle
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
* This file was generated by the Gradle 'init' task.
|
||||||
|
*
|
||||||
|
* The settings file is used to specify which projects to include in your build.
|
||||||
|
* For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.3/userguide/building_swift_projects.html in the Gradle documentation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
// Apply the foojay-resolver plugin to allow automatic download of JDKs
|
||||||
|
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0'
|
||||||
|
}
|
||||||
|
|
||||||
|
rootProject.name = 'MagicianProject'
|
||||||
|
include('app')
|
Loading…
x
Reference in New Issue
Block a user