Skip to content

Instantly share code, notes, and snippets.

@vfdev-5
Last active March 27, 2017 17:07
Show Gist options
  • Select an option

  • Save vfdev-5/2b99fb8e1b309dd2ec4586cf0e1495ee to your computer and use it in GitHub Desktop.

Select an option

Save vfdev-5/2b99fb8e1b309dd2ec4586cf0e1495ee to your computer and use it in GitHub Desktop.
Flying Nemo
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Localize nemo fish by RSSI in 2D"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pylab as plt\n",
"import seaborn as sns\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## RSSI vs distance\n",
"\n",
"http://electronics.stackexchange.com/questions/83354/calculate-distance-from-rssi"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dist_to_rssi(d, a, n=2.7):\n",
" \"\"\"\n",
" Compute rssi of an emitter given a distance\n",
" \n",
" rssi = -10 * n * log10(d) + A\n",
" or\n",
" d = 10^ ( -(rssi - A) / (10 * n))\n",
" \n",
" :param s: RSSI in dBm\n",
" :param n: propagation constant or path-loss exponent i.e. 2.7 to 4.3 (Free space has n =2 for reference)\n",
" :param a: received signal strength in dBm at 1 meter\n",
" \n",
" http://electronics.stackexchange.com/questions/83354/calculate-distance-from-rssi\n",
" \"\"\" \n",
" return -10 * n * np.log(d)/np.log(10) + a"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def rssi_to_dist(s, a, n=2.7):\n",
" \"\"\"\n",
" Compute distance to an emitter given RSSI\n",
" \n",
" rssi = -10 * n * log10(d) + A\n",
" \n",
" d = 10^ ( -(rssi - A) / (10 * n))\n",
" \n",
" :param s: RSSI in dBm\n",
" :param n: propagation constant or path-loss exponent i.e. 2.7 to 4.3 (Free space has n =2 for reference)\n",
" :param a: received signal strength in dBm at 1 meter\n",
" \n",
" http://electronics.stackexchange.com/questions/83354/calculate-distance-from-rssi\n",
" \"\"\" \n",
" return np.power(10.0, -0.1 * (s - a) / n)"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x10c0f1790>"
]
},
"execution_count": 135,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nRiMzZszi+9+/Fb2+92s31q79hPvuuwdJklBVlbq6On784ztZvHhZzuzKG4/BkRGDcDI1ypYIBIJ8\nYfHipTz88ON90qdNm84f//gnHn30SU499TTuv197JYbf72f58od4+OHHefDBx1i+/CGCwWDO7Dvr\nrHN48sm/89hjTxGNRnnhhef65Jk7dz7Llz/JI488wb33/gGr1cKCBSflzCbII4/BbhTCIBAcK9xy\ny/dobW0hHo/xpS99mfPOO/+IrjNz5ux+02tr53Xvz5o1h9deewWAVatWsnDhSTgcDgAWLjyJjz/+\nkNNPP+uQZdx55x3YbHYUZTMdHR184xvfYtmy0wZl30knndLD1lm0trYcNv8777zJSSedgtlsHtT1\nj5Q8EgbNvYok06NsiUBw7PD0WztYvfXwjdVQWTC9lItPm3LYPLfeejtOp5NYLMZXvnIly5adhsvl\n4vbbb2Hfvr198l9yyWWcffbnj8ieF198vruBbm1tpbT0QFzQkhLPgI01QEdHO7///SPs2bObH/zg\n/7Fs2WmEw2H+67+up78Yb7ff/jPGj5/QfZxMJnnllZf49re/d9hy3nzzNS699LJB/rIjJ2+EQXQl\nCQTHDk8//STvv6+NCbS0tLB//15mzpzNHXf8PKvlvPrqSyjKVv7v/x4c1nWWLNH6+ydMmEhnZwcA\nNpuN5cufHNT37777l9TWzuW44044ZJ729jZ27drJwoUnD8vWwZA3wiC6kgSCkefi06YM+HSfbVat\nWsXatZ/w4IOPYjKZuPHGG4jHtVdd3377LezdW9crvyRJXHLJZZx55ue47rrLkSSJRYuWct11Nxy2\nnNWrP+ZPf3qU3/3uQQwGrX3xeDysW7emO09rawtz584f0GaTydS93xVlqKfH0DP0kCRJvTyG5csf\nwufzcvPNtx22jLfeeoOlS0/tMzidC/JIGDJdSSkhDALB0UwgEMDpdGIymair28OmTRu7zw3kMRzq\nCf3gmHDbtm3lrrt+zj33/B9ud0F3+sKFJ/Pgg/cTDAZJp9OsXv0xX/vajQA88MDvmDlzFkuWnHpY\nG7rKGozH8MILz7Fq1UruvfcPh80H8MYbr/K1r31zwHzZIG9mJRn1Okw6ibAYYxAIjmqWLFlCMpnk\n8ssv5oEHfsfs2XOO+Fr33/9bLrzwC8TjMS688AssX/5Qd3o0GuGHP7yZa675T2655bsAuFwurr76\n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\nAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10c5a3650>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.arange(0.10, 20.0, 0.05)\n",
"plt.plot(x, dist_to_rssi(x, a=-120, n=2.7), label='a=-120, n=2.7')\n",
"plt.plot(x, dist_to_rssi(x, a=-120, n=3.0), label='a=-120, n=3.0')\n",
"plt.plot(x, dist_to_rssi(x, a=-120, n=3.5), label='a=-120, n=3.5')\n",
"plt.plot(x, dist_to_rssi(x, a=-100, n=2.7), label='a=-100, n=2.7')\n",
"plt.plot(x, dist_to_rssi(x, a=-100, n=3.0), label='a=-100, n=3.0')\n",
"plt.plot(x, dist_to_rssi(x, a=-100, n=3.5), label='a=-100, n=3.5')\n",
"plt.title('RSSI vs Distance')\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def points_2d_from_rssi(s, rssi_to_dist_f, beacon_pos=(0.0,0.0)):\n",
" d = rssi_to_dist_f(s)\n",
" angles = np.arange(0.0, 360.0, 1.0)\n",
" pts = np.zeros((len(angles), 2))\n",
" pts[:, 0] = beacon_pos[0] + d * np.cos(angles)\n",
" pts[:, 1] = beacon_pos[1] + d * np.sin(angles)\n",
" return pts"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x10c0d9f10>"
]
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n7VN+8Ytb+OSTDRQUwOWXX82QIUNZtOhhnnnmKQoKCvj2tyuZMOFCGho2MmPGfzJ06DBWr36D8vJ+\n3HrrL+nRo0f3P6gMU0pHRFKqsbGRe+5pYvv2YVGvFvDhh99h1qx3u739v//9I8aNm8DDDy+hd+/e\n1NQs5s47b+emm25n7twFjBs3jgceuAeAM888izlzFvDggwsZNGgwTz9dC8Cdd/6C4cNPYv78hcyb\n91uOOOIIzN7h2Wd/z5w5C7j//gd56qnHee+9UHk//ng93/veBTz00GJKS0t54YU/drse2aAWvoik\n1DPPvMK6dd+Mu+z11/sSDAYJBAJd3n6/fv0ZMmQoAOecM5YFC+axbt0H/OxnU2ltbaWwsID99y8D\nYO3a95g793527txBY2Mjp5wyEoDXXvsb1113IxBKEfXq1Zs336zjjDO+0Va2M888izfffJ1Ro87g\n4IMPoaIi9MRN546hoeGTLpc/mxTwRSSliooKgZa4ywoLW7udg499f69evTn88CO47755wN6Tp918\n8w3cdtsvOeKII3n22ad5/fXX4m4jkej0TWFhEbt37+5OFbJGKR0RSamxY0dw5JH/L+6yE0/8vNu5\n74aGjbz11moAli79A0OGDGXbts9YvboeCOX41637AIDGxi848MCDaGpq4vnnn23bxkknncxjjy0B\noKWlhV27dnLCCcN48cU/EQwGaWxsZMWK5Rx//HAAEj372yvUwheRlAoEAvzXf/Xmf/7nL3z66cjw\nq80cddQTXHHFkG5vf9CgwTz22GJuueV6Bg8+gqqqCzjllJHceecv2LlzJ4WFMG7cBA4//AimTLmU\niy/+Nw444ACOPXYIX3yxC4Bp0y7n9ttv4ve/r6WoqIjLL7+a444bwre+9R0uvvgiCgoK+O53/4Wj\njjqahoaNvhkZVJDFM1er3+esVv28y8/1y1Td1qxZy0MPvcOnn5Zw+OFNXHLJCA488MC0/10/7zuA\n8vI+6XsAiohIVxx7bAW33FKR7WJIFOXwRUTyhAK+iEieUMAXEckTCvgiInlCAV9EJE8o4IuIZ5x9\n9hkp3d68ebNZtOhhAH7zmwd47bVXO72NF198gY8++rDt965uJxM0LFNEPCOdN0D9+MeXdul9L774\nJ047rZlBgwZ3azuZoIAvIp50zz3VrFz5MgUFhVx00Y8YM+ZsAGbPns0TT9RSWFjIiBGjuPTSqe1O\nkxzt5puvZ9Sof6Jfv4O57bYbKSgooLm5mXXrPmDFir/G3cZ77xl//vMK6upWsWDBPGbOvJ358+cy\natQ/ceaZZ/G3v/2Ve++tprm5ha997VhmzLia4uJixo//Luee+21eeulFmpubufHGWznssEFp/8wU\n8EUkbQo+/ZSSP/+J3d/+LhQVpWy7L7ywjLVr32PBgt+xbdunTJlyEcOHn8i77xrLly9nzpwF9OjR\ngx07QnfcnnnmWZx33vkAzJlzH08/XUtV1YS42z7mmK/x4IMLAbj33mpGjBjV4TZOP/2MtgAfbffu\n3dx88/XcffcDDBgwkJkzf87jjz/K+PETATjggAOZN+9hHn/8UR555CGuvPLalH0+7VHAF5G06XvJ\nZHqseIFd//FTvrj+5pRtt77+Db75zX8GQoFz+PCTWLPmLerqVjFu3Li2Cdr69OkDwAcfvM+cOfft\nM01yR5Yte5533zV+9at7urSNv//9Iw45ZAADBgwEYOzY7/D440vaAv4ZZ4wGQtMtr1ixvAufQucp\n4ItI2rQWF9NaUAAl6X06VGtrx9Mu33TT9XGnSW7PBx+8z4MPzuXee+e0bbez20ikR48SIDTdcnNz\nc7e2lSyN0hGRtNk+dwGfP/57vrjmf1Kyvchkj8cfP5xly5bS0tLCtm3bePPNOo499jhOPvlUHnvs\nMYLBL0N/f/t2oP1pkuPZuXMn119/Lddeez19++7X9np72+jVqxe7du3aZzuHHTaIhoaNbNjwMQDP\nPfcMw4ef1L0PoJvUwheR9CktZc9pp6dsc5HW9plnjuatt+qZPPlCCgoK+clP/pMDDjiQU08dycaN\nH/HjH19Ejx4ljBgxiksu+Um70yTH8+KLL7BpUwO33z6z7cph3rzftruNMWPO4bbbbuLRR3/HzJm3\ntW2nR48eXHPNz7nuuivbOm0rK6siNUnZZ9IZCadHds4NBBYA/Qg9xmaOmd0Vs04Z8DBwMFAE/NLM\n5if425oe2cNUP+/yc90gL+rX5bNFMimdJmC6mR0HjASmOueOiVnnp0CdmQ0DRgO/dM7p6kFEJIck\nDPhm1mBmdeGfdwJvAwNiVmsA+oR/7gNsNbOmVBZURES6p1OtcOfcYGAYsDJm0RxgmXPuE6AUuCAl\npRMRkZRJepSOc64UeBSYFm7pR7saeMPMDgGGA/eE1xcRkRyRVAs/nI9/FHjIzGrjrDIKuAnAzNY6\n59YBxwB/62i75eV9Olrseaqft/m5fn6uG/i/fl2VbEpnHrDGzKrbWf428E3gJedcP+Bo4INEG/V5\nT7rql6MCtTUEFi2kuaKCorVr2/4PTpwUWr5oIYEhxxJcvWafdaLXDVZWtbuteNtMtK1M8fK+S0Y+\n1K+rEgZ859wo4PtAvXPudaAVuAYYBLSa2WzgFuBB59wbhAaYXmFmn3a5VCLd1FEgDtQsoWjrVprr\nVu31f9t7ly2FN14nsGXLPutErxusrAqdHJYt7XC9yDbbW6e4bhXFr65s90SR6ROC+FfCgG9mLxEa\nW9/ROluA81JVKJFkdNRSTxSIm8vKCFaNjxtkgaRa+EDb/4nWa2+dyMkn9iTUVo5lSync1NBuPXUi\nkM7QWHnxhEhwj275Fm5qoGR1ffzWdxKBuL1gGaysory8D9uTSAsEK6uSCrrtrdN08qkdppeAUMCP\nc/KKnAh0NSDJUsCXnBTbeo8E97bly5ayZ8hQgmPObjeYeyHwJSpnpJ+gJc5JIXIiiIi+GtBJQOJR\nwJec0F6Aj7RmI8E9uuWbL4GsvZNC5EQQ72qgbZ04KSEumQKjx2ak7JJbEs6lk0aaS8fDulO/2OC+\nV869rKwtwLf066+RLJ3UYeor/NkybBjBsnLf9gV4dd8lqztz6aiFLxkRqK2hZ/Wstt+jW++wb87d\nb0EoU2KvBuKlhAJbN+/VJ1C4qaFt3zROm67P3cfUwk+TPGhldFi/jnLw2W69J8PP+698+bMEZ8/1\n7L5JxM/7DrrXwlfAT5M8+NK1W79AbQ29r5rRNvwxkqKJ8EIr0s/7L7Zuca++YlJrXgr8ft53oJSO\n5IhIq75wU8M+Y929FDDyTXQaKDb9E+kEjh79o/3oXQr40mXtpW2iR9QoOHhLbB9A5AQQCfzRdwVr\n/3qPUjpp4ufLykBtDX0fW8ye9R97/vK/PX7ef12pW3tpulzc337ed6CUjmRAbJ6X1fUQc+NTrh34\nkjptKZ920j0a5eMNauGniV9aGdF5+eiRHCWHDmT7uAm+Pbj9sv/iSVXd2vtuZLvV7+d9B2rhSxrE\nHsx7hgxtG2nTOG06JVMmE/TxQSWJRfL9gdoaiLr6Uydv7lLAl31E52vVASuJxBvlE93JG1lHsk8B\nX+KOtol0ziknK50R3eovDDcaelbP2mcqDX2nskMBP4/Fpm3iTVSmA1O6IrqTN3Z6Z6V7skcBP0/F\nS9uoBSapFN3aj3czl9I9maeAn6cCixYqbSMZEe9mrki6p/dVM9rWkfRTwM8j0VPnRj+iTwebZFLk\n+9Y7Jsev72L6KeDniegUDsD2R2p0cEnWxMvxK8WTfoXZLoCkV6C2hr4XVtGzetZXE5pFPSFJJFuC\nlVVsf6SGxmnT26Zr6Fk9i74Xhsf2S8qphe9jGk8vXhCvta+RPOmhgO9D8aYpVses5LLYET1K86SH\nUjo+Ep2+iTzIOjjmbHbdeocOGPEEpXnSSy18n1D6RvxEnbrpoRa+D8TOVd44bbpG4YjnqbWfemrh\ne1xssFf6RvwmurVfZO8QWF1P4aYGfc+7QC18j4o33FLBXvwq0tpv3X9/AAo++0wt/S5QC9+DlK+X\nfNU4bbpG8XRDwoDvnBsILAD6AS3AHDO7K8563wB+BZQAm81sdGqLKhA/X68vu+SLjqZfVqMnsWRa\n+E3AdDOrc86VAq855543s3ciKzjn9gPuAc4xsw3OuYPSVN68FW9svVI4kq86GsXDlMnZK1iOS5jD\nN7MGM6sL/7wTeBsYELPaJKDGzDaE19uS6oLms0irXmPrRb4SbxRP76tmwOLF2S5azupUDt85NxgY\nBqyMWXQ0UOKcWw6UAneZ2UMpKaFoKmORDsTOvsn8+TB6bHYLlaMKWltbk1oxnM55AbjRzGpjlt0N\nnAScBfQG/gJ8y8ze72CTyf3hfLd4MdxyS+jnq6+GCROyWx6RXJU/x0pBV9+YVAvfOVcMPAo8FBvs\nwz4GtpjZl8CXzrkVwAlARwGfzZt3dLK43lFe3qfb9YvuoA2OOZvto8dCjnxmqahfLvNz/Xxbt9Fj\n6Tt7LoFlS9lz40xaZs/1ZUdueXmfLr832ZTOPGCNmVW3s7wWuNs5VwQEgFOBWV0ulQB7p3I0pbFI\nYsGJkwj0KIb1H3/V5+WzgN8dyQzLHAV8H6h3zr1OKBVzDTAIaDWz2Wb2jnPuOeBNoBmYbWZr0lhu\nX4uMyGmuqCCInkolkqxgZRVMmUzj3PlQPSs0gqdW04xEJJ3DT4NWX15WhnX1snmfNM4juXknoW/T\nAmF+rp+f6wZf1a/vhVWh9M6QobT06++bhlN5eZ/05vAlM2JvqlIaR6TrIseP7sr9igJ+DtBNVSKp\nF++u3N5XzWhblo80eVoOCCxaqJuqRNIkWFnFrlvvaLs5K7BoYbaLlDVq4WdZoLaGwk0N7BkyVDdV\niaRJ5LjqmecduWrhZ1EkZ1+yuj7UqZSHX0CRTAlWVtHSrz8lq+tDU5Xk4dTKCvhZog5akcwLTpy0\n17w7+Rb0FfCzJPqmKuXsRTIj3/P5CvhZ0PvaKyhe+ReaBh6qYC+SYZGg3zTwUIpX/oXe116R7SJl\njAJ+FgRqllC0cycFjV8o2ItkQbCyioLGLyjauZNAzZJsFydjFPAzLFBbQ2vPXjSXlhKsGp/t4ojk\nrWDVeJpLS2nt2StvcvkK+BkU6agt/ng9TaeOZNfM27NdJJG8tWvm7TSdOpLij9fnTQeuAn6GaFSO\nSO7Jt1E7CvgZolE5Irkn30btKOBnSHNFRahlXzVewV4khwQrq0L5/LIymisqsl2ctFLAz4BAbU1o\nZM7WrRStXZvt4ohIjKK1a0Mt/Jolvk7rKOBngJ5cJZLbonP5fk7rKOCnWfTkaMrdi+SmSC5/z5Ch\nbZOr+ZECfpr1rJ5Fyep6IH/n4BbxgnyYXE0BX0QkzO+pHQX8NIq0ECJz3YtIbvN7akcBP10WL9Zc\n9yIeFDlWS1bX07N6VpZLk1oK+Okyf75G5ohITlHAT5ejj9aNViIe1ThtOnuGDAXwVVpHAT8NArU1\n8Nvf6kYrEY/ya1pHAT8NAosWwpYtSueISE5RwE+D5ooKOOggpXNEPMyPaR0F/BSLzJvDli1K54h4\nmB/TOgr4KRaZN4eDDlI6R0RySnGiFZxzA4EFQD+gBZhjZne1s+7JwMvABWb2WCoL6hXNFRU0162i\n6PvfVzpHxOP2nDaKwo2fsOe0UdkuSkok08JvAqab2XHASGCqc+6Y2JWcc4XArcBzqS2id0RPg8y7\n72a7OCLSTX6bNjlhwDezBjOrC/+8E3gbGBBn1cuAR4F/pLSEHtKzelboZqvSUpg8OdvFEZFuCk6c\nRHNpKUVbt/oij9+pHL5zbjAwDFgZ8/ohwPlmdh9QkLLSeUzBZ58B0Lr/ATBhQpZLIyLdFaysCh3P\nfHV8e1nCHH6Ec66UUAt+WrilH+1O4Mqo35MK+uXlfZL9895wUBl8vJ7ig8oAH9YvhurnXX6uG6S4\nflHHtdc/t6QCvnOumFCwf8jMauOs8nVgkXOuADgIGOuc22NmT3a03c2bd3S2vDmt9ykjCKxfT/CU\nEfTCf/WLVl7eR/XzKD/XDVJfv+jjelcOfG7dOekk28KfB6wxs+p4C83siMjPzrkHgacSBXu/0XNr\nRfwpuuO26eRTPT36LplhmaOA7wP1zrnXgVbgGmAQ0Gpms2Pe0pryUnpA7HNrA9kukIikRHDiJIrr\nVrU9FMXXAd/MXgKKkt2gmf2oWyXyqMj4e02nIOIvwcoqil9dSaBmSWjaFA/TnbYpUvLySxRt3UrJ\nyy9luygikmJ+Ob4V8EW6YPv2z6mvX8P27Z9nuygiSVPAT5E9p42iuazMN7dgS3y7d+9mxownOP30\nNYwZU87pp69hxown2L17d7aLJmnkl+M76XH40jG/XPJJx6655hkWLJgA4W75hoYjWLAgCCzmjjvO\nz2rZJH38cnyrhZ8ikbvw/HA3nsS3ffvnPP98P9hnDFaA55/vp/SOj/nl+FbAF0nSRx9toKHhyLjL\nGhqOZP36TzJcIpHOUcBPkdb999/rf/GfQYMG0L//+3GX9e//PoceekiGSySZ4pfjWwE/RfzSqSPt\n69t3P845ZxMQjFkS5JxzNtG3737ZKJZkgF+Ob3XapohfOnWkYzff/C1gMc8/34+GhiPp3/99zjln\nU/h18Su/HN8K+CKd0KNHD+6443y2b/+c9es/4dBDj6Vv35HZLpZIUhTwU8Rvj0KTjvXtux/HHacU\nTr7wy/GtHH6K+OWST0T25ZfjWwE/xQo/XOeLZ1+KyFc0Dl/20jhtOs1lZRTt3Elg0cJsF0dEUkjD\nMmUvwcoqglXjaS4r8/wUqiLylcgV+54hQ2mcNj3LpekeBfwU8kueT0S+0rN6FiWr6wE8/6wLBXwR\nkQ74JX8PCvgp1ThtOsExZ3v+sk9EvuKX/D1oHH5KRS73AosWQt9eMHpslkskIt3llzH4oICfcm35\nvq2bFfBFPC5QW0OgZglFW7dStHZttovTbUrppFhbnm/btuwWRES6rWf1LIq2bqW5tJTgxEnZLk63\nKeCnWFue74ADslsQEUmZlsGHe36EDijgp1zjtOnsGTIUQHfciniYn8bfRyjgp1hbK6Cujp7Vs7Jb\nGBHpMj+Nv49QwBcRyRMK+GnQOG06DBsGKK0j4kV+TOeAAn5aRC7/SlbXK60j4kF+TOeAAr6ISN5I\neOOVc24gsADoB7QAc8zsrph1JgFXhn/dAfyHmdWnuKzecvXVNF0+g8IP19H72ivYNfP2bJdIRJLQ\n+9orKPxwHU0DD/VVOgeSa+E3AdPN7DhgJDDVOXdMzDofAGeY2QnATGBOaovpQRMmUND4RWh+/Jol\n2S6NiCQpULOEop07KWj8wlfpHEgi4JtZg5nVhX/eCbwNDIhZ5xUz+zz86yuxy/NVsGo8zaWltPbs\npc5bEQ8I1NbQ2rNX6M7aqvHZLk7KdSqH75wbDAwDVnaw2hTg2W6UyTd2zbydplNHUvzxenpfNUNB\nXyTH9ayeRfHH62kZfLgv07AFra2tSa3onCsFXgBuNLPadtYZDfwaON3MEk0mk9wf9rrFi2HKFNix\nIzRU8/XXs10iEYnHO8dqQVffmNRsmc65YuBR4KEOgv3xwGzg3CSCPQCbN+9ItpyeU17eJ1S/0WPZ\nf9BgSlbXs6epmc98Uue2+vmUn+vn57pB1+vXd/ZcAjt20FxWxq6p0wjm6GdUXt6ny+9NNqUzD1hj\nZtXxFjrnDgNqgB+YmffnEE0xza8jktsCtTUUbmpgz5Ch7Lr1Dt911kYkMyxzFPB9oN459zqhVMw1\nwCCg1cxmA9cBBwL3OucKgD1mdkr6iu0twcoqAosWEli2lMKrZrS9JiLZF6itofdVMyjaupXgmLN9\nfWwmDPhm9hJQlGCdi4GLU1UoPwpOnERx3SqKtm4lsGihr79UIl4SWLQwNOd9WZkv5rzviO60zZBg\nZRW7br2DPUOGUripQakdkRyQL6mcCAX8DApWVtHSrz8lq+s1TFMkB/h1zpz2KOBnWHDiJJrLytpS\nOyIimaKHmGdYpBXRs3pWW2onH1oWIrkkUFtDYNFC9pw2ipZ+/X2fu49QwM8CjdoRyZ69RuUA2x/J\nn9SqUjpZEp3aUT5fJDOig30+jMqJpYCfJZFRO8rni2RO9BDMfBiVE0sBP4s0VFMkc/JtCGY8CvhZ\npqGaIukXSeWUrK4PddLmYbAHBfycoHy+SPrke94+mgJ+DlA+XyR98j1vH00BP0cony+Sesrb700B\nP4fslc//2WXsf9YoBX6RLgjU1rD/WaPo/bPL8j5vH00BP8e05fN37qRkdb3SOyJdEFi0kJLV9RTt\n3Jn3eftoutM2x0RPvVDw2WeafkGksxYvpnBTA00DD6V1//1pnDZdx0+YWvg5KFhZxWd/fIlmd4yG\na4p0QqC2BqZOpWR1Pc3uGD7740sK9lEU8HNY9HDNntWz6HthlQK/SByB2hr6XlhFz+pZsGWL0jjt\nUEonh0VaJoFFC0OpnWVLKa5btdcykXwXPc5+z5ChMHYsu8ZN0DESh1r4OS5YWcX2R2ponDZdN2eJ\nxIi9qapx2nR45hkF+3Yo4HuEbs4S2ZduquocpXQ8JDrF01xRQd8LqwhOnKQvueSdyANMmisqCIKO\ngyQp4Huhxi42AAAJs0lEQVRMsLKKYGVVqANXOX3JQ/n8AJPuUkrHozSCR/JN9EgcTYTWNWrhe1S8\nETyFmxoILFqoy1vxlUj6pnBTAyWr69kzZCjBMWfre94FCvgeFknvBGpraNHQTfGh2CGXCvTdo5SO\nD8QbuqlRPOIH0aNwGqdNZ/sjmmakO9TC9xGN4hG/0Cic9FDA9xmN4hGv0yic9EkY8J1zA4EFQD+g\nBZhjZnfFWe8uYCywC5hsZnUpLqt0QnDiJIrrVrWN4lFnruS66M5ZjcJJj2Ry+E3AdDM7DhgJTHXO\nHRO9gnNuLFBhZkcBlwL3p7yk0imRO3ODY84GILBsqYZvSs6KtOoDy5YCEBxztu6cTYOEAd/MGiKt\ndTPbCbwNDIhZrZLQVQBmthLYzznXL8VllU6K7syNDvx6mpbkgshTqfY/a9ReY+vVOZs+nRql45wb\nDAwDVsYsGgCsj/p9A/ueFCRL9hnFE36allr8ki2RFn3J6npKVtcDatVnQtKdts65UuBRYFq4pS8e\nE/00rQh17Eom7ZOnLy2lZfDheipVhhS0trYmXMk5Vww8DTxrZtVxlt8PLDez34V/fwc408w2dbDZ\nxH9Y0mvxYpg6FbZsgWHD4OCDYfJkmDAh2yUTv1m8GObPh40boa5O37fuKejyG5MM+AuALWY2vZ3l\n3wKmmtm3nXMjgDvNbESCzbZu3ryj0wX2ivLyPnihfvFuW2/p1z/hiB6v1K+r/Fy/TNatq9+v7vDz\nvgMoL++TvoDvnBsFrADqCbXKW4FrgEFAq5nNDq/3a+BcQsMyf2hmqxL8bQX8HBLvwIyId7nttfp1\nlp/rl+66Rd80FahZ0jYtQroDfYSf9x2kOeCnkQJ+DooN/EDcg9Wr9UuWn+uXrrrFfnci03xk+uEk\nft53oICfk7z+pQvU1uzVuRvb6i+57lo2jx6bjaJlhNf3X0dSWbdIkA9OnERg0UICy5a2NRCaKyoo\nWrs24zf8+XnfQfcCvqZWkLgiUzQAe83GGWn1c8st9J09V3fv5ql4V4KRu2L1nchdauGniR9bGdGt\n/pLiIqiry2huNpP8uP8iulO3bHTCdpaf9x0opZOTfP+lW/4swdlz9znws3UZn2p+3n+drVu2O2E7\ny8/7DpTSkWyYMIHto8fu8/CV5vCEbXr6lvft0wkb3reR6Q+0X71HAV+6JfapW5EWfvTTt4pfXemL\nVr/fRbfkI/sw+pGCfrl6y2cK+JIS0Z28EAoeheE5zSNpgLZlavnnjHjpmkhLXo8U9B8FfEmL2Kdv\nRVqGkaF70SmfyHoKLOkXqK2BxxbT+9BBe7Xio9M1warxasn7lAK+pE1sqz9aJOUTEX0SUOogdeKl\naVhdTyB8U5TSNflFAV8yKjbnH/1Eo/Y6fhWMkhMb3KOvqKLTNIwdSzDcwtdnml8U8CUrYlv/HXX8\nRp8AIvcB7DltVF4HrOjgXvLyS22vR6dn4KuboaJPAiVTJrPLx8MWpX0ah58meTAWOO31a2/UCNA2\nT0vs+P9UXQ3kyv6L/QxiP4vI5wAkfS9ErtQtXfKgfhqHL/4Tb+QPMS382KuA6NYtEDdY5kJHcfQc\nNLHljH5tn07VmBE00S18jY2XRBTwxTPidQLHpoE6yl/vczJoZ7RQc0UFrP+obSRLeyeM2PRS7Hrx\nAni8q5VIWeKVL7ZTVf0Z0h0K+OJpHY0EimgvAEP80ULNdatg69a2kSztnTAiAbtw4ydx14sXwOON\ncY8tZ/RrCuySSgr44luJTgbtjRZqrqig1/qP2kaytHfCKNzUACTfwo9sO14LPV45Fegl1dRpmyZ5\n0HGk+nmUn+sGeVG/LnfaFqayICIikrsU8EVE8oQCvohInlDAFxHJEwr4IiJ5QgFfRCRPKOCLiOQJ\nBXwRkTyhgC8ikicU8EVE8oQCvohInkg4eZpz7jfAd4BNZnZ8nOVlwMPAwUAR8Eszm5/icoqISDcl\n08J/EPjnDpb/FKgzs2HAaOCXzjnNwikikmMSBnwz+zOwrYNVGoA+4Z/7AFvNrCkFZRMRkRRKRUt8\nDrDMOfcJUApckIJtiohIiqWi0/Zq4A0zOwQYDtzjnCtNwXZFRCSFUtHCHwXcBGBma51z64BjgL8l\neF9BeXmfBKt4m+rnbX6un5/rBv6vX1cl28IvCP+L523gmwDOuX7A0cAH3S+aiIikUsJHHDrnFgLf\nAMqATcDPgR5Aq5nNds4dRGgkz2GETgq3mNkj6Sy0iIh0XjafaSsiIhmkO21FRPKEAr6ISJ5QwBcR\nyRNpnwLBOXcucCehk8tvzOy2OOt8A/gVUAJsNrPR6S5XqiSqn5fnGko0j1J4nbuAscAuYLKZ1WWw\niN2SxDxRk4Arw7/uAP7DzOozWMRuSWb/hdc7GXgZuMDMHstU+bojye/mN/BuXEnLHGZpbeE75wqB\nXxOai+c44ELn3DEx6+wH3AN8x8yGAOPTWaZUSqZ+eHuuoQ7nUXLOjQUqzOwo4FLg/kwVLEUSzRP1\nAXCGmZ0AzCR0V7mXJKpf5Dt8K/BcRkqUOom+m56NK2FpmcMs3SmdU4D3zOwjM9sDLAIqY9aZBNSY\n2QYAM9uS5jKlUjL18+xcQ0nMo1QJLAivuxLYL3wvhickqp+ZvWJmn4d/fQUYkJGCpUgS+w/gMuBR\n4B/pL1HqJFE3L8eVtM1hlu6APwBYH/X7x+x70BwNHOicW+6ce9U594M0lymVkqnfHOC48FxDbwDT\nMlS2TIit/wY8FhQ7YQrwbLYLkUrOuUOA883sPtq/sdKrvBxXktGluJILnbbFwImE8sDnAtc5547M\nbpFSSnMNeZxzbjTwQ77K5/vFnexdJz8FfcWVONId8DcQugM3YmD4tWgfA8+Z2ZdmthVYAZyQ5nKl\nSjL1GwUsgdBcQ0BkriE/2AAcGvV7vPp7mnPueGA28F0zS5Qe8ZqvA4vC8199j1DQ+G6Wy5QqXo4r\nyehSXEl35+GrwJHOuUHARmAicGHMOrXA3c65IiAAnArMSnO5UiWZ+kXmGnrJo3MNdTSP0pPAVOB3\nzrkRwGdmtiljJUuNduvnnDsMqAF+ED6ovKjd+pnZEZGfnXMPAk+Z2ZOZKlgKdPTd9HJciUhmDrNO\nxZW0T60QHrZYzVfDFm91zl1KeC6e8DozCF0yNwNzzOzutBYqhRLVz8tzDSWaRym8zq8JXTLvAn5o\nZquyU9rOS2KeqDnAOOAjQvtuj5mdkqXidloy+y9q3XnA0x4alpnMd9PLcSUtc5hpLh0RkTyRC522\nIiKSAQr4IiJ5QgFfRCRPKOCLiOQJBXwRkTyhgC8ikicU8EVE8oQCvohInvj/C/2ht6TWpHMAAAAA\nSUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10b509750>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"beacon_pos = (1.234, 2.345)\n",
"pts = points_2d_from_rssi(-110.5, lambda s: rssi_to_dist(s, a=-120), beacon_pos)\n",
"plt.title(\"Localization on RSSI\")\n",
"plt.scatter(beacon_pos[0], beacon_pos[1], s=50, label='beacon')\n",
"plt.scatter(pts[:,0], pts[:,1], color='r', s=5, label='localization')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Multiple beacon case"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"beacon_positions = np.array([\n",
" [-12.34, 0.0],\n",
" [-2.345, 5.67],\n",
" [3.456, 6.789],\n",
" [13.456, 1.234],\n",
"])"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x10b0d5ad0>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nSUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10af10290>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(beacon_positions[:, 0], beacon_positions[:, 1], s=50)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"signals = np.array([\n",
" -150,\n",
" -141,\n",
" -140,\n",
" -148\n",
"])\n",
"rssi_to_dist_f_list = [\n",
" lambda s: rssi_to_dist(s, a=-120),\n",
" lambda s: rssi_to_dist(s, a=-120),\n",
" lambda s: rssi_to_dist(s, a=-120),\n",
" lambda s: rssi_to_dist(s, a=-120), \n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-12.34"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.min(beacon_positions[:,0])"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10bdd4850>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(12, 8))\n",
"for i, s in enumerate(signals):\n",
" beacon_pos = beacon_positions[i]\n",
" pts = points_2d_from_rssi(s, rssi_to_dist_f_list[i], beacon_pos)\n",
" plt.title(\"Localization on RSSI\")\n",
" plt.scatter(beacon_pos[0], beacon_pos[1], s=50, label='beacon %i' % i)\n",
" plt.scatter(pts[:,0], pts[:,1], color='r', s=5, label='localization %i' % i)\n",
"plt.legend()\n",
"plt.xlim(np.min(beacon_positions[:,0]) - 2.0, np.max(beacon_positions[:,0]) + 2.0)\n",
"_ = plt.ylim(np.min(beacon_positions[:,1]) - 2.0, np.max(beacon_positions[:,1]) + 2.0)"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def compute_position(signals, rssi_to_dist_f_list, beacon_positions, gamma=0.01, init_pos=(0.0, 0.0), n=100, verbose=0):\n",
" \"\"\"\n",
" Method to compute localization on received signal\n",
" \n",
" p <- p - gamma * sum_i( p - estimated_positions[i])\n",
" estimated_positions[i, j] = rssi_to_dist_f_list[i](signals[i]) * unit_vector(p[j] - beacon_positions[i, j]) + beacon_positions[i, j] \n",
" where i goes over beacons, j is [0, 1] \n",
" \"\"\"\n",
" assert len(signals) == len(rssi_to_dist_f_list) == len(beacon_positions), \"WTF\"\n",
" \n",
" def _unit_vector(v):\n",
" return v / np.linalg.norm(v)\n",
" \n",
" distances = [rssi_to_dist_f_list[i](signals[i]) for i in range(len(signals))]\n",
" \n",
" def _update_estimated_positions(estimated_positions, p):\n",
" for i in range(len(estimated_positions)):\n",
" d = distances[i]\n",
" uv = _unit_vector(p - beacon_positions[i, :])\n",
" estimated_positions[i, :] = d * uv + beacon_positions[i, :]\n",
" \n",
" p = list(init_pos)\n",
" estimated_positions = np.zeros((len(signals), 2))\n",
" if verbose > 0:\n",
" print \"- Initial position, \", p\n",
" for i in range(n):\n",
" _update_estimated_positions(estimated_positions, p)\n",
" p[0] -= gamma * np.sum(p[0] - estimated_positions[:, 0])\n",
" p[1] -= gamma * np.sum(p[1] - estimated_positions[:, 1]) \n",
" if verbose > 1:\n",
" print i, \"-- Update \", p \n",
" if verbose > 0:\n",
" print \"- Computed \", p\n",
" return p"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"p = compute_position(signals, rssi_to_dist_f_list, beacon_positions, gamma=0.1, n=100)"
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nwNJhhTaJMoEAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10b42d0d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(12, 8))\n",
"for i, s in enumerate(signals):\n",
" beacon_pos = beacon_positions[i]\n",
" pts = points_2d_from_rssi(s, rssi_to_dist_f_list[i], beacon_pos)\n",
" plt.title(\"Localization on RSSI\")\n",
" plt.scatter(beacon_pos[0], beacon_pos[1], s=50, label='beacon %i' % i)\n",
" plt.scatter(pts[:,0], pts[:,1], color='r', s=5, label='beacon locs %i' % i)\n",
"\n",
"plt.scatter(p[0], p[1], color='g', s=50, label='computed loc')\n",
"plt.legend()\n",
"plt.xlim(np.min(beacon_positions[:,0]) - 2.0, np.max(beacon_positions[:,0]) + 2.0)\n",
"_ = plt.ylim(np.min(beacon_positions[:,1]) - 2.0, np.max(beacon_positions[:,1]) + 2.0)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.13"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment