Have observed angular velocities published by twist pub are too small by a factor of 100 in my case. This is while running the tracker at 100hz. I believe this driver is missing a division by dt.
Looking in VrpnTrackerRos::handle_twist, I see the vrpn_TRACKERVELCBvel_quat field is currently converted from quaternion to Euler then published without further modification.
typedef struct _vrpn_TRACKERVELCB {
struct timeval msg_time; // Time of the report
vrpn_int32 sensor; // Which sensor is reporting
vrpn_float64 vel[3]; // Velocity of the sensor
vrpn_float64 vel_quat[4]; // Rotation of the sensor per vel_quat_dt
vrpn_float64 vel_quat_dt; // delta time (in secs) for vel_quat
} vrpn_TRACKERVELCB;
The vel_quat field provides change in rotation over a time interval, and the vel_quat_dt provides the length of that time interval. Hence the user must divide vel_quat by vel_quat_dt to determine rotation rate per second. This driver does not perform that division, hence the scaling error on published angular velocity.
I'd suggest the following (untested!) change is appropriate:
Have observed angular velocities published by twist pub are too small by a factor of 100 in my case. This is while running the tracker at 100hz. I believe this driver is missing a division by
dt
.Looking in
VrpnTrackerRos::handle_twist
, I see thevrpn_TRACKERVELCB
vel_quat
field is currently converted from quaternion to Euler then published without further modification.Note in the the definition of the
vrpn_TRACKERVELCB
struct:The
vel_quat
field provides change in rotation over a time interval, and thevel_quat_dt
provides the length of that time interval. Hence the user must dividevel_quat
byvel_quat_dt
to determine rotation rate per second. This driver does not perform that division, hence the scaling error on published angular velocity.I'd suggest the following (untested!) change is appropriate: