diff options
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/main.cpp b/src/main.cpp index 44e09f3..86d87f4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -36,8 +36,11 @@ imuCallback(const message &msg, Eigen::Matrix<double,9,1> &X, const Eigen::Quate { if (!seenutm || !seenpva || (dt.secs==0 && dt.nsecs==0)) return; using Eigen::Vector3d; - Vector3d acc(msg.linear_acceleration.x,msg.linear_acceleration.y,msg.linear_acceleration.z); - Vector3d ang(msg.angular_velocity.x,msg.angular_velocity.y,msg.angular_velocity.z); + Vector3d acc(msg.linear_acceleration.y,msg.linear_acceleration.x,-msg.linear_acceleration.z); + Vector3d ang(msg.angular_velocity.y,msg.angular_velocity.x,-msg.angular_velocity.z); + // WARNING: This is the bias for 1112-1 + Vector3d ang_bias(-2.795871394666666222e-03, 6.984255690000021506e-03, 1.418145565750002614e-03); + ang-=ang_bias; Body mu; double dtf = dt.secs+dt.nsecs*1e-9; mu.motionModel(X,acc,ang,q,dtf); @@ -52,14 +55,14 @@ pvaCallback(const message &msg, Eigen::Matrix<double,9,1> &X, Eigen::Quaternion< attitude_t A=msg.attitude; roll = M_PI*msg.attitude.roll/180.; pitch = M_PI*msg.attitude.pitch/180.; - yaw = M_PI*(90.-msg.attitude.yaw)/180.; + yaw = M_PI*(msg.attitude.yaw)/180.; Eigen::Matrix3d R; R = AngleAxisd(yaw, Vector3d::UnitZ()) - * AngleAxisd(roll, Vector3d::UnitY()) - * AngleAxisd(pitch, Vector3d::UnitX()); + * AngleAxisd(roll, Vector3d::UnitX()) + * AngleAxisd(pitch, Vector3d::UnitY()); q = Eigen::Quaternion<double>(R); if (!seenpva) { - Vector3d vw(msg.velocity.east,msg.velocity.north,msg.velocity.up); + Vector3d vw(msg.velocity.north,msg.velocity.east,-msg.velocity.up); X.segment(3,3) = R.transpose()*vw; seenpva=true; } @@ -71,9 +74,9 @@ utmCallback(const message &msg, Eigen::Matrix<double,9,1> &X) { if (!seenutm) { seenutm=true; - X[0] = msg.utm.easting; - X[1] = msg.utm.northing; - X[2] = msg.utm.up; + X[0] = msg.utm.northing; + X[1] = msg.utm.easting; + X[2] = -msg.utm.up; } return; } @@ -165,13 +168,18 @@ main(int argc, char **argv) { Eigen::Quaternion<double> qbw; Eigen::Matrix<double,9,1> bodyStateVector; - bodyStateVector.segment(6,3) << 0.01465135, -0.03713532, -0.00709229; + // bias in FRD coordinates + bodyStateVector.segment(6,3) << 0.975*-0.03713532, 0.9*0.01465135, -0.00709229; timestamp dt{0,0}; timestamp t_old{0,0}; #ifdef USE_ROS #else /* ----- not USE_ROS ----- */ + using std::cout; + using std::endl; + using std::cerr; +printf("UTM-Zone,UTM-Ch,UTM-North,UTM-East\n"); // Read sensors from file char line[MAXLINE]; while (scanf("%s", line)!=EOF) { @@ -193,7 +201,7 @@ while (scanf("%s", line)!=EOF) { pvaCallback(msg, bodyStateVector, qbw); //std::cout << bodyStateVector.transpose() << std::endl; if (seenutm) - printf("%d,%c,%f,%f\n", msg.utm.zone_i,msg.utm.zone_c,bodyStateVector[1],bodyStateVector[0]); + printf("%d,%c,%f,%f\n", msg.utm.zone_i,msg.utm.zone_c,bodyStateVector[0],bodyStateVector[1]); break; case RAWIMUS: |