Я начинаю работать с Sphero и Android, и я просматриваю примеры в SDK Sphero. Я успешно объединил примеры проектов ButtonDrive и Collisions, поэтому я fx. может заставить Sphero броситься в направлении и остановиться, когда он врывается во что-то. Но код для настройки асинхронного прослушивания данных меня озадачивает, и я не могу добавить код, необходимый для использования функций Locator, таких как getLocatorData. Может кто-нибудь дать мне код, мне нужно реализовать, так что я могу назвать «collisionData.hasImpactXAxis()» оба метода и «locatorData.getPositionX()»Получение данных локатора и столкновений в одно и то же время
1
A
ответ
0
Смотрите образец локатора на https://github.com/orbotix/Sphero-Android-SDK для получения более подробной информации, но общий практика является ...
private CollisionDetectedAsyncData collisionData;
private LocatorData lastLocation;
// setup general AsyncDataListener
private final DeviceMessenger.AsyncDataListener mDataListener = new DeviceMessenger.AsyncDataListener() {
@Override
public void onDataReceived(DeviceAsyncData data) {
if(data instanceof DeviceSensorsAsyncData){
//get the frames in the response
List<DeviceSensorsData> data_list = ((DeviceSensorsAsyncData)data).getAsyncData();
if(data_list != null){
// Iterate over each frame, however we set data streaming as only one frame
for(DeviceSensorsData datum : data_list){
LocatorData locatorData = datum.getLocatorData();
if(locatorData != null) {
lastLocation = locatorData;
}
}
}
}
if (data instanceof CollisionDetectedAsyncData) {
collisionData = (CollisionDetectedAsyncData) data;
}
// handle new data from collisions or locations
}
};
private configureStreamingAndCollisions(){
// hook up Locator
final long mask = SetDataStreamingCommand.DATA_STREAMING_MASK_LOCATOR_ALL;
final int divisor = 4; //100Hz
final int packet_frames = 1;
final int response_count = 0;
SetDataStreamingCommand.sendCommand((Robot)mRobot, divisor, packet_frames, mask, response_count);
DeviceMessenger.getInstance().addAsyncDataListener((Robot)mRobot, mDataListener);
// hook up Collision Listener
DeviceMessenger.getInstance().addAsyncDataListener((Robot)mRobot,mCollisionListener);
ConfigureCollisionDetectionCommand.sendCommand(mRobot, ConfigureCollisionDetectionCommand.DEFAULT_DETECTION_METHOD,
45, 45, 100, 100, 100);
}
Обратите внимание, что вам нужно переменный класс для отслеживания lastLocation или lastCollision ...