From 77c2a669b2ffcd053ed60efd87cc2ba5059ec797 Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Tue, 21 Jul 2020 01:15:41 +0200 Subject: [PATCH] publish smooth and exact velocity --- src/acceleration_publisher.cpp | 67 ++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/src/acceleration_publisher.cpp b/src/acceleration_publisher.cpp index 8844cab..d4584d1 100644 --- a/src/acceleration_publisher.cpp +++ b/src/acceleration_publisher.cpp @@ -10,9 +10,39 @@ #include <tf2_ros/transform_listener.h> #include <panda_mqtt_connector/StampedVelocity.h> +void +publishVelocity(const ros::Publisher &vel_smoothed, const tf2_ros::Buffer &tfBuffer, const ros::Duration &dt); + namespace acceleration_publisher { } +void publishVelocity(const ros::Publisher &vel_smoothed, const tf2_ros::Buffer &tfBuffer, const ros::Duration &dt) { + geometry_msgs::TransformStamped transformStamped; + try { + ros::Time now = ros::Time::now(); + ros::Time past = now - dt; + + transformStamped = tfBuffer.lookupTransform("panda_hand", now, + "panda_hand", past, + "world", ros::Duration(1.0)); + + double dx = transformStamped.transform.translation.x; + double dy = transformStamped.transform.translation.y; + double dz = transformStamped.transform.translation.z; + double smoothed_velocity = sqrt(dx * dx + dy * dz + dz * dz) / dt.toSec(); + + if (!isnan(smoothed_velocity)) { + panda_mqtt_connector::StampedVelocity msg; + msg.header.stamp = now - (dt * .5); + msg.velocity = smoothed_velocity; + vel_smoothed.publish(msg); + } + } catch (tf2::TransformException &ex) { + ROS_WARN("%s", ex.what()); + ros::Duration(1.0).sleep(); + } +} + /** * The main method of the ROS node * @@ -24,43 +54,26 @@ int main(int argc, char **argv) { ros::NodeHandle n("panda_mqtt_connector"); ros::Publisher vel = n.advertise<panda_mqtt_connector::StampedVelocity>("velocity", 10); + ros::Publisher vel_smoothed = n.advertise<panda_mqtt_connector::StampedVelocity>("velocity_smoothed", 10); tf2_ros::Buffer tfBuffer; tf2_ros::TransformListener tfListener(tfBuffer); // the duration to compute the velocity - ros::Duration dt{1, 500000}; // 0,10000 + ros::Duration dt{0, 10000000}; // 0,10000 + ros::Duration dt_smooth{0, 330000000}; // 0,10000 // wait for the duration. this way the old time at least exists - dt.sleep(); + dt_smooth.sleep(); while (n.ok()) { - geometry_msgs::TransformStamped transformStamped; - try { - ros::Time now = ros::Time::now(); - ros::Time past = now - dt; + ros::Duration(0.01).sleep(); - transformStamped = tfBuffer.lookupTransform("panda_hand", now, - "panda_hand", past, - "world", ros::Duration(1.0)); - - panda_mqtt_connector::StampedVelocity msg; - - double dx = transformStamped.transform.translation.x; - double dy = transformStamped.transform.translation.y; - double dz = transformStamped.transform.translation.z; - - double velocity = sqrt(dx*dx + dy*dz + dz*dz)/dt.toSec(); - msg.header.stamp = now - (dt * .5); - msg.velocity = velocity; - vel.publish(msg); - - } catch (tf2::TransformException &ex) { - ROS_WARN("%s", ex.what()); - ros::Duration(1.0).sleep(); - continue; - } + publishVelocity(vel, tfBuffer, dt); + publishVelocity(vel_smoothed, tfBuffer, dt_smooth); } return 0; -} \ No newline at end of file +} + + -- GitLab