Python Forum
Python Beacon positioning and animation with Raspberry pi matplotlib - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Python Beacon positioning and animation with Raspberry pi matplotlib (/thread-16104.html)



Python Beacon positioning and animation with Raspberry pi matplotlib - joefreedy - Feb-14-2019

import blescan
import bluetooth._bluetooth as bluez


def calculate_accuracy(txpower, rssi):
    if rssi == 0 or txpower == 0:
        return -1
    else:
        ratio = rssi/txpower
        if ratio < 1:
            return ratio**10
        else:
            return 0.89976 * ratio**7.7095 + 0.111
            return result 

def scan_sock(sock):
    blescan.hci_le_set_scan_parameters(sock)
    blescan.hci_enable_le_scan(sock)
    sample_count = 0

    while True:
        returnedList = blescan.parse_events(sock, 10)
        print "----------"
        for beacon in returnedList:
            print beacon
            beacon = beacon.split(',')
            beaconid = beacon[0]
            txpower = float(beacon[4])
            rssi = float(beacon[5])
            if 0<= calculate_accuracy(txpower, rssi)< 2:
                print beaconid

if __name__ == '__main__':
    dev_id = 0
    try:
        sock = bluez.hci_open_dev(dev_id)
        print "ble thread started"
        scan_scan(sock)
    except:
        print "error accessing bluetooth device..."
#######
fig = plt.figure()
#fig.set_dpi(100)
#fig.set_size_inches(7, 6.5)

ax = plt.axes(xlim=(0, 100), ylim=(0, 100))
patch = plt.Circle((5, -5), 0.75, color='r',fill=False,clip_on=False)
c1 = plt.Circle((5, -5), 0.75, fc='y')
c2 = plt.Circle((5, -5), 0.75, fc='b')
c3 = plt.Circle((5, -5), 0.75, fc='r')
def init():
    patch.center = (50, 50)
    c1.center = (5,5)
    c2.center= (10,10)
    ax.add_patch(c1);
    ax.add_patch(c2);
    ax.add_patch(patch)
    return patch,

def animate(i):
    
    raw_cell = main()
    print raw_cell
    cell = raw_cell[0]
    distance = cell["Distance"]
    print distance
    patch.set_radius(float(distance));
    return patch,
    
    


anim = animation.FuncAnimation(fig, animate, 
                               init_func=init, 
                               interval=5000,
                               blit=True)

plt.show()
I have written code for matplotlib but this code does not show the actual locations. I want him to show me the distance he took at the moment.

I can get the distance. But there is one more problem I want to show on this "matplotlib.pyplot" screen according to the distances. Can I use a particle filter? How do I adapt my Particle Filter to my codes?

I can find the ibeacon distances right now. the only problem I find is that I show distances as animation using particle filter or matplotlib.

https://github.com/AtsushiSakai/PythonRobotics/blob/master/Localization/particle_filter/particle_filter.py


RE: Python Beacon positioning and animation with Raspberry pi matplotlib - joefreedy - Feb-14-2019

++ I would be grateful if you could help.