The base python installation has a file code.py; this causes
problems when trying to import files from the code subdirectory. I also tried to rearange some code so that book_format does not need to be imported if you are not running in a Jupyter Notebook.
This commit is contained in:
73
kf_book/DogSimulation.py
Normal file
73
kf_book/DogSimulation.py
Normal file
@@ -0,0 +1,73 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""Copyright 2015 Roger R Labbe Jr.
|
||||
|
||||
|
||||
Code supporting the book
|
||||
|
||||
Kalman and Bayesian Filters in Python
|
||||
https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python
|
||||
|
||||
|
||||
This is licensed under an MIT license. See the LICENSE.txt file
|
||||
for more information.
|
||||
"""
|
||||
|
||||
from __future__ import (absolute_import, division, print_function,
|
||||
unicode_literals)
|
||||
|
||||
|
||||
import copy
|
||||
import math
|
||||
import numpy as np
|
||||
from numpy.random import randn
|
||||
|
||||
class DogSimulation(object):
|
||||
|
||||
def __init__(self, x0=0, velocity=1,
|
||||
measurement_var=0.0, process_var=0.0):
|
||||
""" x0 - initial position
|
||||
velocity - (+=right, -=left)
|
||||
measurement_variance - variance in measurement m^2
|
||||
process_variance - variance in process (m/s)^2
|
||||
"""
|
||||
self.x = x0
|
||||
self.velocity = velocity
|
||||
self.measurement_noise = math.sqrt(measurement_var)
|
||||
self.process_noise = math.sqrt(process_var)
|
||||
|
||||
|
||||
def move(self, dt=1.0):
|
||||
'''Compute new position of the dog assuming `dt` seconds have
|
||||
passed since the last update.'''
|
||||
# compute new position based on velocity. Add in some
|
||||
# process noise
|
||||
velocity = self.velocity + randn() * self.process_noise * dt
|
||||
self.x += velocity * dt
|
||||
|
||||
|
||||
def sense_position(self):
|
||||
# simulate measuring the position with noise
|
||||
return self.x + randn() * self.measurement_noise
|
||||
|
||||
|
||||
def move_and_sense(self, dt=1.0):
|
||||
self.move(dt)
|
||||
x = copy.deepcopy(self.x)
|
||||
return x, self.sense_position()
|
||||
|
||||
|
||||
def run_simulation(self, dt=1, count=1):
|
||||
""" simulate the dog moving over a period of time.
|
||||
|
||||
**Returns**
|
||||
data : np.array[float, float]
|
||||
2D array, first column contains actual position of dog,
|
||||
second column contains the measurement of that position
|
||||
"""
|
||||
return np.array([self.move_and_sense(dt) for i in range(count)])
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user