Exemplo n.º 1
0
        public void fill_covariances(MatrixFixed M)
        {
            //assert (M.Rows() == total_state_size && M.Cols() == total_state_size);

            Pxx = M.Extract((int)motion_model.STATE_SIZE, (int)motion_model.STATE_SIZE, 0, 0);

            uint x_position = motion_model.STATE_SIZE;

            uint x_feature_no = 0;
            uint y_feature_no, y_position;
            Feature it;
            MatrixFixed itmat;
            for (int i=0;i<feature_list.Count;i++)
            {
                if (x_position < M.Columns)
                {
                    it = (Feature)feature_list[i];
                
                    y_feature_no = 0;
                    y_position = 0;

                    it.set_Pxy(M.Extract((int)motion_model.STATE_SIZE, (int)it.get_feature_measurement_model().FEATURE_STATE_SIZE, (int)y_position, (int)x_position));
                    y_position += motion_model.STATE_SIZE;

                    for (int j=0; j < it.matrix_block_list.Count; j++)
                    {
                        itmat = (MatrixFixed)(it.matrix_block_list[j]);

                        //assert (y_feature_no < x_feature_no);

                        itmat.Update(M.Extract(itmat.Rows, itmat.Columns, (int)y_position, (int)x_position));
                        y_position += (uint)itmat.Rows;
                        y_feature_no++;
                    }
                    it.set_Pyy(M.Extract((int)it.get_feature_measurement_model().FEATURE_STATE_SIZE,
                                         (int)it.get_feature_measurement_model().FEATURE_STATE_SIZE,
                                         (int)y_position, (int)x_position));

                    x_feature_no++;
                    x_position += it.get_feature_measurement_model().FEATURE_STATE_SIZE;                
                }
            }
            //assert (x_position <= total_state_size);
        }