Skip to content

Instantly share code, notes, and snippets.

@jmbarr
Created November 1, 2020 15:57
Show Gist options
  • Save jmbarr/897f85b078cc296f6a7c4cd8df9d1a28 to your computer and use it in GitHub Desktop.
Save jmbarr/897f85b078cc296f6a7c4cd8df9d1a28 to your computer and use it in GitHub Desktop.
Sensor management example 1
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from datetime import datetime, timedelta\n",
"start_time = datetime.now()\n",
"\n",
"from stonesoup.models.transition.linear import CombinedLinearGaussianTransitionModel, \\\n",
" ConstantVelocity\n",
"from stonesoup.types.groundtruth import GroundTruthPath, GroundTruthState"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Generate ground truth"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# np.random.seed(1991)\n",
"\n",
"\n",
"transition_model = CombinedLinearGaussianTransitionModel([ConstantVelocity(0.005),\n",
" ConstantVelocity(0.005)])\n",
"\n",
"truth = GroundTruthPath([GroundTruthState([0, 1, 0, 1], timestamp=start_time)])\n",
"for k in range(1, 21):\n",
" truth.append(GroundTruthState(\n",
" transition_model.function(truth[k-1], noise=True, time_interval=timedelta(seconds=1)),\n",
" timestamp=start_time+timedelta(seconds=k)))\n",
"truths = truth\n",
"\n",
"truth = GroundTruthPath([GroundTruthState([0, 1, 20, 1], timestamp=start_time)])\n",
"for k in range(1, 21):\n",
" truth.append(GroundTruthState(\n",
" transition_model.function(truth[k-1], noise=True, time_interval=timedelta(seconds=1)),\n",
" timestamp=start_time+timedelta(seconds=k)))\n",
"truths = [truths, truth]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Plot ground truth"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from matplotlib import pyplot as plt\n",
"\n",
"fig = plt.figure(figsize=(10, 6))\n",
"ax = fig.add_subplot(1, 1, 1)\n",
"ax.set_xlabel(\"$x$\")\n",
"ax.set_ylabel(\"$y$\")\n",
"ax.set_ylim(0, 45)\n",
"ax.set_xlim(0, 25)\n",
"\n",
"for truth in truths:\n",
" ax.plot([state.state_vector[0] for state in truth],\n",
" [state.state_vector[2] for state in truth],\n",
" linestyle=\"--\",)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create a sensor manager class"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"from stonesoup.base import Property, Base\n",
"\n",
"class aSensorManager(Base):\n",
" \n",
" action_list = Property(list, doc=\"List of possible actions\")\n",
" \n",
" def choose_actions(self):\n",
" return self.action_list[int(np.floor(len(self.action_list)*np.random.uniform()))]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Create an instance of a sensor manager"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"actions = [0,1]\n",
"sensormanager = aSensorManager(actions)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create a measurement model"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"from stonesoup.models.measurement.linear import LinearGaussian\n",
"\n",
"measurement_model = LinearGaussian(\n",
" ndim_state=4,\n",
" mapping=(0, 2),\n",
" noise_covar=np.array([[0.75, 0],\n",
" [0, 0.75]])\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create the Kalman predictor and updater"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"from stonesoup.predictor.kalman import KalmanPredictor\n",
"predictor = KalmanPredictor(transition_model)\n",
"\n",
"from stonesoup.updater.kalman import KalmanUpdater\n",
"updater = KalmanUpdater(measurement_model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Run the Kalman filters\n",
"\n",
"#### We create 2 priors which estimate the targets’ initial states."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"from stonesoup.types.state import GaussianState\n",
"prior = [GaussianState([[0], [1], [0], [1]], np.diag([1.5, 0.5, 1.5, 0.5]), timestamp=start_time), \n",
" GaussianState([[0], [1], [20], [1]], np.diag([1.5, 0.5, 1.5, 0.5]), timestamp=start_time)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Run the loop"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"from stonesoup.types.hypothesis import SingleHypothesis\n",
"from stonesoup.types.track import Track\n",
"from stonesoup.types.detection import Detection\n",
"\n",
"tracks = [Track(),Track()]\n",
"tracks[0].append(prior[0])\n",
"tracks[1].append(prior[1])\n",
"\n",
"measurements = []\n",
"predictions = []\n",
"\n",
"for k in range(1, 21):\n",
" # At each timestep activate the sensor manager to decide which object to observe\n",
" chosen_target = sensormanager.choose_actions()\n",
" \n",
" # The ground truth will therefore be:\n",
" selected_truth = truths[chosen_target][k]\n",
" \n",
" # observe this\n",
" measurement = measurement_model.function(selected_truth, noise=True)\n",
" measurements.append(Detection(measurement, timestamp=selected_truth.timestamp))\n",
" \n",
" # Generate clutter at this time-step\n",
" # Skip for now\n",
"\n",
" # Do the prediction (for both targets) and the update for those\n",
" for ind in range(0,len(tracks)):\n",
" prediction = predictor.predict(tracks[ind][-1], timestamp=measurements[-1].timestamp)\n",
" \n",
" if ind == chosen_target: # update the prediction \n",
" # Association - just a single hypothesis at present\n",
" hypothesis = SingleHypothesis(prediction, measurements[-1]) # Group a prediction and measurement\n",
"\n",
" # update and add to track\n",
" post = updater.update(hypothesis) \n",
" else:\n",
" post = prediction\n",
" \n",
" tracks[ind].append(post)\n",
" prior[ind] = tracks[ind][-1]\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Do plotting"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x432 with 1 Axes>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ax.plot([state.state_vector[0] for state in tracks[0]],\n",
" [state.state_vector[2] for state in tracks[0]],\n",
" marker=\".\", color='r')\n",
"\n",
"\n",
"ax.plot([state.state_vector[0] for state in tracks[1]],\n",
" [state.state_vector[2] for state in tracks[1]],\n",
" marker=\".\", color='b')\n",
"\n",
"from matplotlib.patches import Ellipse\n",
"for state in tracks[0]:\n",
" w, v = np.linalg.eig(measurement_model.matrix()@state.covar@measurement_model.matrix().T)\n",
" max_ind = np.argmax(w)\n",
" min_ind = np.argmin(w)\n",
" orient = np.arctan2(v[1,max_ind], v[0,max_ind])\n",
" ellipse = Ellipse(xy=(state.state_vector[0], state.state_vector[2]),\n",
" width=2*np.sqrt(w[max_ind]), height=2*np.sqrt(w[min_ind]),\n",
" angle=np.rad2deg(orient),\n",
" alpha=0.2,\n",
" color='r')\n",
" ax.add_artist(ellipse)\n",
"\n",
"for state in tracks[1]:\n",
" w, v = np.linalg.eig(measurement_model.matrix()@state.covar@measurement_model.matrix().T)\n",
" max_ind = np.argmax(w)\n",
" min_ind = np.argmin(w)\n",
" orient = np.arctan2(v[1,max_ind], v[0,max_ind])\n",
" ellipse = Ellipse(xy=(state.state_vector[0], state.state_vector[2]),\n",
" width=2*np.sqrt(w[max_ind]), height=2*np.sqrt(w[min_ind]),\n",
" angle=np.rad2deg(orient),\n",
" alpha=0.2,\n",
" color='b')\n",
" ax.add_artist(ellipse)\n",
"\n",
"fig"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment