跳转到内容

Java SDK 运行示例

在 Windows 环境下

本模块将介绍 Windows 环境下 Java SDK 的各类运行方式,包括标准工程与安卓工程的具体实现。

注意

  • 如果 SDK 客户端连接真实机械臂,必须将代码中的 IP 地址设置成机械臂的 IP 地址。

  • 如果在 Aubo Sim 虚拟机中运行工程并且 SDK 客户端连接的是虚拟机,则 IP 地址为 虚拟机的IP地址。

Java SDK 运行示例

本模块将介绍如何在 Windows 环境下,使用 IntelliJ IDEA 实现通过 Java SDK 实现遨博机械臂上电。

  1. 打开 IDEA,单击 New Project 。

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

  3. 参考安装指南对 Maven 工程仓库进行配置,在终端执行 mvn 编译命令 mvn clean complie -U

  4. 在测试目录中建立测试类:AppTest.java 文件,点击运行。

    单击查看示例代码
    java
    package 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());
            }
        }
    }
  5. 运行 AppTest.java 文件后,查看运行日志,成功后在虚拟机中能看到机械臂已上电。

Java SDK 安卓工程运行示例

本模块将为介绍如何在 Windows 环境下,使用 Android Studio 实现通过 Java SDK 实现遨博机械臂上电。

  1. 打开 Android Studio,依次单击“New Project > Empty Activity > Next”。

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

  3. 参考安装指南对 Android 工程仓库进行配置。

  4. 在 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)
            }
        }
    }
  5. 运行 MainActivity 文件后,如图所示,可在 Logcat 中查看运行日志,成功后在虚拟机中能看到机械臂已上电。