Skip to content
Snippets Groups Projects
Commit b9b76b36 authored by Joan Vallvé Navarro's avatar Joan Vallvé Navarro
Browse files

averaging solpe but only once orienation

parent 125c025d
No related branches found
No related tags found
2 merge requests!5After cmake and const refactor,!3new release
...@@ -314,20 +314,32 @@ void SubscriberImu::callback(const sensor_msgs::Imu::ConstPtr& msg) ...@@ -314,20 +314,32 @@ void SubscriberImu::callback(const sensor_msgs::Imu::ConstPtr& msg)
// Publish gravity projection onto sloped 2D plane // Publish gravity projection onto sloped 2D plane
if (pub_slope_.getNumSubscribers() != 0) if (pub_slope_.getNumSubscribers() != 0)
{ {
Eigen::Vector2d g_local_xy; double slope, orientation;
if (non_orthogonal_gravity_) if (non_orthogonal_gravity_)
g_local_xy = std::static_pointer_cast<SensorImu2d>(sensor_ptr_)->getStateVector("G"); {
Eigen::Vector2d g_local_xy = std::static_pointer_cast<SensorImu2d>(sensor_ptr_)->getStateVector("G");
slope = asin(g_local_xy.norm() / gravity().norm());
orientation = atan2(g_local_xy(1),g_local_xy(0));
}
else if (std::dynamic_pointer_cast<SensorImu>(sensor_ptr_) != nullptr) else if (std::dynamic_pointer_cast<SensorImu>(sensor_ptr_) != nullptr)
{ {
g_local_xy.setZero(); slope = 0;
auto n_frames = 0;
for (auto frm_it : sensor_ptr_->getProblem()->getTrajectory()->getFrameMap()) for (auto frm_it : sensor_ptr_->getProblem()->getTrajectory()->getFrameMap())
{ {
auto q_first = Eigen::Quaterniond(Eigen::Vector4d(frm_it.second->getStateVector("O"))); auto q_frame = Eigen::Quaterniond(Eigen::Vector4d(frm_it.second->getStateVector("O")));
g_local_xy += (q_first.conjugate() * gravity()).head<2>(); auto g_local_xy = (q_frame.conjugate() * gravity()).head<2>();
slope += asin(g_local_xy.norm() / gravity().norm());
if (n_frames == 0)
orientation = atan2(g_local_xy(1),g_local_xy(0));
n_frames++;
} }
g_local_xy /= sensor_ptr_->getProblem()->getTrajectory()->getFrameMap().size(); slope /= n_frames;
} }
else else
return; return;
...@@ -336,11 +348,8 @@ void SubscriberImu::callback(const sensor_msgs::Imu::ConstPtr& msg) ...@@ -336,11 +348,8 @@ void SubscriberImu::callback(const sensor_msgs::Imu::ConstPtr& msg)
geometry_msgs::Vector3Stamped g_msg; geometry_msgs::Vector3Stamped g_msg;
g_msg.header.stamp = msg->header.stamp; g_msg.header.stamp = msg->header.stamp;
g_msg.header.frame_id = "/map"; g_msg.header.frame_id = "/map";
// slope g_msg.vector.x = slope;
g_msg.vector.x = asin(g_local_xy.norm() / gravity().norm()); g_msg.vector.y = orientation;
// orientation
g_msg.vector.y = atan2(g_local_xy(1),g_local_xy(0));
// empty
g_msg.vector.z = 0; g_msg.vector.z = 0;
// publish // publish
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment