Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

本页介绍了 SpeedRegulationGoHomeCharge的用法, 如何调用setSystemParameter接口调节机器人底盘速度。 包含如何使用goHome 方法命令机器人回到充电桩充电。


...

本页内容

Table of Contents

...

运行环境准备

  • 软件平台

    • Android Studio 3.1.3
    • Slamware Android SDK: slamware_sdk_android.2.6.0_rtm.20180820.tar.gz
    • RoboStudio(用于显示地图):Robostudio installer
    • Sample Code: 

      Info

      使用不同版本的Android Studio可能会带来编译异常,请自行下载相关库和修改build.gradle配置文件,本例程基于Slamware Android SDK 2.6.0 进行开发,若想尝试更高的SDK版本,请直接替换工程中的 slamware_sdk_android.jar 和 librpsdk.so 文件。


  • 硬件平台

          (以下任选其一)

      • Slamware SDP mini 
      • Slamware SDP
      • Slamware 套装 (基于Slamware导航方案的用户机器人系统)
      • Zeus/Apollo等底盘系统

...

编译运行

  1. 打开SpeedRegulationGoHomeCharge工程,检查libs路径下是否有 slamware_sdk_android.jar 文件,以及jinLibs路径下是否有 librpsdk.so 文件,若想尝试其他版本的SDK,请直接将这两个文件替换。



  2. 到 Project Structure --> app --> Dependencies 检查Slamware SDK是否添加到工程中。


  3. 将以下代码段的"10.0.130.71"修改为底盘的IP地址,默认情况下为192.168.11.1,当WIFI处于Station模式下请将PC与底盘使用Ethenet连接后查看。方法说明:AbstractSlamwarePlatform connect(String host, int port),其中host为底盘IP,port为网络端口号,返回值为底盘的实例对象。

    Code Block
    languagejava
    themeMidnight
    /* 与底盘连接 */
    AbstractSlamwarePlatform robotPlatform = DeviceManager.connect("10.0.130.71", 1445);


  4. Android设备连接底盘发射出的WIFI或连入底盘的同一网络,按下shift + F10 运行

    Info

    本例程仅仅用作最简单SDK类和方法的演示,故没有设计Android界面

    机器人底盘在三种不同速度下的运动状况可通过RoboStudio观察到


  5. 机器人底盘在回充过程的运动状况可通过RoboStudio观察到
    Multimedia
    nameSpeedRegulation.mp4

代码描述




...


代码描述

  • 调用goHome()接口来进行自动回充,如果没有找到充电桩或者充电失败,可以考虑重复调用此接口尝试再次对接。


    Info

    一般来说,只有重复三次调用goHome()后对接仍然失败时,才可判定此次充电对接失败。在三次尝试调用过程中,任何一次完成了对接,仍可判定充电对接成功。



    调节底盘运动速度

    Code Block
    languagejava
    themeMidnight
    title自动回充
    linenumberstrue
    /* 与底盘连接 */
    final AbstractSlamwarePlatform robotPlatform = DeviceManager.connect("10.0.130.71", 1445);
    
    IMoveAction action;
    
    
    try {
    	action = robotPlatform.getCurrentAction();
    } catch (ConnectionFailExceptionint e) {
    
    }
    
    Location location1 = new Location(0, 1, 0);
    Location location2 = new Location(1, 0, 0);
    Location location3 = new Location(0, 0, 0);
    
    while (true) {
        trygoHomeCount = 0;
    
        do {
            action = robotPlatform.moveTo(location1, false, truegoHome();
            if (action.getStatus() == ActionStatus.ERROR) {
            Log.d(TAG, "Acvtion Faild, " + action.getReason());
            }
            robotPlatform.setSystemParameter(SYSPARAM_ROBOT_SPEED, SYSVAL_ROBOT_SPEED_HIGH);
            Log.d(TAG, "Robot is moving to " + "(" + location1.getX() + ", " + location1.getY() + ")");
            action.waitUntilDone();
    
            action = robotPlatform.moveTo(location2, false, true);
            if (action.getStatus() == ActionStatus.ERRORFINISHED) {
                 Log.d(TAG, "Acvtion Faild, " + action.getReason())break;
            }
            robotPlatform.setSystemParameter(SYSPARAM_ROBOT_SPEED, SYSVAL_ROBOT_SPEED_LOW);
    		Log.d(TAG, "Robotgo ishome moving to "charge + "(" + location2.getX() + ", times count: " + location2.getY() + ")"goHomeCount);
            action.waitUntilDone();
    
            action = robotPlatform.moveTo(location3, false, true);
            if (action.getStatus() == ActionStatus.ERROR) {
                Log.d(TAG, "Acvtion Faild, " + action.getReason())goHomeCount++;
            }
            robotPlatform.setSystemParameter(SYSPARAM_ROBOT_SPEED, SYSVAL_ROBOT_SPEED_MEDIUM);
    		Log.d(TAG, "Robot is moving to " + "(" + location3.getX() + ", " + location3.getY() + ")");
            action.waitUntilDone();while (goHomeCount <= maxGoHomeTimes);
    
    } catch (ConnectionTimeOutException e) {
    	/* Exception Handle code*/
    	....	   
    }