Versions Compared

Key

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

本页介绍了 MoveToSpot 的用法, 主要包括使用moveBy接口命令底盘向某一方向行进一小段时间的代码演示。  包含使用moveTo方法实现导航模式下和轨道模式下的运动到目标点的过程。


...

本页内容

...

  • 软件平台

    • 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 文件。


  • 硬件平台

          (以下任选其一)

...

  1. 打开MoveToSpot工程,检查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 运行,Android手机端的显示界面如下运行
    Image Removed

    Info

    本例程仅仅用作最简单SDK类的演示,故没有考虑界面美观,屏幕适配等问题本例程仅仅用作最简单SDK类和方法的演示,故没有设计Android界面


  5. 在手机界面上点击各个按钮,没点击一次底盘将会前进一小段距离,其运动状态可在Robostuio上观察到
    Multimedia
    namemoveByMoveToSpot.mp4



...


代码描述

  • IMvoeAction moveTo(Location location, boolean appending),命令底盘向目标点运动,location参数是机器人将要到达的点,appending用于决定SLAMWARE是清除当前任务建立新的点还是将新的点添加到已有的节点列表中。

  • 机器人导航按照目标点(0, 0, 0)-->(0, 1, 0) -->(1, 0, 0)-->(0, 0, 0)的顺序依次运动到点,期间遇到障碍物会自主避障。然后添加从(0, 0, 0)到(2, 1, 0)的虚拟轨道,机器人先上虚拟轨道,然后运动到目标点(1.2f, 0, 0)moveBy(MoveDirection var1),命令底盘向var1方向行进一段时间


    Code Block
    languagejava
    themeMidnight
    linenumberstrue
        /* 与底盘连接 */
    final    AbstractSlamwarePlatform robotPlatform = DeviceManager.connect("10.0.130.71", 1445);
    
    
    	/* 各个按键点击响应函数 */try {
        public void onClick(View view) {
    MoveOption moveOption =      try{new MoveOption();
    
                switch (view.getId()) {
    moveOption.setPrecise(true);
                    case R.id.button_stop:moveOption.setMilestone(true);
    
            Location location1 =          if(moveAction != null) {new Location(0, 1, 0);
            Location location2 = new Location(1,            moveAction.cancel(0, 0);
            Location location3 = new Location(0,        }0, 0);
    
            action = robotPlatform.moveTo(location3,          breakmoveOption, 0);
                    case R.id.button_forward:action.waitUntilDone();
    
            action = robotPlatform.moveTo(location1, moveOption, 0);
            moveAction = robotPlatform.moveBy(MoveDirection.FORWARDaction.waitUntilDone();
    
            action = robotPlatform.moveTo(location2,          breakmoveOption, 0);
                    case R.id.button_backward:action.waitUntilDone();
    
            action = robotPlatform.moveTo(location3, moveOption, 0);
            moveAction = robotPlatform.moveBy(MoveDirection.BACKWARDaction.waitUntilDone();
    
            Log.d(TAG, "========== Virtual          breakTrack ==========");
            /* draw a virtual track from (0, 0) case R.id.button_turn_left:
                 to (2, 0), then move to (0, 0) via virtual track */
           moveAction = robotPlatform.moveBy(MoveDirection.TURN_LEFT);
           addLine(ArtifactUsageVirtualTrack, new Line(new PointF(0, 0), new PointF(2, 1)));
    
                 breakmoveOption.setKeyPoints(true);
                    case R.id.button_turn_right:moveOption.setPrecise(true);
                        moveAction action = robotPlatform.moveBy(MoveDirection.TURN_RIGHT);
        moveTo(new Location(1.2f, 0, 0), moveOption, 0);
                    breakaction.waitUntilDone();
            if (action.getStatus() ==      default:ActionStatus.ERROR) {
                Log.d(TAG, "Action Failed: "     break+ action.getReason());
                }
            } catch (RequestFailExceptionConnectionTimeOutException e) {
           		/* Exception Handle code*/
    			....    	     
            }
        }