Jump to content

Recommended Posts

Geschrieben

hallo liebe leute -

 

wie ich sehe geht das einmessen eines neuen sensors beim nicht mehr so locker wie beim v1

 

ich habe die kurve bzw. die interpolation : wie bekomme ich die in die firmware rein ?????

 

kann leider nicht nur mit dem value-callback alleine arbeiten -

BRAUCHE die interne umrechnung um auch den distance-callback nutzen zu können ....

 

lgw

 

danke & lg

Geschrieben

ZUSATZINFO:

 

make_lookup_table.py stürzt mit einem value-error ab ...

 

Traceback (most recent call last):

  File "make_lookup_table.py", line 183, in <module>

    sample_interpolate(x, y)

  File "make_lookup_table.py", line 130, in sample_interpolate

    py = y[0]

IndexError: list assignment index out of range

 

ZUSATZINFO2 :

 

meine daten sind sehr wohl interpolierbar :

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from __future__ import print_function
import sys
reload(sys)
sys.setdefaultencoding('utf8')

import numpy             as np
import scipy.interpolate as ip

import matplotlib.pyplot as plt

if __name__ == "__main__":

  ##### 
  x_raw=np.array([
     1754192 , 1557138 , 1421474 , 1318285 , 1237063 , 1179487 , 1120884 , 1083090 , 1046113 , 1009308 ,
     986943 , 965981 , 946221 , 924989 , 908264 , 894831 , 881177 , 870684 , 860598 , 853558 ,
     846379 , 840214 , 835445 , 831586 , 826256 ], dtype=np.int64)
  y_val=np.linspace(80.0,560.0,num=25,endpoint=True,dtype=np.float)
  #
  plt.plot(x_raw,y_val,'x')

  x_val=np.linspace(1754192,826256,num=3000,endpoint=True,dtype=np.int64)

  #fraw= ip.interp1d(x_raw,y_val,kind='cubic')
  #
  #plt.plot(x_val,fraw(x_val),'-')

  frep=ip.splrep(np.flip(x_raw,0),np.flip(y_val,0),k=3,s=50)
  #
  plt.plot(x_val,ip.splev(x_val,frep),'-')

  plt.show()

2018-12-18_16-07.png.dd92409e567408dd733243e8e176651a.png

Geschrieben

Das Distance IR Bricklet 2.0 hat genug Flash um die Kalibrierung für alle Sensoren die wir anbieten zu speichern, daher sollte es nicht mehr notwendig sein die Kalibrierung zu ändern.

 

Wenn du eine eigene Kalibrierung benötigst müsstest du die in deinem Programm durchführen.

Geschrieben

sehr aufschlussreich !

 

ich habe oben beschrieben, dass die utility "make_lookup_table.py" die in den sourcen für das distance-ir-v2 ist, aus unerfindlichen gründen die berechnung der spline für folgende daten als input-datei NICHT SCHAFFT :

 

#Count 12000 @DIST 560cm @ms 50 @Tchip 24°C @Tenv 20.00°C
#Min 803910 Max 851955 Means : A 826256 H 826201 G 826229
560: 826256
# Count 12000 @DIST 540cm @ms 50 @Tchip 25°C @Tenv 20.00°C
# Min 803930 Max 852149 Means : A 831586 H 831536 G 831561
540: 831586
# Count 12000 @DIST 520cm @ms 50 @Tchip 24°C @Tenv 20.00°C
# Min 804138 Max 863744 Means : A 835445 H 835398 G 835421
520: 835445
# Count 12000 @DIST 500cm @ms 50 @Tchip 25°C @Tenv 20.00°C
# Min 804128 Max 863835 Means : A 840214 H 840168 G 840191
500: 840214
# Count 12000 @DIST 480cm @ms 50 @Tchip 24°C @Tenv 20.00°C
# Min 827618 Max 864037 Means : A 846379 H 846338 G 846358
480: 846379
# Count 12000 @DIST 460cm @ms 50 @Tchip 34°C @Tenv 28.81°C
# Min 825815 Max 874097 Means : A 853558 H 853523 G 853540
460: 853558
# Count 12000 @DIST 440cm @ms 50 @Tchip 28°C @Tenv 24.18°C
# Min 844419 Max 880757 Means : A 860598 H 860568 G 860583
440: 860598
# Count 12000 @DIST 420cm @ms 50 @Tchip 27°C @Tenv 23.43°C
# Min 857875 Max 882873 Means : A 870684 H 870668 G 870676
420: 870684
# Count 12000 @DIST 400cm @ms 50 @Tchip 27°C @Tenv 22.93°C
# Min 870716 Max 895539 Means : A 881177 H 881158 G 881168
400: 881177
# Count 12000 @DIST 380cm @ms 50 @Tchip 26°C @Tenv 22.62°C
# Min 882941 Max 908062 Means : A 894831 H 894820 G 894826
380: 894831
# Count 12000 @DIST 360cm @ms 50 @Tchip 26°C @Tenv 22.37°C
# Min 895591 Max 920345 Means : A 908264 H 908257 G 908260
360: 908264
# Count 12000 @DIST 340cm @ms 50 @Tchip 26°C @Tenv 22.06°C
# Min 919955 Max 932908 Means : A 924989 H 924961 G 924975
340: 924989
# Count 12000 @DIST 320cm @ms 50 @Tchip 26°C @Tenv 21.93°C
# Min 932206 Max 1228906 Means : A 946221 H 945878 G 946038
320: 946221
# Count 12000 @DIST 300cm @ms 50 @Tchip 28°C @Tenv 25.31°C
# Min 954186 Max 974734 Means : A 965981 H 965980 G 965980
300: 965981
# Count 12000 @DIST 280cm @ms 50 @Tchip 35°C @Tenv 34.31°C
# Min 973083 Max 989785 Means : A 986943 H 986940 G 986941
280: 986943
# Count 12000 @DIST 260cm @ms 50 @Tchip 35°C @Tenv 30.81°C
# Min 1006046 Max 1019125 Means : A 1009308 H 1009288 G 1009298
260: 1009308
# Count 12000 @DIST 240cm @ms 50 @Tchip 29°C @Tenv 25.00°C
# Min 1033207 Max 1047487 Means : A 1046113 H 1046112 G 1046112
240: 1046113
# Count 12000 @DIST 220cm @ms 50 @Tchip 28°C @Tenv 24.06°C
# Min 1070969 Max 1084288 Means : A 1083090 H 1083089 G 1083089
220: 1083090
# Count 12000 @DIST 200cm @ms 50 @Tchip 28°C @Tenv 25.56°C
# Min 1118136 Max 1131515 Means : A 1120884 H 1120869 G 1120876
200: 1120884
# Count 12000 @DIST 180cm @ms 50 @Tchip 28°C @Tenv 25.56°C
# Min 1167808 Max 1180266 Means : A 1179487 H 1179486 G 1179487
180: 1179487
# Count 12000 @DIST 160cm @ms 50 @Tchip 28°C @Tenv 25.43°C
# Min 1236482 Max 1237768 Means : A 1237063 H 1237063 G 1237063
160: 1237063
# Count 12000 @DIST 140cm @ms 50 @Tchip 28°C @Tenv 25.06°C
# Min 1316087 Max 1331713 Means : A 1318285 H 1318285 G 1318285
140: 1318285
# Count 12000 @DIST 120cm @ms 50 @Tchip 29°C @Tenv 25.50°C
# Min 1420528 Max 1433098 Means : A 1421474 H 1421472 G 1421473
120: 1421474
# Count 12000 @DIST 100cm @ms 50 @Tchip 29°C @Tenv 25.75°C
# Min 1546089 Max 1558090 Means : A 1557138 H 1557137 G 1557138
100: 1557138
# Count 12000 @DIST 80cm @ms 50 @Tchip 29°C @Tenv 26.00°C
# Min 1743383 Max 1755112 Means : A 1754192 H 1754192 G 1754192
80: 1754192

 

d.h also, einfach die lookup.c mit eigenen daten für einen existierenden sensor hacken geht scheinbar nicht -

ich hab keine ahnung was eure spline da zusammenrechnet !!!!!

 

also bitte keine muffeligen antworten, die keine sind -

wenn eure hw was wert sein soll (nicht nur im shop), dann muss sie auch nutzbar sein !!!!

 

ich zitiere aus den docs ".... JEDERZEIT MIT ANDEREN SENSOREN NUTZBAR ..."

 

danke für die zusammenarbeit

 

lg w

 

Geschrieben

Deine Analogwerte haben 21 Bit, das Script geht unkonfiguriert von 12 Bit aus.

 

Bitte einmal die neueste Version pullen, ich hab das jetzt klarer gemacht was zu konfigurieren ist.

 

Für deine Datei:

 

# Filename
filename = 'DEIN_DATEINAME.txt' # '2Y0A41.txt' / '2Y0A21.txt' / '2Y0A02.txt'

# Number of bits of input values
ANALOG_BITS = 21

 

Geschrieben

1)

 

in zeile 135 hat sich noch eine "12" versteckt ...

nehme an, das gehört auch durch "ANALOG_BITS" ersetzt ?

 

2)

 

ich hab das mal gemacht : die daten analog aufbereitet ...

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from __future__ import print_function
from future_builtins import map
import sys
reload(sys)
sys.setdefaultencoding('utf8')

import numpy             as np
import scipy.interpolate as ip
import matplotlib.pyplot as plt
import math

do_plot_sample=False
  
### equidistant DATA SAMPLE : DESCENDING !!!!
#
x_sample=np.array([
  1754192 , 1557138 , 1421474 , 1318285 , 1237063 , 1179487 , 1120884 , 1083090 , 1046113 , 1009308 ,
  986943 , 965981 , 946221 , 924989 , 908264 , 894831 , 881177 , 870684 , 860598 , 853558 ,
  846379 , 840214 , 835445 , 831586 , 826256 ], dtype=np.int64)
#
y_sample=np.linspace(80.0,560.0,num=25,endpoint=True,dtype=np.float)
#
if do_plot_sample:
  plt.plot(x_sample,y_sample,'x')
  x_test=np.linspace(x_sample[0],x_sample[-1], num=3000,endpoint=True, dtype=np.int64)



#------------>
#------------> make_lookup_table.py lines 13, 17, 18
#------------>  
#
ANALOG_BITS = int(math.ceil(math.log(np.amax(x_sample),2))) # log2 of largest input
NUM_VALUES = 512
DIVIDER = (2**ANALOG_BITS)//NUM_VALUES
  


### ### ### SCIPY INTERPOLATION

### interpoaltion method 1 : not as smooth ...
#fraw= ip.interp1d(x_sample,y_sample,kind='cubic')
#if do_plot_sample:
#  plt.plot(x_test,fraw(x_test),'-')
  
### interpolation method 2 : better, easier ... but needs ASCENDING values
frep=ip.splrep(np.flip(x_sample,0),np.flip(y_sample,0), k=3,s=50)




#------------>
#------------> make_lookup_table.py line 126 : px
#------------>
#
px = np.linspace(0,2**ANALOG_BITS, num=NUM_VALUES,endpoint=False, dtype=np.uint64)
#
#------------>
#------------> make_lookup_table.py line 126 ff. : interpolated px -> py clipping @boundaries
#------------>
#
py=np.array([ int(round(y*100.0,0)) for y in ip.splev(px,frep,ext=3) ], dtype=np.uint64)
#
py_valclip_lower=np.flip(px,0)[np.argmax(np.flip(py,0))]
py_valclip_upper=px[np.argmin(py)]

print("\nInterpolating {} sample-points :\nX start {} stop {} step {}\nY {} bits min {} max {} clipped between X={} and X={}".
  format(px.size, np.amin(px),np.amax(px), px[1]-px[0], ANALOG_BITS, np.amin(py), np.amax(py), py_valclip_lower,py_valclip_upper))

print("\n// Custom Sensor Data Record :\n// File 'distance_lookup.c'\n// Replace Record under 'const uint16_t distance_lookup[DISTANCE_SENSOR_NUM][DISTANCE_LOOKUP_SIZE] = { ... }'")
print("\n{ ",", ".join( "{}".format(x) for x in np.nditer(py) )," }\n")

if do_plot_sample:
  plt.plot(x_test,ip.splev(x_test,frep),'-')
else:
  plt.axvline(x=py_valclip_lower)
  plt.axvline(x=py_valclip_upper)
  plt.plot(px,py,'r',linewidth=1)
plt.grid(True)
plt.show()

 

output ist  :

 

Interpolating 512 sample-points :
X start 0 stop 2093056 step 4096
Y 21 bits min 7995 max 56201 clipped between X=823296 and X=1757184


// Custom Sensor Data Record :
// File 'distance_lookup.c'
// Replace Record under 'const uint16_t distance_lookup[DISTANCE_SENSOR_NUM][DISTANCE_LOOKUP_SIZE] = { ... }'

{  56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 56201, 55631, 53685, 51908, 50300, 48857, 47562, 46391, 45320, 44327, 43391, 42505, 41666, 40871, 40119, 39407, 38733, 38093, 37487, 36911, 36363, 35841, 35342, 34864, 34404, 33961, 33531, 33113, 32703, 32300, 31901, 31504, 31110, 30718, 30329, 29944, 29563, 29186, 28815, 28449, 28089, 27735, 27389, 27050, 26719, 26396, 26082, 25777, 25481, 25193, 24913, 24641, 24376, 24119, 23869, 23626, 23389, 23159, 22934, 22715, 22502, 22293, 22090, 21891, 21697, 21507, 21321, 21138, 20958, 20782, 20608, 20437, 20268, 20101, 19936, 19773, 19611, 19451, 19293, 19137, 18982, 18830, 18678, 18529, 18381, 18235, 18090, 17947, 17806, 17666, 17528, 17392, 17257, 17123, 16992, 16861, 16732, 16605, 16479, 16355, 16232, 16111, 15991, 15872, 15755, 15639, 15525, 15412, 15300, 15190, 15081, 14973, 14867, 14762, 14658, 14555, 14454, 14354, 14255, 14158, 14061, 13966, 13872, 13780, 13688, 13597, 13508, 13420, 13333, 13246, 13161, 13077, 12995, 12913, 12832, 12752, 12673, 12595, 12519, 12443, 12368, 12294, 12221, 12148, 12077, 12007, 11937, 11868, 11801, 11733, 11667, 11602, 11537, 11473, 11410, 11348, 11287, 11226, 11166, 11106, 11047, 10989, 10932, 10875, 10819, 10764, 10709, 10654, 10601, 10548, 10495, 10443, 10392, 10341, 10290, 10240, 10191, 10142, 10093, 10045, 9998, 9950, 9903, 9857, 9811, 9765, 9720, 9675, 9630, 9586, 9542, 9498, 9455, 9411, 9368, 9326, 9283, 9241, 9199, 9157, 9115, 9073, 9032, 8991, 8949, 8908, 8867, 8826, 8786, 8745, 8704, 8663, 8623, 8582, 8541, 8501, 8460, 8419, 8378, 8337, 8296, 8255, 8214, 8173, 8131, 8090, 8048, 8006, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995, 7995  }

 

plot siehe attachment ...

 

 

3)

 

ich erwarte mir bitte eine klare auskunft,

 

- ob die daten so plausibel sind

- wie ich das jetzt als ERSATZ für irgendeinen sensor in die firmware reinkriege

 

ich bin nämlich kein experte für den c-code den ihr hier verwendet ...

 

danke & lg wp

 

Figure_1.png.85d623ff9cf9ed8501c8edbf5618a350.png

Geschrieben

Die Daten sehen gut aus.

 

Du kannst das ausgegebene Array in distance_lookup.c als letztes Element des Arrays dort hinzufügen und in distance.h DISTANCE_SENSOR_NUM auf 4 setzen.

 

Vorher einmal nochmal pullen, hab in der communication.c eine kleine Änderung gemacht damit du deinen neuen Sensor-Typ auch per set_sensor_type(3) auswählen kannst.

 

Als Anhang einmal die kompilierte Firmware mit deinen Änderungen.

distance-ir-v2-bricklet-firmware.zbin

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...