diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b8ced88496ee93ccd999f1e1503d81c6c4b18a7..bddcdef0349f720859a73b497b917cd1f86df451 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,14 +164,17 @@ add_executable(MqttToRosNode src/MqttToRosNode.cpp ${PROTO_SRCS} ${PROTO_HDRS}) add_executable(MqttRosConnectionTestNode src/MqttRosConnectionTestNode.cpp ${PROTO_SRCS} ${PROTO_HDRS}) add_executable(${PROJECT_NAME}_safety_zone_spawner src/safety_zone_spawner.cpp) add_executable(${PROJECT_NAME}_safety_zone_monitor src/safety_zone_monitor.cpp src/SafetyZoneMonitor.cpp src/SafetyZoneMonitor.h) +add_executable(${PROJECT_NAME}_acceleration_publisher src/acceleration_publisher.cpp) set_target_properties(${PROJECT_NAME}_safety_zone_spawner PROPERTIES OUTPUT_NAME safety_zone_spawner PREFIX "") set_target_properties(${PROJECT_NAME}_safety_zone_monitor PROPERTIES OUTPUT_NAME safety_zone_monitor PREFIX "") +set_target_properties(${PROJECT_NAME}_acceleration_publisher PROPERTIES OUTPUT_NAME acceleration_publisher PREFIX "") add_dependencies(${PROJECT_NAME}_safety_zone_spawner ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) add_dependencies(${PROJECT_NAME}_safety_zone_monitor ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) +add_dependencies(${PROJECT_NAME}_acceleration_publisher ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) # Specify libraries to link a library or executable target against target_link_libraries(TrajectoryUtil @@ -199,4 +202,6 @@ target_link_libraries(TimedPlanner ${catkin_LIBRARIES} TrajectoryUtil) target_link_libraries(${PROJECT_NAME}_safety_zone_spawner ${catkin_LIBRARIES}) -target_link_libraries(${PROJECT_NAME}_safety_zone_monitor ${catkin_LIBRARIES}) \ No newline at end of file +target_link_libraries(${PROJECT_NAME}_safety_zone_monitor ${catkin_LIBRARIES}) + +target_link_libraries(${PROJECT_NAME}_acceleration_publisher ${catkin_LIBRARIES}) \ No newline at end of file diff --git a/launch/simulation_rosrag_test.launch b/launch/simulation_rosrag_test.launch index 638293d1eb339325009cf50c8437c2b75cdad37d..7dbd74a800a2ecf7b34ba4998d45c69a3d97de28 100644 --- a/launch/simulation_rosrag_test.launch +++ b/launch/simulation_rosrag_test.launch @@ -12,4 +12,7 @@ <node name="safety_zone_spawner" pkg="panda_mqtt_connector" type="safety_zone_spawner" respawn="false" output="screen"/> <node name="safety_zone_monitor" pkg="panda_mqtt_connector" type="safety_zone_monitor" respawn="false" output="screen"/> <node name="MqttRosConnectionTestNode" pkg="panda_mqtt_connector" type="MqttRosConnectionTestNode" respawn="false" output="screen"/> + <node name="acceleration_publisher" pkg="panda_mqtt_connector" type="acceleration_publisher" respawn="false" output="screen"/> + <node name="transform-riz" pkg="topic_tools" type="transform" args="/panda_mqtt_connector/robot_in_zone /panda_mqtt_connector/riz std_msgs/Float64 -- 'm.data*-1'" /> + <node name="rqt_plot" pkg="rqt_plot" type="rqt_plot" respawn="false" output="screen" args="/gazebo/link_states/pose[10]/position/x:y:z /panda_mqtt_connector/velocity/data /panda_mqtt_connector/max_velocity/data /panda_mqtt_connector/riz" /> </launch> diff --git a/src/acceleration_publisher.cpp b/src/acceleration_publisher.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c6e7572345f853b50e8039b6d17d28fda60dcad5 --- /dev/null +++ b/src/acceleration_publisher.cpp @@ -0,0 +1,67 @@ +/*! \file acceleration_publisher.cpp + \brief ROS node main file that publishes + + \author Johannes Mey + \date 18.07.20 +*/ + +#include <ros/ros.h> + +#include <ros/ros.h> +#include <tf2_ros/transform_listener.h> +#include <geometry_msgs/TransformStamped.h> +#include <std_msgs/Float64.h> + +namespace acceleration_publisher { +} + +/** + * The main method of the ROS node + * + */ +int main(int argc, char **argv) { + + // setup this ros-node + ros::init(argc, argv, "acceleration_publisher"); + ros::NodeHandle n("panda_mqtt_connector"); + + ros::Publisher vel = n.advertise<std_msgs::Float64>("velocity", 10); + + tf2_ros::Buffer tfBuffer; + tf2_ros::TransformListener tfListener(tfBuffer); + + // the duration to compute the velocity + ros::Duration dt{1, 500000}; // 0,10000 + // wait for the duration. this way the old time at least exists + dt.sleep(); + + while (n.ok()) { + + 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)); + + } catch (tf2::TransformException &ex) { + ROS_WARN("%s", ex.what()); + ros::Duration(1.0).sleep(); + continue; + } + + std_msgs::Float64 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.data = velocity; + vel.publish(msg); + } + + return 0; +} \ No newline at end of file