kritz 98801ad17b
Support vision velocity expressed in body frame too (#708)
* Support vision velocity expressed in body frame

* Use switch statement for vision velocity frame

* Robustify vision velocity frame test

* Increase lower bound on vision velocity noise to 0.05 m/s
2020-05-12 16:03:35 +02:00

88 lines
1.4 KiB
C++

#include "vio.h"
namespace sensor_simulator
{
namespace sensor
{
Vio::Vio(std::shared_ptr<Ekf> ekf):Sensor(ekf)
{
}
Vio::~Vio()
{
}
void Vio::send(uint64_t time)
{
_vio_data.time_us = time;
_ekf->setExtVisionData(_vio_data);
}
void Vio::setData(const extVisionSample& vio_data)
{
_vio_data = vio_data;
}
void Vio::setVelocityVariance(const Vector3f& velVar)
{
setVelocityCovariance(matrix::diag(velVar));
}
void Vio::setVelocityCovariance(const Matrix3f& velCov)
{
_vio_data.velCov = velCov;
}
void Vio::setPositionVariance(const Vector3f& posVar)
{
_vio_data.posVar = posVar;
}
void Vio::setAngularVariance(float angVar)
{
_vio_data.angVar = angVar;
}
void Vio::setVelocity(const Vector3f& vel)
{
_vio_data.vel = vel;
}
void Vio::setPosition(const Vector3f& pos)
{
_vio_data.pos = pos;
}
void Vio::setOrientation(const Quatf& quat)
{
_vio_data.quat = quat;
}
void Vio::setVelocityFrameToBody()
{
_vio_data.vel_frame = BODY_FRAME_FRD;
}
void Vio::setVelocityFrameToLocal()
{
_vio_data.vel_frame = LOCAL_FRAME_FRD;
}
extVisionSample Vio::dataAtRest()
{
extVisionSample vio_data;
vio_data.pos = Vector3f{0.0f, 0.0f, 0.0f};;
vio_data.vel = Vector3f{0.0f, 0.0f, 0.0f};;
vio_data.quat = Quatf{1.0f, 0.0f, 0.0f, 0.0f};
vio_data.posVar = Vector3f{0.1f, 0.1f, 0.1f};
vio_data.velCov = matrix::eye<float ,3>() * 0.1f;
vio_data.angVar = 0.05f;
vio_data.vel_frame = LOCAL_FRAME_FRD;
return vio_data;
}
} // namespace sensor
} // namespace sensor_simulator