Java SDK 运行示例
在 Windows 环境下
本模块将介绍 Windows 环境下 Java SDK 的各类运行方式,包括标准工程与安卓工程的具体实现。
注意
如果 SDK 客户端连接真实机械臂,必须将代码中的 IP 地址设置成机械臂的 IP 地址。
如果在 Aubo Sim 虚拟机中运行工程并且 SDK 客户端连接的是虚拟机,则 IP 地址为 虚拟机的IP地址。
Java SDK 运行示例
本模块将介绍如何在 Windows 环境下,使用 IntelliJ IDEA 实现通过 Java SDK 实现遨博机械臂上电。
打开 IDEA,单击 New Project 。

创建 Maven Archetype 项目,按照图中步骤选择好相关内容。

参考安装指南对 Maven 工程仓库进行配置,在终端执行 mvn 编译命令
mvn clean complie -U。
在测试目录中建立测试类:AppTest.java 文件,点击运行。
单击查看示例代码
javapackage cn.aubo_robotics; import cn.aubo_robotics.aubo_sdk.aubo.enums.RobotModeType; import cn.aubo_robotics.aubo_sdk.aubo.enums.RuntimeState; import cn.aubo_robotics.aubo_sdk.aubo.enums.SafetyModeType; import cn.aubo_robotics.aubo_sdk.aubo_sdk.RtdeRecipe; import cn.aubo_robotics.aubo_sdk.robot_proxy.RobotProxy; import com.google.common.collect.Lists; import junit.framework.TestCase; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; /** * Unit test for simple App. */ public class AppTestDemo extends TestCase { private RobotProxy proxy = null; public void connect() { RobotProxy proxy = new RobotProxy(); try { CompletableFuture<Boolean> connectServer = proxy.connectServer("192.×.×.×", 9012, 9013, 30003); // 关键:给get()加5秒超时,替代方法参数超时 System.out.println("连接状态: " + connectServer.get(5000, java.util.concurrent.TimeUnit.MILLISECONDS)); this.proxy = proxy; proxy.selectRobot(0); proxy.login("", ""); } catch (Exception e) { throw new RuntimeException(e); } } public void getRobotsAndSelect() { try { List<String> robotNames = this.proxy.getRobotNames(); robotNames.forEach(System.out::println); if (!robotNames.isEmpty()) { this.proxy.selectRobot(0); this.proxy.login("", ""); System.out.println(robotNames.get(0) + " is logined."); } } catch (Exception e) { throw new RuntimeException(e); } } public void poweron() { try { boolean connected = this.proxy.hasLogin(); if (this.proxy != null && connected) { while (true) { RuntimeState status = this.proxy.getRuntimeMachine().getRuntimeState(); RobotModeType robotModeType = this.proxy.getRobotState().getRobotModeType(); SafetyModeType safetyModeType = this.proxy.getRobotState().getSafetyModeType(); System.out.println( "Before proweron. robot status: " + status + ", mode type: " + robotModeType + ", safetyModeType:" + safetyModeType ); if ( safetyModeType == SafetyModeType.RobotEmergencyStop || safetyModeType == SafetyModeType.SystemEmergencyStop || safetyModeType == SafetyModeType.SafeguardStop ) { System.out.println("Auto enable robot: emergency stop."); break; } if (status == RuntimeState.Stopped && (robotModeType == RobotModeType.PowerOff || robotModeType == RobotModeType.NoController)) { this.proxy.getRobotManage().poweron(); System.out.println("Robot has power on."); Thread.sleep(3000); } // 已经启动上电,保护性停止都不再上电 else if (robotModeType == RobotModeType.Running) { break; } //释放刹车 if (robotModeType == RobotModeType.Idle) { this.proxy.getRobotManage().startup(); System.out.println("Robot has startup."); Thread.sleep(1000); break; } } } } catch (Exception e) { throw new RuntimeException(e); } } public void addRtdeTopicCallback() { try { Consumer<Object> callback = new Consumer<Object>() { @Override public void accept(Object o) { System.out.println("single callback: " + o); } }; this.proxy.addRtdeTopicCallback(0, RtdeRecipe.TopicOutputPoolEnum.target_q.name(), callback, 100, null); Thread.sleep(5000); } catch (Exception e) { throw new RuntimeException(e); } } public void disconnect() { try { List<String> topicList = Lists.newArrayList(RtdeRecipe.TopicOutputPoolEnum.target_q.name()); this.proxy.deleteRtdeTopicCallbacks(0, topicList); this.proxy.disConnectFromServer(); this.proxy.logout(); this.proxy = null; } catch (Exception e) { throw new RuntimeException(e); } } public static void main(String[] args) { try { AppTestDemo appTest = new AppTestDemo(); appTest.connect(); appTest.getRobotsAndSelect(); System.out.println("[AppTest] 连接成功."); appTest.poweron(); System.out.println("[AppTest] 机器人已上电."); appTest.addRtdeTopicCallback(); System.out.println("[AppTest] 已开启RTDE订阅."); Thread.sleep(3000); appTest.disconnect(); System.out.println("[AppTest] 已断开连接."); } catch (Exception e) { System.out.printf("%s\n", e.getMessage()); } } }
运行 AppTest.java 文件后,查看运行日志,成功后在虚拟机中能看到机械臂已上电。


Java SDK 安卓工程运行示例
本模块将为介绍如何在 Windows 环境下,使用 Android Studio 实现通过 Java SDK 实现遨博机械臂上电。
打开 Android Studio,依次单击“New Project > Empty Activity > Next”。

如图所示进行工程文件命名配置。

参考安装指南对 Android 工程仓库进行配置。
在 MainActivity 文件中进行编译,连接 Android 设备后,运行Android程序。
单击查看示例代码
package com.sdktest.sdktestapplication import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import cn.aubo_robotics.aubo_sdk.robot_proxy.RobotProxy class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) testSDK() } private val savedRpcPort = 9012 private val savedRtdePort = 9013 private val savedScriptPort = 30003 //输入连接设备的IP private val host = "172.18.14.240" private val proxy = RobotProxy() fun testSDK() { try { //1.连接 val connectedFuture = proxy.connectServer( host, savedRpcPort, savedRtdePort, savedScriptPort ) val connected = connectedFuture.get() if (connected) { Log.d("AUBO_SDK", "connect success: $host") } else { Log.e("AUBO_SDK", "connect failed: $host") } // 2. 登录 proxy.login("username", "password") // 3. 选择机械臂 proxy.selectRobot(0) } catch (e: Exception) { Log.e("AUBO_SDK", "connect error", e) } } }
运行 MainActivity 文件后,如图所示,可在 Logcat 中查看运行日志,成功后在虚拟机中能看到机械臂已上电。


