SonariProbleem: Difference between revisions

From Intelligent Materials and Systems Lab

(Created page with '==Filtreeritud väärtused== Endless walk programmi töö ei olnud testimisel ootuspärane, kui robot oleks pidanud kõndima seni kuni sonariga tuvastatakse takistus, siis tulem…')
 
No edit summary
Line 33: Line 33:
Järgnevas katses liigutati NAOd mööda tuba ringi viies teda seintest lähemale/kaugemale kokku võeti 100 lugemit igale sonari loetud väärtusele järgneb filtri läbinud väärtus.
Järgnevas katses liigutati NAOd mööda tuba ringi viies teda seintest lähemale/kaugemale kokku võeti 100 lugemit igale sonari loetud väärtusele järgneb filtri läbinud väärtus.


Väljundi stabiilsuse ning filtreerimise testprogramm: [File:?]
Väljundi stabiilsuse ning filtreerimise testprogramm:


Koodis:
<pre>
#!/usr/bin/python


  mem.getData("Device/SubDeviceList/US/Left/Sensor/Value", 0) // 0 tähendab uusima väärtuse lugemist, otse sonarist saadud väärtus
  import sys
  mem.getData("SonarLeftDetected") // Läbinud filtri
  import time
import numpy
from naoqi import ALProxy


Väljundifail: [File:?]
IP = sys.argv[1] // Käsurea argumendid
SAMPLES = sys.argv[2]
PORT = 9559
 
sonar=ALProxy("ALSonar", IP, PORT)
mem=ALProxy("ALMemory", IP, PORT)
 
sonar.subscribe("SonariTest", 500, 1.0) // Uuenda 500ms tagant, täpsus 1.0
 
leftValues=[]
rightValues=[]
 
for i in range(0, int(SAMPLES)):
time.sleep(1) // Oota 1 sekund
left = mem.getData("Device/SubDeviceList/US/Left/Sensor/Value", 0) // 0 tähendab uusima väärtuse lugemist, otse sonarist saadud väärtus
leftD = mem.getData("SonarLeftDetected") // Läbinud filtri
right = mem.getData("Device/SubDeviceList/US/Right/Sensor/Value", 0)
rightD = mem.getData("SonarRightDetected")
leftValues.append(float(left))
rightValues.append(float(right))
print "left:",left,"right:",right
print "filter left:",leftD,"right:",rightD
 
print "Mean left:",numpy.mean(leftValues)
print "Mean right:",numpy.mean(rightValues)
print "Standard deviation left:", numpy.std(leftValues)
print "Standard deviation right:", numpy.std(rightValues)
 
sonar.unsubscribe("SonariTest")
</pre>
 
Väljundifail: [[File:NAO_sonarTest_output.txt]]


Väljundis:
Väljundis:

Revision as of 18:42, 5 February 2011

Filtreeritud väärtused

Endless walk programmi töö ei olnud testimisel ootuspärane, kui robot oleks pidanud kõndima seni kuni sonariga tuvastatakse takistus, siis tulemus oli rohkem paigal tammumine, robot astus väikeseid samme suvalistes suundades. Choregraphe ploki tööd jälgides võis näha kuidas pidevalt tekitati sündmusi "SonarRightDetected" või "SonarLeftDetected" olenemata, sellest kas roboti ees oli objekt. Sellest tuli välja ka üks Choregraphega seotud viga, signaalide liikumisi skeemil näidati ainult siis kui programm käivitati olles sonari alamprogrammi ploki lahti võtnud, kõndimise programmi peaskeemilt alustades ja siis sonarit valides signaalide liikumist ekraanil ei kuvatud.

Samalaadse tulemuse andis ka Pythoni skript. Kui käivitasin näiteskript ja suunasin sonarid lakke olid loetud väärtused:

>>> print memory.getData("SonarMiddleDetected")
0.264999985695
>>> print memory.getData("SonarMiddleDetected")
0.264999985695
>>> print memory.getData("SonarRightDetected")
0.239999994636
>>> print memory.getData("SonarRightDetected")
0.239999994636

Tagastatud ujukoma arv märgib suurima tõenäosusega tuvastatud kaugust, kuid see püsib stabiilselt vahemaal vastavalt 26, 24 cm (?). Kui suunasin sonarid takistusele, siis olid tulemused:

>>> print memory.getData("SonarRightDetected")
0.569999992847
>>> print memory.getData("SonarRightDetected")
0.680000007153
>>> print memory.getData("SonarRightDetected")
0.680000007153
>>> print memory.getData("SonarRightDetected")
0.579999983311

Ehk tegelikult suudetakse midagi ikka tuvastada. Kui lugeda näiteks 30 cm alapiiriks ja seda koodis arvestada võib kasutamine isegi võimalik olla (signaali stabiilsust eriti ei testinud), kuid kuna tarkvaraga kaasa tulnud programm seda ei tee ning spetsifikatsioon nii ei märgi võib olla tegemist riistvaralise probleemiga. Võimalik, et sonarite kasutamine on kuidagi sünkroonist väljas ja nad segavad üksteist.

Ülaltoodud "SonarRightDetected" väärtused on eelnevalt läbinud filtri (töötluse) ning ei kajasta otseselt seda, mida sonar mõõtis.

Tegelike sonari väärtuste ning filtreeritud väärtuste võrdlus

Järgnevas katses liigutati NAOd mööda tuba ringi viies teda seintest lähemale/kaugemale kokku võeti 100 lugemit igale sonari loetud väärtusele järgneb filtri läbinud väärtus.

Väljundi stabiilsuse ning filtreerimise testprogramm:

 #!/usr/bin/python

 import sys
 import time
 import numpy
 from naoqi import ALProxy

 IP = sys.argv[1] // Käsurea argumendid
 SAMPLES = sys.argv[2]
 PORT = 9559

 sonar=ALProxy("ALSonar", IP, PORT)
 mem=ALProxy("ALMemory", IP, PORT)

 sonar.subscribe("SonariTest", 500, 1.0) // Uuenda 500ms tagant, täpsus 1.0

 leftValues=[]
 rightValues=[]

 for i in range(0, int(SAMPLES)):
	time.sleep(1) // Oota 1 sekund
	left = mem.getData("Device/SubDeviceList/US/Left/Sensor/Value", 0) // 0 tähendab uusima väärtuse lugemist, otse sonarist saadud väärtus 
	leftD = mem.getData("SonarLeftDetected") // Läbinud filtri
	right = mem.getData("Device/SubDeviceList/US/Right/Sensor/Value", 0)
	rightD = mem.getData("SonarRightDetected")
	leftValues.append(float(left))
	rightValues.append(float(right))
	print "left:",left,"right:",right
	print "filter left:",leftD,"right:",rightD

 print "Mean left:",numpy.mean(leftValues)
 print "Mean right:",numpy.mean(rightValues)
 print "Standard deviation left:", numpy.std(leftValues)
 print "Standard deviation right:", numpy.std(rightValues)

 sonar.unsubscribe("SonariTest")

Väljundifail: File:NAO sonarTest output.txt

Väljundis:

left: 1.66999995708 right: 1.39999997616
filter left: 0.389999985695 right: 0.699999988079
...
left: 1.87999999523 right: 1.40999996662
filter left: 0.439999997616 right: 0.649999976158
...
left: 0.310000002384 right: 0.299999982119
filter left: 0.34999999404 right: 0.340000003576
...
left: 0.289999991655 right: 0.299999982119
filter left: 0.34999999404 right: 0.340000003576

Väljundist on väga suur erinevus filtreermata ning filtreeritud väärtuste vahel, samuti eksisteerib väljund alati, isegi siis kui lähemalasetsevad objektid on kaugemal kui 1,5m nagu on dokumentatsiooni järgi suurim tuvastuskaugus. Katse lõpus arvutatud keskmine ning standardhälve ei oma selle katse kontekstis erilist tähendust kuna sonarid oli liikumises.

Stabiilsustestid

Suunatud väga lähedalt vastu seina. 30 mõõtmist.

kasutaja@Huginn:~/Desktop$ python NAO_sonarTest.py 172.19.3.202 30
INF: Registering module : ALFileManager
INF: Registering module : ALNetwork
INF: Connection established between 172.19.3.102:54010 and 172.19.3.202:9559
left: 0.239999994636 right: 0.229999989271
left: 0.239999994636 right: 0.239999994636
left: 0.239999994636 right: 0.239999994636
...
left: 0.239999994636 right: 0.239999994636
left: 0.239999994636 right: 0.229999989271
left: 0.239999994636 right: 0.239999994636
Mean left: 0.239333327611
Mean right: 0.239333327611
Standard deviation left: 0.00249443959597
Standard deviation right: 0.00359011179731

Väljund näitab, et jõutud on minimaalse tuvastuskauguseni, kus kauguse täpne mõõtmine pole enam võimalik, kui takistuse olemasolu võib järeldada. Väljund väga stabiilne.

Suunatud ~30cm kauguselt vastu seina. 30 mõõtmist.

kasutaja@Huginn:~/Desktop$ python NAO_sonarTest.py 172.19.3.202 30
INF: Registering module : ALFileManager
INF: Registering module : ALNetwork
INF: Connection established between 172.19.3.102:54010 and 172.19.3.202:9559
left: 0.439999997616 right: 0.439999997616
left: 0.42999997735 right: 0.439999997616
left: 0.42999997735 right: 0.439999997616
left: 0.42999997735 right: 0.439999997616
...
left: 0.439999997616 right: 0.42999997735
left: 0.439999997616 right: 0.439999997616
left: 0.439999997616 right: 0.42999997735
left: 0.449999988079 right: 0.439999997616
left: 0.449999988079 right: 0.439999997616
Mean left: 0.438333324591
Mean right: 0.436999990543
Standard deviation left: 0.00582142222363
Standard deviation right: 0.00525991948363

Keskmistel mõõtmiskaugustel taaskord küllaltki stabiilne.

Suunatud vabasse ruumi. Takistused üle kahe meetri kaugusel. 30 mõõtmist.

kasutaja@Huginn:~/Desktop$ python NAO_sonarTest.py 172.19.3.202 30
INF: Registering module : ALFileManager
INF: Registering module : ALNetwork
INF: Connection established between 172.19.3.102:54010 and 172.19.3.202:9559
left: 1.63999998569 right: 1.62000000477
left: 1.63999998569 right: 1.62000000477
left: 1.63999998569 right: 1.62999999523
left: 1.62999999523 right: 1.40999996662
left: 1.64999997616 right: 1.26999998093
left: 1.64999997616 right: 1.78999996185
left: 1.64999997616 right: 1.55999994278
left: 1.64999997616 right: 1.63999998569
left: 1.65999996662 right: 1.65999996662
...
left: 1.64999997616 right: 1.81999993324
left: 1.64999997616 right: 1.83999991417
left: 1.65999996662 right: 1.86000001431
left: 1.84999990463 right: 1.87999999523
left: 1.66999995708 right: 1.84999990463
left: 1.65999996662 right: 1.87000000477
Mean left: 1.65466664235
Mean right: 1.67933330536
Standard deviation left: 0.0387928804152
Standard deviation right: 0.149620252664

Ei tohiks sellistel kaugustel takistusi tuvastada, kuid testi läbiviimiseks valitud ruumis võib olla tegimist kajaprobleemidega. Rahuldav väljundi stabiilsus.