2014-01-17 82 views
0

我遇到了麻煩,試圖通過碰撞檢測和MAC SDK找出哪個軸受到了影響。我似乎無法得到任何有意義的數據。我已經將示例keydrive與碰撞檢測集成起來,試圖理解返回的碰撞數據。似乎可以檢測到碰撞,但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]; 
} 

我對Y的碰撞輸出:

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 

和X碰撞:

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; 

但我使用了許多不同的變體來獲得某種一致性,但沒有運氣。任何人有任何建議?

編輯:

所以我試用了新的解決方案。我的測試環境陷入困境,試圖鞏固我的發現。我將球體保持不動,並將其擊中不同的軸線。雖然結果有點更有希望,但它們仍然不太可靠。請參閱下面的結果。我在每個軸上做了多次不同的結果,特別是在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 

回答

1

我認爲你看到這些數字的原因是由於你正在使用的例子。我讀到您正在使用關鍵驅動器示例,並通過修改來創建這些結果。問題在於,當你按下一個鍵時,TURNS球就會按照指示的方向運動。因此,就其加速度計而言,球總是以相同的方向被擊中,從而在那裏產生這些結果。現在,如果你想看到不同的軸,你需要開發出一種方式,以便在垂直於尾燈的地方對球的一側產生影響,這通常不會在移動時實現(除非你從邊開車邊)。

+0

不知道爲什麼我沒看到這個。我做了一個可怕的假設,即加速度計是關於尾燈的。感謝您的高舉。我正在努力讓球體在一個物理盒子裏反彈。任何你能提出的建議都會使sphero的功能更好? – tinkerer

+0

如果您將標題設置爲某個已知值,然後追蹤它的變化,您應該能夠看到Sphero認爲它正面對什麼方向,然後根據此角度調整軸。 另外,如果答案對你是正確的,請幫助我並接受它。 –

+0

感謝您的跟進。自從我發佈以來,我一直很忙,還沒有嘗試過。我應該在接下來的幾周裏有空閒時間,如果這實際上是問題,我會告訴你。謝謝! – tinkerer