У меня возникают настоящие проблемы, пытаясь выяснить, на какую ось воздействовали, используя обнаружение столкновения и MAC SDK. Кажется, я не могу получить какие-либо данные, которые имеют смысл. Я включил образец keydrive с обнаружением столкновения, чтобы попытаться понять данные о столкновении, которые возвращаются. Кажется, что он способен обнаруживать коллизии ok, но значения возвратной мощности для оси x и y не кажутся последовательными. Используя этот маленький кусочек кода в моем методе асинхронного:Обнаружение оси для столкновений Sphero
if ([asyncData isKindOfClass:[RKCollisionDetectedAsyncData class]]) {
RKCollisionDetectedAsyncData *collisionData = (RKCollisionDetectedAsyncData *)asyncData;
xPower = collisionData.impactPower.x;
yPower = collisionData.impactPower.y;
NSLog(@"X Power: %u",collisionData.impactPower.x);
NSLog(@"Y Power: %u",collisionData.impactPower.y);
[RKRollCommand sendStop];
}
У меня есть выход для у соударений:
2014-01-17 17:16:43.734 KeyDrive[16537:303] X Power: 15
2014-01-17 17:16:43.734 KeyDrive[16537:303] Y Power: 113
2014-01-17 17:16:47.360 KeyDrive[16537:303] X Power: 11
2014-01-17 17:16:47.360 KeyDrive[16537:303] Y Power: 130
и для й столкновений:
2014-01-17 17:17:36.921 KeyDrive[16542:303] X Power: 25
2014-01-17 17:17:36.922 KeyDrive[16542:303] Y Power: 130
2014-01-17 17:17:39.862 KeyDrive[16542:303] X Power: 18
2014-01-17 17:17:39.868 KeyDrive[16542:303] Y Power: 116
то у меня есть все мои пороговые значения, установленные в настоящее время:
uint8_t xThreshold = 100;
uint8_t yThreshold = 100;
uint8_t xSpeedThreshold = 100;
uint8_t ySpeedThreshold = 100;
float deadZone = 1.0f;
, но я использовал много разных вариантов, чтобы получить какую-то последовательность без везения. У кого-нибудь есть совет?
EDIT:
Так я опробовал новое решение. Моя тестовая среда была подавлена, чтобы попытаться укрепить мои выводы. Я держал сферо на месте, не двигаясь, и ударил его по разным осям. Хотя результаты были немного более обнадеживающими, они все еще не слишком надежны. см. мои результаты ниже. Я делал множественные удары по каждой оси с различными результатами, особенно на оси y. Может быть, мой акселерометр оси y - ошибка?
X+
**Impact** **Accel**
X Y X Y
34 8 0.88208 0.218262
55 3 1.381592 0.092529
33 1 0.861572 -0.046875
58 3 1.376953 0.035645
68 3 1.380371 0.094238
X-
**Impact** **Accel**
X Y X Y
57 3 -1.351074 0.026123
38 2 -0.91748 0.050781
57 0 -1.228271 0.025391
59 5 -1.395264 0.178711
40 2 -0.910156 0.005615
Y+
**Impact** **Accel**
X Y X Y
5 31 0.436523 0.638672
6 31 -0.13623 0.390869
18 40 0.39502 0.661621
26 35 0.647461 0.538818
14 46 0.154297 0.770508
Y-
**Impact** **Accel**
X Y X Y
6 32 0.549805 -0.579834
21 30 0.692383 -0.614014
5 31 0.149414 -0.508301
24 30 0.449463 -0.413574
9 31 0.68457 -0.682861
Не знаю, почему я этого не видел. Я сделал ужасное предположение, что акселерометры были относительно хвостового света. Спасибо за головы. Я пытаюсь заставить sphero отскочить в физической коробке. Что-нибудь, что вы могли бы предложить, чтобы сделать результат лучше в отношении возможностей sphero? – tinkerer
Если вы установите заголовок на какое-то известное значение, затем отследите его изменения, вы должны увидеть, в каком направлении Sphero думает, что он обращен, а затем отрегулируйте оси против этого угла. Кроме того, если ответ был верным для вас, пожалуйста, помогите мне и примите его. –
спасибо за продолжение. Поскольку я опубликовал, я был очень занят, и мне еще нужно попробовать. У меня должно быть свободное время в ближайшие несколько недель, и я сообщу вам, действительно ли это было проблемой. Благодаря! – tinkerer