Versions Compared

Key

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

在用户下发目标点到机器人地盘后,slamware首先会根据地图和目标点进行路径规划,规划好后底盘才会根据规划好的路径产生相应的运动,有的用户需要获得路径规划是否成功的状态,这里对进行介绍在用户下发运动指令到机器人底盘后,slamware首先会根据地图和目标点的情况进行路径规划,规划好后底盘才会根据规划出的路径产生相应的运动,有的用户需要获得路径规划是否成功的状态,这里对获取方式进行介绍。

测试代码:TestCode.java


...

在Android SDK中,与底盘运动相关的moveTo、moveBy、rotate、rotateTo、goHome、startSweep、sweepSpot、recoverLocalization等方法都会返回一个IMoveAction类(或其子类)的对象,该对象中记录了此次运动相关的信息,这里通过action.getRemainingPath().getPoints().isEmpty()判断剩下的路径中点目标点是否为空来间接判断剩下的路径中路径点是否为空来间接判断路径规划是否成功。


Code Block
languagejava
themeMidnight
title参考代码
linenumberstrue
try {
    IMoveAction action;
    MoveOption moveOption = new MoveOption();
    
    moveOption.setPrecise(true);
    moveOption.setMilestone(true);
    
    Log.d(TAG, "==============================================");
    Log.d(TAG, "Move To");
    action = robotPlatform.moveTo(new Location(1, -3, 0), moveOption, 0);
    
    while(action.getRemainingPath().getPoints().isEmpty()) {
        Log.d(TAG, "remaining path is null");
        sleep(1);
    }
    
    Log.d(TAG, "create path successful ...");
    
    Vector<Location> vactor = action.getRemainingPath().getPoints();
    Log.d(TAG, "vactor.size()    = " + vactor.size());
    Log.d(TAG, "vactor.isEmpty() = " + vactor.isEmpty());
    Log.d(TAG, "==============================================");
    
    action.waitUntilDone();
    if (action.getStatus() == ActionStatus.ERROR) {
    Log.d(TAG, "Action Failed: " + action.getReason());
    }

} catch (ConnectionTimeOutException e) {
	/* Exception Handle code*/
	...
}



...


测试现象

在底盘周围放置障碍物,使其无法规划出一条能够到达目标点的路径,地图、障碍物、目标点的情况见下图

Image RemovedImage Added

运行程序Logcat输出如下运行程序Logcat输出如下,底盘无法规划出路径,也不会运动



撤除底盘旁边的障碍物,再次运行测试程序,底盘在间隔一段时间后规划出路径,并沿着路径中的7个点逐点导航到目标点

...