\brief TKalmanFilter::CreateLinearAcceleration \param xy0 \param xyv0
| 238 | /// \param xyv0 |
| 239 | /// |
| 240 | void TKalmanFilter::CreateLinearAcceleration(Point_t xy0, Point_t xyv0) |
| 241 | { |
| 242 | // 6 state variables, 2 measurements |
| 243 | m_linearKalman.init(6, 2, 0, El_t); |
| 244 | // Transition cv::Matrix |
| 245 | const track_t dt = m_deltaTime; |
| 246 | const track_t dt2 = 0.5f * m_deltaTime * m_deltaTime; |
| 247 | m_linearKalman.transitionMatrix = (cv::Mat_<track_t>(6, 6) << |
| 248 | 1, 0, dt, 0, dt2, 0, |
| 249 | 0, 1, 0, dt, 0, dt2, |
| 250 | 0, 0, 1, 0, dt, 0, |
| 251 | 0, 0, 0, 1, 0, dt, |
| 252 | 0, 0, 0, 0, 1, 0, |
| 253 | 0, 0, 0, 0, 0, 1); |
| 254 | |
| 255 | // init... |
| 256 | m_lastPointResult = xy0; |
| 257 | m_linearKalman.statePre.at<track_t>(0) = xy0.x; // x |
| 258 | m_linearKalman.statePre.at<track_t>(1) = xy0.y; // y |
| 259 | m_linearKalman.statePre.at<track_t>(2) = xyv0.x; // vx |
| 260 | m_linearKalman.statePre.at<track_t>(3) = xyv0.y; // vy |
| 261 | m_linearKalman.statePre.at<track_t>(4) = 0; // ax |
| 262 | m_linearKalman.statePre.at<track_t>(5) = 0; // ay |
| 263 | |
| 264 | m_linearKalman.statePost.at<track_t>(0) = xy0.x; |
| 265 | m_linearKalman.statePost.at<track_t>(1) = xy0.y; |
| 266 | m_linearKalman.statePost.at<track_t>(2) = xyv0.x; |
| 267 | m_linearKalman.statePost.at<track_t>(3) = xyv0.y; |
| 268 | m_linearKalman.statePost.at<track_t>(4) = 0; |
| 269 | m_linearKalman.statePost.at<track_t>(5) = 0; |
| 270 | |
| 271 | cv::setIdentity(m_linearKalman.measurementMatrix); |
| 272 | |
| 273 | track_t n1 = pow(m_deltaTime, 4.f) / 4.f; |
| 274 | track_t n2 = pow(m_deltaTime, 3.f) / 2.f; |
| 275 | track_t n3 = pow(m_deltaTime, 2.f); |
| 276 | m_linearKalman.processNoiseCov = (cv::Mat_<track_t>(6, 6) << |
| 277 | n1, 0, n2, 0, n2, 0, |
| 278 | 0, n1, 0, n2, 0, n2, |
| 279 | n2, 0, n3, 0, n3, 0, |
| 280 | 0, n2, 0, n3, 0, n3, |
| 281 | 0, 0, n2, 0, n3, 0, |
| 282 | 0, 0, 0, n2, 0, n3); |
| 283 | |
| 284 | m_linearKalman.processNoiseCov *= m_accelNoiseMag; |
| 285 | |
| 286 | cv::setIdentity(m_linearKalman.measurementNoiseCov, cv::Scalar::all(0.1)); |
| 287 | |
| 288 | cv::setIdentity(m_linearKalman.errorCovPost, cv::Scalar::all(.1)); |
| 289 | |
| 290 | m_initialPoints.reserve(MIN_INIT_VALS); |
| 291 | |
| 292 | m_initialized = true; |
| 293 | } |
| 294 | |
| 295 | /// |
| 296 | /// \brief TKalmanFilter::CreateLinearAcceleration |