Skip to content

Commit e90693b

Browse files
committed
publish orientation as Pose to vis on rviz
1 parent ccffa44 commit e90693b

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

imu_filter_madgwick/include/imu_filter_madgwick/imu_filter_ros.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
2929
#include <sensor_msgs/Imu.h>
3030
#include <sensor_msgs/MagneticField.h>
3131
#include <geometry_msgs/Vector3Stamped.h>
32+
#include <tf2_ros/buffer.h>
3233
#include "tf2_ros/transform_broadcaster.h"
34+
#include <tf2_ros/transform_listener.h>
3335
#include <message_filters/subscriber.h>
3436
#include <message_filters/synchronizer.h>
3537
#include <message_filters/sync_policies/approximate_time.h>
@@ -74,8 +76,11 @@ class ImuFilterRos
7476

7577
ros::Publisher rpy_filtered_debug_publisher_;
7678
ros::Publisher rpy_raw_debug_publisher_;
79+
ros::Publisher orientation_filtered_publisher_;
7780
ros::Publisher imu_publisher_;
7881
tf2_ros::TransformBroadcaster tf_broadcaster_;
82+
tf2_ros::Buffer tf_buffer_;
83+
tf2_ros::TransformListener tf_listener_;
7984

8085
boost::shared_ptr<FilterConfigServer> config_server_;
8186
ros::Timer check_topics_timer_;
@@ -111,6 +116,7 @@ class ImuFilterRos
111116
void imuCallback(const ImuMsg::ConstPtr& imu_msg_raw);
112117

113118
void publishFilteredMsg(const ImuMsg::ConstPtr& imu_msg_raw);
119+
void publishOrientationFiltered(const ImuMsg::ConstPtr& imu_msg);
114120
void publishTransform(const ImuMsg::ConstPtr& imu_msg_raw);
115121

116122
void publishRawMsg(const ros::Time& t, float roll, float pitch, float yaw);

imu_filter_madgwick/src/imu_filter_ros.cpp

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@
2525
#include "imu_filter_madgwick/imu_filter_ros.h"
2626
#include "imu_filter_madgwick/stateless_orientation.h"
2727
#include "geometry_msgs/TransformStamped.h"
28+
#include "geometry_msgs/PoseStamped.h"
2829
#include <tf2/LinearMath/Quaternion.h>
2930
#include <tf2/LinearMath/Matrix3x3.h>
3031

3132
ImuFilterRos::ImuFilterRos(ros::NodeHandle nh, ros::NodeHandle nh_private)
32-
: nh_(nh), nh_private_(nh_private), initialized_(false)
33+
: nh_(nh),
34+
nh_private_(nh_private),
35+
initialized_(false),
36+
tf_listener_(tf_buffer_)
3337
{
3438
ROS_INFO("Starting ImuFilter");
3539

@@ -121,6 +125,10 @@ ImuFilterRos::ImuFilterRos(ros::NodeHandle nh, ros::NodeHandle nh_private)
121125

122126
rpy_raw_debug_publisher_ = nh_.advertise<geometry_msgs::Vector3Stamped>(
123127
ros::names::resolve("imu") + "/rpy/raw", 5);
128+
129+
orientation_filtered_publisher_ =
130+
nh_private.advertise<geometry_msgs::PoseStamped>(
131+
ros::names::resolve("imu") + "/orientation_filtered", 5);
124132
}
125133

126134
// **** register subscribers
@@ -407,9 +415,37 @@ void ImuFilterRos::publishFilteredMsg(const ImuMsg::ConstPtr& imu_msg_raw)
407415

408416
rpy.header = imu_msg_raw->header;
409417
rpy_filtered_debug_publisher_.publish(rpy);
418+
419+
publishOrientationFiltered(imu_msg);
410420
}
411421
}
412422

423+
void ImuFilterRos::publishOrientationFiltered(const ImuMsg::ConstPtr& imu_msg)
424+
{
425+
geometry_msgs::PoseStamped pose_msg;
426+
pose_msg.header.stamp = imu_msg->header.stamp;
427+
pose_msg.header.frame_id = fixed_frame_;
428+
pose_msg.pose.orientation = imu_msg->orientation;
429+
430+
// get the current transform from the fixed frame to the imu frame
431+
geometry_msgs::TransformStamped transform;
432+
try
433+
{
434+
transform = tf_buffer_.lookupTransform(
435+
fixed_frame_, imu_msg->header.frame_id, imu_msg->header.stamp);
436+
} catch (tf2::TransformException& ex)
437+
{
438+
ROS_WARN("%s", ex.what());
439+
return;
440+
}
441+
442+
pose_msg.pose.position.x = transform.transform.translation.x;
443+
pose_msg.pose.position.y = transform.transform.translation.y;
444+
pose_msg.pose.position.z = transform.transform.translation.z;
445+
446+
orientation_filtered_publisher_.publish(pose_msg);
447+
}
448+
413449
void ImuFilterRos::publishRawMsg(const ros::Time& t, float roll, float pitch,
414450
float yaw)
415451
{

0 commit comments

Comments
 (0)