From cd962bb53182e75b7a107f24f8e90d0ac1ce4f60 Mon Sep 17 00:00:00 2001 From: Joseph Mirabel <jmirabel@laas.fr> Date: Wed, 20 Jun 2018 11:10:45 +0200 Subject: [PATCH] Publish base_link position wrt odom in republish --- .../launch/display_sot.launch | 4 ++-- roscontrol_sot_talos/scripts/republish | 24 +++++++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/roscontrol_sot_talos/launch/display_sot.launch b/roscontrol_sot_talos/launch/display_sot.launch index 27fa8e7..1c5a9fd 100644 --- a/roscontrol_sot_talos/launch/display_sot.launch +++ b/roscontrol_sot_talos/launch/display_sot.launch @@ -2,11 +2,11 @@ <arg name="input_topic" default="/sot_hpp/state"/> <arg name="output_prefix" default="/sot"/> - <node pkg="roscontrol_sot_talos" name="republish" type="republish" args="$(arg input_topic) $(arg output_prefix)/joint_state"/> + <node pkg="roscontrol_sot_talos" name="republish" type="republish" args="$(arg input_topic) $(arg output_prefix)/joint_state true"/> <node pkg="tf" type="static_transform_publisher" name="base_link_broadcaster" - args="0 0 0 0 0 0 1 base_link $(arg output_prefix)/base_link 100" /> + args="0 0 0 0 0 0 1 odom $(arg output_prefix)/odom 100" /> <node pkg="robot_state_publisher" type="robot_state_publisher" name="rob_st_pub" > <remap from="/joint_states" to="$(arg output_prefix)/joint_state" /> diff --git a/roscontrol_sot_talos/scripts/republish b/roscontrol_sot_talos/scripts/republish index c362213..e64de85 100755 --- a/roscontrol_sot_talos/scripts/republish +++ b/roscontrol_sot_talos/scripts/republish @@ -1,16 +1,19 @@ #!/usr/bin/env python # license removed for brevity -import rospy +import rospy, tf from dynamic_graph_bridge_msgs.msg import Vector from sensor_msgs.msg import JointState import sys +publish_root_wrt_odom = False if len(sys.argv)>1: input_topic = sys.argv[1] if len(sys.argv)>2: output_topic = sys.argv[2] else: output_topic = "/sot/joint_state" + if len(sys.argv)>3: + publish_root_wrt_odom = (sys.argv[3].lower() in ("true","on")) else: input_topic = "/sot_hpp/state" @@ -20,13 +23,21 @@ pub = rospy.Publisher(output_topic, JointState, queue_size=10) seqnb = 0 aJS = JointState() +if publish_root_wrt_odom: + if output_topic.find('/') >= 0: + output_prefix = output_topic.rsplit('/',1)[0] + '/' + else: + output_prefix = "" + rospy.loginfo("Will publish " + output_prefix + "base_link with respect to " + output_prefix + "odom") + jointnames = rospy.get_param("/sot_controller/joint_names") def jointreceived(jstates): global seqnb seqnb = seqnb+1 + time = rospy.Time.now() aJS.header.seq = seqnb - aJS.header.stamp = rospy.Time.now() + aJS.header.stamp = time aJS.header.frame_id = "base_link" aJS.name = jointnames aJS.position = jstates.data[6:] @@ -34,6 +45,15 @@ def jointreceived(jstates): aJS.effort = [] pub.publish(aJS) + if publish_root_wrt_odom and len(jstates.data) > 6: + br = tf.TransformBroadcaster() + br.sendTransform(jstates.data[0:3], + tf.transformations.quaternion_from_euler( + jstates.data[3], jstates.data[4], jstates.data[5]), + time, + output_prefix + "base_link", + output_prefix + "odom") + def listener(): rospy.Subscriber(input_topic, Vector, jointreceived) rospy.spin() -- GitLab