本页介绍了 MoveToSpot 的用法, 包含使用moveTo方法实现导航模式下和轨道模式下的运动到目标点的过程。
本页内容
Sample Code:
使用不同版本的Android Studio可能会带来编译异常,请自行下载相关库和修改build.gradle配置文件,本例程基于Slamware Android SDK 2.6.0 进行开发,若想尝试更高的SDK版本,请直接替换工程中的 slamware_sdk_android.jar 和 librpsdk.so 文件。 |
(以下任选其一)
到 Project Structure --> app --> Dependencies 检查Slamware SDK是否添加到工程中。
将以下代码段的"10.0.130.71"修改为底盘的IP地址,默认情况下为192.168.11.1,当WIFI处于Station模式下请将PC与底盘使用Ethenet连接后查看。方法说明:AbstractSlamwarePlatform connect(String host, int port),其中host为底盘IP,port为网络端口号,返回值为底盘的实例对象。
/* 与底盘连接 */ AbstractSlamwarePlatform robotPlatform = DeviceManager.connect("10.0.130.71", 1445); |
Android设备连接底盘发射出的WIFI或连入底盘的同一网络,按下shift + F10 运行
本例程仅仅用作最简单SDK类和方法的演示,故没有设计Android界面 |
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)
/* 与底盘连接 */ final AbstractSlamwarePlatform robotPlatform = DeviceManager.connect("10.0.130.71", 1445); try { MoveOption moveOption = new MoveOption(); moveOption.setPrecise(true); moveOption.setMilestone(true); Location location1 = new Location(0, 1, 0); Location location2 = new Location(1, 0, 0); Location location3 = new Location(0, 0, 0); action = robotPlatform.moveTo(location3, moveOption, 0); action.waitUntilDone(); action = robotPlatform.moveTo(location1, moveOption, 0); action.waitUntilDone(); action = robotPlatform.moveTo(location2, moveOption, 0); action.waitUntilDone(); action = robotPlatform.moveTo(location3, moveOption, 0); action.waitUntilDone(); Log.d(TAG, "========== Virtual Track =========="); /* draw a virtual track from (0, 0) to (2, 0), then move to (0, 0) via virtual track */ robotPlatform.addLine(ArtifactUsageVirtualTrack, new Line(new PointF(0, 0), new PointF(2, 1))); moveOption.setKeyPoints(true); moveOption.setPrecise(true); action = robotPlatform.moveTo(new Location(1.2f, 0, 0), moveOption, 0); action.waitUntilDone(); if (action.getStatus() == ActionStatus.ERROR) { Log.d(TAG, "Action Failed: " + action.getReason()); } } catch (ConnectionTimeOutException e) { /* Exception Handle code*/ .... } |