ros / geometry Goto Github PK
View Code? Open in Web Editor NEWPackages for common geometric calculations including the ROS transform library, "tf". Also includes ROS bindings for "bullet" physics engine and "kdl" kinematics/dynamics package.
Packages for common geometric calculations including the ROS transform library, "tf". Also includes ROS bindings for "bullet" physics engine and "kdl" kinematics/dynamics package.
tf::Matrix3x3::getEulerYPR() returns incorrect results when passed matrices of the form
0 b 0
0 0 c
a 0 0
where a, b, and c are +/-1.
Fix here:
#46
Originally I noticed in this thread.
urdf/Tutorials
pages, there's no mention about tf being prerequisite.I added prerequisite section at the top of URDF tutorial page. I don't know whether this is sufficient.
Downstream packages using tf fail since it lacks to export the dependency on tf2. But e.g. exceptions.h exposes the tf2 header like tf2/exceptions.h.
to patch location of view_frame script and ros wiki compatibility.
I am using the default TF version that comes with Indigo.
The code to reproduce this error:
#!/usr/bin/env python
import rospy
import tf
if __name__ == '__main__':
rospy.init_node('tftest', log_level=rospy.INFO)
br = tf.TransformBroadcaster()
tr = tf.TransformListener()
rospy.loginfo("Spinning..")
rospy.sleep(0.2) #This delay seems to be also needed
while not rospy.is_shutdown():
curTime = rospy.Time.now()
#rospy.sleep(0.1)
br.sendTransform((0,0,0), (0,0,0, 1), curTime, 'frame1', 'frame2')
#rospy.sleep(0.02) #This delay is needed to retain both transformations
br.sendTransform((0,0,0), (0,0,0, 1), curTime, 'dummy0', 'dummy')
tr.waitForTransform('frame1', 'frame2', curTime, rospy.Duration(2))
print("Got transform")
rospy.sleep(0.2)
This error occurs if two transformations are sent too close to each others (delay of 0.02 s seems to be enough for my case) It would seem that some buffer is filling up too fast etc. Quick look through the TF code looked like there is a buffer of 100 values so that should not be an issue.
I was getting similar errors to #73 originally, so these might be related.
@tfoote What are these about?
/Users/william/nav_ws/src/tf/src/tf.cpp:411:2: warning: skipped porting [-W#warnings]
#warning skipped porting
^
/Users/william/nav_ws/src/tf/src/tf.cpp:448:2: warning: skipped porting [-W#warnings]
#warning skipped porting
^
view_frames needs graphviz to be installed.
Under Hydro the following minimal example
#!/usr/bin/env python
import roslib; roslib.load_manifest('sandbox')
import rospy
import tf
if __name__ == '__main__':
rospy.init_node("test_tf_listener")
listener = tf.TransformListener()
(trans, rot) = listener.waitForTransform('test_1', 'test_2', rospy.Time(0), rospy.Duration(0))
result in this error:
$ rosrun sandbox test_tf_listener.py
terminate called after throwing an instance of 'ros::TimeNotInitializedException'
what(): Cannot use ros::Time::now() before the first NodeHandle has been created or ros::start() has been called. If this is a standalone app or test that just uses ros::Time and does not communicate over ROS, you may also call ros::Time::init()
Aborted (core dumped)
But it find_package(catkin component orocos_kdl) which was removed.
CMake Error at /opt/ros/hydro/share/catkin/cmake/catkinConfig.cmake:72 (find_package):
Could not find a configuration file for package orocos_kdl.
Set orocos_kdl_DIR to the directory containing a CMake configuration file
for orocos_kdl. The file will have one of the following names:
orocos_kdlConfig.cmake
orocos_kdl-config.cmake
Call Stack (most recent call first):
CMakeLists.txt:4 (find_package)
I get these:
In file included from /tmp/perception_pcl/pcl_ros/src/pcl_ros/segmentation/extract_polygonal_prism_data.cpp:39:
In file included from /tmp/perception_pcl/pcl_ros/include/pcl_ros/transforms.h:43:
In file included from /Users/william/hydro/install_isolated/include/tf/transform_listener.h:38:
In file included from /Users/william/hydro/install_isolated/include/tf/tf.h:45:
In file included from /usr/local/include/boost/signals.hpp:9:
/usr/local/include/boost/signal.hpp:17:4: warning: "Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning
message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING." [-W#warnings]
# warning "Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning message, define...
^
The header is not compatible.
I can see 2 workarounds:
Doing a build from source against today's version of tf_conversions, I'm getting this linker error:
Scanning dependencies of target tf_conversions
[ 50%] [100%] Building CXX object CMakeFiles/tf_conversions.dir/src/tf_kdl.cpp.o
Building CXX object CMakeFiles/tf_conversions.dir/src/tf_eigen.cpp.o
Linking CXX shared library /Users/tlau/ros/devel_isolated/tf_conversions/lib/libtf_conversions.dylib
Undefined symbols for architecture x86_64:
"KDL::Vector::Normalize(double)", referenced from:
KDL::Rot(KDL::Vector const&) in tf_kdl.cpp.o
"KDL::Rotation::Quaternion(double, double, double, double)", referenced from:
tf::quaternionTFToKDL(tf::Quaternion const&, KDL::Rotation&) in tf_kdl.cpp.o
"KDL::operator*(KDL::Rotation const&, KDL::Rotation const&)", referenced from:
KDL::operator*(KDL::Frame const&, KDL::Frame const&) in tf_kdl.cpp.o
KDL::addDelta(KDL::Rotation const&, KDL::Vector const&, double) in tf_kdl.cpp.o
"KDL::Rotation::GetQuaternion(double&, double&, double&, double&) const", referenced from:
tf::quaternionKDLToTF(KDL::Rotation const&, tf::Quaternion&) in tf_kdl.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [/Users/tlau/ros/devel_isolated/tf_conversions/lib/libtf_conversions.dylib] Error 1
make[1]: *** [CMakeFiles/tf_conversions.dir/all] Error 2
make: *** [all] Error 2
<== Failed to process package 'tf_conversions':
Command '/opt/ros/hydro/env.sh make -j4 -l4' returned non-zero exit status 2
I'm building according to hydro installation instructions on Mac OSX.
Any ideas?
http://www.ros.org/wiki/tf#view_frames
view_frames usage description groovy is out-dated
Ran into this problem while monitoring a large robot using RViz over a WiFi connection that went flakey. Apparently, TF broadcasting in Python / Hydro is still blocking. This means that when the wifi connection got flakey, the Applanix driver (written in Python) blocked, and our controller stopped being able to do any updates.
From what I can tell in ros/ros_comm#169, ros_comm has been updated, and it looks like there are commits in indigo-devel to fix this. Really it's just a matter of adding queue size to the TF publishers, as per the two commits below. Any chance we can get this back ported to hydro? Seems like a problem many other people are going to face, and it's certainly a major problem on this project.
As reported by other users as well in http://answers.ros.org/question/207039/tfexception-thrown-while-using-waitfortransform a bug seems to have appeared.
waitForTransform throws a tf.Exception if one of the frames doesn't exist yet (which is actually the point of waitForTransform).
The bug appeared recently (after the end of March) but persists even with version 1.11.4, so it is likely NOT in TF. Any idea about the reason?
Include getRoll and getPitch functions as getYaw is already implemented. For the sake of simplicity.
I couldn't find documentation for the transformations module.
In case it's already there, please provide links, e.g.
here: http://docs.ros.org/hydro/api/tf/html/python/
here: http://wiki.ros.org/tf/TfUsingPython
The first line in the log here is shown for reference, it is what a normal ROS log message looks like. The following lines come from tf2/src/buffer_core.cpp. In that file you can see it is using something called "logWarn()", but apparently this is not connected to the normal ROS logging when used via the older TF API.
[INFO] [WallTime: 1374596992.623081] No target received yet.
Warning: Invalid argument passed to canTransform argument target_frame in tf2 frame_ids cannot be empty
at line 122 in /tmp/buildd/ros-hydro-tf2-0.4.5-0precise-20130721-0218/src/buffer_core.cpp
Instead of having separate names for conversion methods pointKDLToMsg
and poseKDLToMsg
, the functions could have the same name and be overloaded based on the type of arguments. I think This is a good case for method overloading.
Why are *eigenToTF-functions using Eigen::Affine to represent tf::Transformation instead of Eigen::Isometry? Isn't the latter one correct to describe translation+rotation in 3D? Eigen explicitly prohibits conversion from affine to isometry:
// prevent conversions as:
// Isometry = Affine | AffineCompact
EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(OtherMode==int(Affine)||OtherMode==int(AffineCompact), Mode!=int(Isometry)),
YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION)
So I ask myself if I can somehow still convert it, or if I also should use Affine to represent 3D-Transformations, which doesn't seem right to me.
Best regards,
Sebastian
Originally: https://code.ros.org/trac/ros-pkg/ticket/5617
The documentation for tf::Vector3 is missing from:
http://ros.org/doc/groovy/api/tf/html/c++/annotated.html
It might have something to do with the ATTRIBUTE_ALIGNED16(class) around the class keyword.
WARNING: Metapackage "geometry" must build_tool depend on catkin
Hello,
I am trying to make a listener of tf that sends commands to my robot.
I plugged it to /move_base_simple/goal to use the rviz built in panel.
But when I try to send a command, the python node throws with this error:
[ERROR] [WallTime: 1425288368.508838] bad callback: <bound method MoveToListener.callback of <MoveToListener(Thread-1, initial)>>
Traceback (most recent call last):
File "/home/lsouchet/catkin_ws/src/ros_comm/clients/rospy/src/rospy/topics.py", line 697, in _invoke_callback
cb(msg)
File "/home/lsouchet/catkin_ws/src/naoqi_bridge/naoqi_driver/src/naoqi_driver/naoqi_moveto.py", line 48, in callback
robotToTarget1 = self.listener.transformPose("/base_footprint", poseStamped)
File "/opt/ros/indigo/lib/python2.7/dist-packages/tf/listener.py", line 188, in transformPose
mat44 = self.asMatrix(target_frame, ps.header)
File "/opt/ros/indigo/lib/python2.7/dist-packages/tf/listener.py", line 75, in asMatrix
translation,rotation = self.lookupTransform(target_frame, hdr.frame_id, hdr.stamp)
ExtrapolationException: Lookup would require extrapolation into the future. Requested time 1425288368.508244038 but the latest data is at time 1425288368.469716072, when looking up transform from frame [odom] to frame [base_footprint]
Here is the output of the message in question:
z$ rostopic echo /move_base_simple/goal [15-03-02 10:26]
header:
seq: 4
stamp:
secs: 1425288368
nsecs: 508243953
frame_id: odom
pose:
position:
x: -0.0192804336548
y: 0.425947189331
z: 0.0
orientation:
x: 0.0
y: 0.0
z: -0.0167020614301
w: 0.999860510843
And here is the code of my callback (note that I commented the try/except shit to let it throw):
def callback(self, poseStamped):
# Adding this line to reset the message timestamp fixes the issue.
#poseStamped.header.stamp = rospy.Time(0)
#try:
robotToTarget1 = self.listener.transformPose("/base_footprint", poseStamped)
#except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException) as e:
# print "Error in transformPose: " + str(e)
# return
quat = robotToTarget1.pose.orientation
(roll,pitch,yaw) = euler_from_quaternion((quat.x, quat.y, quat.z, quat.w))
self.motionProxy.moveTo(robotToTarget1.pose.position.x, robotToTarget1.pose.position.y, yaw)
There appears to be an issue about the timing between the message is published and the transform is processed but I don't understand why.
Is is a real bug or something I did wrong?
Thanks in advance
I have the following code in a pointcloud callback
listener_->waitForTransform(baseFrame_, msg->header.frame_id, msg->header.stamp, ros::Duration(10.0));
// Convert
pcl::PointCloud<pcl::PointXYZ> cloud;
pcl::fromROSMsg(*msg, cloud);
// Transform
pcl::PointCloud<pcl::PointXYZ> cloudT;
pcl_ros::transformPointCloud<pcl::PointXYZ>(baseFrame_, cloud, cloudT, *listener_);
and despite the waitfortransform being there, I get:
[ERROR] [/xtion_qqvga/depth/cliff_detector@transformPointCloud:149]: Lookup would require extrapolation into the future. Requested time 1414987674.082394880 but the latest data is at time 1414987674.078320503, when looking up transform from frame [xtion_depth_optical_frame] to frame [base_link]
all the time.
I have to say that I tried ros::Time(0) instead of the msg->stamp and also I tried using tf::MessageFilters with the same result.
Interestingly, adding a fixed duration to the time makes the errors disappear, but is obviously not a solution.
I'm on Indigo.
When building tf with catkin_make, the build stops with this error.
CMake Error at /home/pi/ros_catkin_ws/devel/share/kdl_conversions/cmak /kdl_conversionsConfig.cmake:
106 (message):
Project 'kdl_conversions' specifies 'EIGEN3_INCLUDE_DIR-NOTFOUND' as an
include dir, which is not found. It does neither exist as an absolute
directory nor in
'/home/pi/ros_catkin_ws/src/tf/kdl_conversions/EIGEN3_INCLUDE_DIR-NOTFOUND'.
Ask the maintainer 'Tully Foote <[email protected]>' to fix it.
Call Stack (most recent call first):
/home/pi/ros_catkin_ws/devel/share/catkin/cmake/catkinConfig.cmake:75 (find_package)
tf/tf_conversions/CMakeLists.txt:5 (find_package)
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
EIGEN3_INCLUDE_DIR
used as include directory in directory /home/pi/ros_catkin_ws/src/tf/eigen_conversions
used as include directory in directory /home/pi/ros_catkin_ws/src/tf/kdl_conversions
make: *** [cmake_check_build_system] Error 1
Invoking "make cmake_check_build_system" failed
Moved from ros/ros_comm#259
Angles is not a resident package in the geometry metapackage, but the geometry package.xml has the line
<run_depend>angles</run_depend>
so upon running rosdep it throws and error, "Unable to locate package ros-groovy-angles.
Hello,
I recently upgraded my Ubuntu packages (including ros-indigo-geometry), and when I tried to execute a
transformBroadcaster.sendTransform(position, rotation, time, parent, child), I get this error:
TypeError: sendTransform() takes exactly 2 arguments (6 given)
When looking at the source files, I found this commit :
This seems to rely on python inheritance which I don't think exist.
Maybe this commit should be simply reverted.
Thank you
... although the package is installed.
This is a new bug - saw it today for the first time, when trying to launch the turtlebot simulation:
$ roslaunch turtlebot_gazebo turtlebot_empty_world.launch
[...]
Traceback (most recent call last):
File "/opt/kobuki_workspace/catkin_ws/install/lib/gazebo_ros/spawn_model", line 31, in <module>
import tf.transformations as tft
File "/opt/ros/hydro/lib/python2.7/dist-packages/tf/__init__.py", line 29, in <module>
from listener import TransformListener, TransformerROS
File "/opt/ros/hydro/lib/python2.7/dist-packages/tf/listener.py", line 39, in <module>
import sensor_msgs.msg
ImportError: No module named sensor_msgs.msg
[...]
$ rospack find sensor_msgs
/opt/ros/hydro/share/sensor_msgs
Strange bug ...
If new data arrives which provides no new information the linked list could be sparsified. This will make storage smaller and traversal times lower.
From: http://answers.ros.org/question/60768/wierd-tf-tree-when-running-rgb-d-slam/
--EDIT--
@tfoote
I was able to write a tf broadcaster which would imitate the faulty tf tree.
Here is a screenshot of the imitated faulty tree.
The three code snippets that were used were
broadcaster.sendTransform(
tf::StampedTransform(
tf::Transform(odom_quat, tf::Vector3(0.0, 0.0, 0.0)),
ros::Time::now(),"base_footprint", "map"));
r.sleep();
broadcaster.sendTransform(
tf::StampedTransform(
tf::Transform(odom_quat, tf::Vector3(0.0, 0.0, 0.0)),
ros::Time::now(),"map", "base_footprint"));
r.sleep();
broadcaster.sendTransform(
tf::StampedTransform(
tf::Transform(odom_quat, tf::Vector3(0.0, 1.0, 2.0)),
ros::Time::now(),"map", "where_mocap_should_be"));
r.sleep();
waitForTransform
calls "strip_leading_slash(target_frame)"
whereas getParent
doesn't.
Shouldn't the behavior be consistent?
SHA: 90a0fc4
The queue_size is set to 1. I have some code with a couple of transforms broadcast after immediately after each other. This prevents any but the first (usually) from making it out. I set the queue to 100 in order to confirm that was the problem, and everything works fine.
Perhaps queue_size should be a parameter on creation of a python tf_broadcaster?
While compiling imu_pipeline, I get a very long warning about boost signals being deprecated via tf/tf.h.
[ 26%] In file included from /usr/include/boost/signals.hpp:9:0,
from /opt/ros/indigo/include/tf/tf.h:45,
from /home/chadrockey/ws/src/imu_pipeline/src/imu_transformer.cpp:35:
/usr/include/boost/signal.hpp:17:4: warning: #warning "Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING." [-Wcpp]
Many were blacklisted in the gbp for both geometry and geometry_experimental
After moving our DRC robot from groovy to hydro, we experienced tons of issues. This all boiled down to a programmer's frequet use of tf_listener.frameExists(frameID) with a frameID string that contains a forward slash. frameExists, should be smart enough to remove the front slash. I've fixed our code to use the tf::remove_front_sl;ash call, but frameExists should be doing this for the passed string (andin pre-hydro releases, probably the actual frame list as well).
The dreaded serialization bugs attack again. Ref http://answers.ros.org/question/71107/pandaboard-alignment-trap-when-using-tf/
My platform is a linaro ubuntu precise 12.10 on an odroid xu. The other person with the issue is on the Pandaboard. Note that I don't get this error on my Pandaboard with 12.04 and Fuerte.
BackTrace
Program received signal SIGBUS, Bus error.
[Switching to Thread 0xb1aff420 (LWP 14419)]
0xb6f65294 in void ros::serialization::VectorSerializer<geometry_msgs::TransformStamped_<std::allocator >, std::allocator<geometry_msgs::TransformStamped_<std::allocator > >, void>::readros::serialization::IStream(ros::serialization::IStream&, std::vector<geometry_msgs::TransformStamped_<std::allocator >, std::allocator<geometry_msgs::TransformStamped_<std::allocator > > >&) () from /opt/ros/groovy/lib/libtf.so
(gdb) bt
#0 0xb6f65294 in void ros::serialization::VectorSerializer<geometry_msgs::TransformStamped_<std::allocator >, std::allocator<geometry_msgs::TransformStamped_<std::allocator > >, void>::readros::serialization::IStream(ros::serialization::IStream&, std::vector<geometry_msgs::TransformStamped_<std::allocator >, std::allocator<geometry_msgs::TransformStamped_<std::allocator > > >&) () from /opt/ros/groovy/lib/libtf.so
#1 0xb6f65592 in ros::SubscriptionCallbackHelperTboost::shared_ptr<tf::tfMessage_<std::allocator const> const&, void>::deserialize(ros::SubscriptionCallbackHelperDeserializeParams const&) ()
from /opt/ros/groovy/lib/libtf.so
#2 0xb6f0035e in ros::MessageDeserializer::deserialize() () from /opt/ros/groovy/lib/libroscpp.so
#3 0xb6efa376 in ros::SubscriptionQueue::call() () from /opt/ros/groovy/lib/libroscpp.so
#4 0xb6ec4070 in ros::CallbackQueue::callOneCB(ros::CallbackQueue::TLS*) () from /opt/ros/groovy/lib/libroscpp.so
#5 0xb6ec500e in ros::CallbackQueue::callAvailable(ros::WallDuration) () from /opt/ros/groovy/lib/libroscpp.so
#6 0xb6f618f8 in tf::TransformListener::dedicatedListenerThread() () from /opt/ros/groovy/lib/libtf.so
#7 0xb6f61654 in boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, tf::TransformListener>, boost::_bi::list1boost::_bi::value<tf::TransformListener* > > >::run() () from /opt/ros/groovy/lib/libtf.so
#8 0xb6165602 in thread_proxy () from /usr/lib/libboost_thread.so.1.46.1
#9 0xb6c3ded2 in start_thread () from /lib/arm-linux-gnueabihf/libpthread.so.0
#10 0xb62aaf18 in ?? () from /lib/arm-linux-gnueabihf/libc.so.6
#11 0xb62aaf18 in ?? () from /lib/arm-linux-gnueabihf/libc.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Hi, I tested the following code but the result is not consistent.
import tf, numpy
rotation = numpy.array([[ 0.25668, -0.938732, -0.229997, 0],
[-0.966142, -0.242765, -0.087381, 0],
[-0.0261919, -0.244639, 0.96926, 0],
[0, 0, 0, 1]])
quat = tf.transformations.quaternion_from_matrix(rotation)
qmatrix = tf.transformations.quaternion_matrix(quat)
>>> rotation
array([[ 0.25668 , -0.938732 , -0.229997 , 0. ],
[-0.966142 , -0.242765 , -0.087381 , 0. ],
[-0.0261919, -0.244639 , 0.96926 , 0. ],
[ 0. , 0. , 0. , 1. ]])
>>> qmatrix
array([[ 0.97885609, 0.04320439, -0.19993532, 0. ],
[-0.01115442, 0.98725931, 0.15872818, 0. ],
[ 0.20424576, -0.15314188, 0.96686671, 0. ],
[ 0. , 0. , 0. , 1. ]])
For compatibility, these scripts were installed both globally and package-local.
In Hydro, they should only be package-local.
The Hydro tf package mangles the catkin_LIBRARIES variable if it is included with find_package(tf)
instead of find_package(catkin COMPONENTS tf)
:
cmake_minimum_required(VERSION 2.8.3)
project(bug)
find_package(catkin REQUIRED COMPONENTS roscpp)
message(STATUS "catkin_LIBRARIES before: ${catkin_LIBRARIES}")
find_package(tf REQUIRED) # or tf2
message(STATUS "catkin_LIBRARIES after: ${catkin_LIBRARIES}")
catkin_package()
results in
-- +++ processing catkin package: 'bug'
-- ==> add_subdirectory(bug)
-- catkin_LIBRARIES before: /opt/ros/hydro/lib/libroscpp.so;/usr/lib/libboost_signals-mt.so;/usr/lib/libboost_filesystem-mt.so;/opt/ros/hydro/lib/librosconsole.so;/opt/ros/hydro/lib/librosconsole_log4cxx.so;/opt/ros/hydro/lib/librosconsole_backend_interface.so;/usr/lib/liblog4cxx.so;/usr/lib/libboost_regex-mt.so;/opt/ros/hydro/lib/libroscpp_serialization.so;/opt/ros/hydro/lib/librostime.so;/usr/lib/libboost_date_time-mt.so;/usr/lib/libboost_system-mt.so;/usr/lib/libboost_thread-mt.so;/usr/lib/x86_64-linux-gnu/libpthread.so;/opt/ros/hydro/lib/libxmlrpcpp.so;/opt/ros/hydro/lib/libcpp_common.so;/opt/ros/hydro/lib/libconsole_bridge.so
-- catkin_LIBRARIES after:
-- Configuring done
I have no idea where this comes from, but at least I can tell you that it works with tf2_bullet
and geometry_msgs
, so it's not a general catkin issue.
The tf.transformations.quaternion_from_matrix()
function says it returns a quaternion from a rotation matrix, but it fails if you give it an actual rotation matrix (element of SO(3)). Instead it requires that the input "rotation matrix" is a 4x4 matrix (element of SE(3)).
If you try passing it a 3x3 rotation matrix, you get the following error:
File "/opt/ros/hydro/lib/python2.7/dist-packages/tf/transformations.py", line 1206, in quaternion_from_matrix
M = numpy.array(matrix, dtype=numpy.float64, copy=False)[:4, :4]
IndexError: too many indices
I understand the utility of extracting a quaternion directly from a rigid transform, but it should also accept an actual rotation matrix as input.
https://github.com/ros/geometry/blob/indigo-devel/tf/src/tf/transformations.py#L1196
Related to #49
Moving them back to package local should have backwards compatability within groovy, with a deprecation warning. #2
tf/CMakeLists.txt installs the generated Python code which is not necessary as this is done automatically.
Sorry for having no example code, but I still want to drop this here.
I ran into a bug with getAngle() when continuously getting the robot yaw from tf.
Basically the following code snippet (untested example code) printed two different results:
tf::Stamped<tf::Pose> global_robot_pose;
ros::Time time = ros::Time::now();
tf_listener_->waitForTransform("map", "base_footprint", time, ros::Duration(0.05));
tf_listener_->transformPose("map", time, costmap_robot_pose, "base_footprint", global_robot_pose);
ROS_INFO("getAngle: %f", global_robot_pose.getRotation().getAngle());
ROS_INFO("getYaw: %f", tf::getYaw(global_robot_pose.getRotation());
This happens when the angle goes lower than 0. getAngle() didn't give a negative angle, but just went positive again. The result of getRotation works correctly.
E.g.:
getAngle: 0.01
getYaw: 0.01
getAngle: 0.02
getYaw: -0.02
In a source-based project one may want to pull in the Eigen <--> Msg conversions utilities in eigen_conversions
without needing to depend on orocos_kdl
, which is a pretty big dependency.
I propose splitting this into two packages, perhaps eigen_msg_conversions
and eigen_kdl_conversions
. To preserve compatibility with existing code, the existing eigen_conversions
package could have headers that just include the headers of the new separate packages.
Thoughts? I'd be willing to do this as a pull request once there is agreement on the spec.
Originally filed here: https://code.ros.org/trac/ros-pkg/ticket/5309
The results I get from Transformer::lookupTwist(...) are not w.r.t. the reference_frame as the documentation claims them to be.
To reproduce: I have two frames: /EE (the moving endeffector) and /Base (the static global world frame). I want to know the relative velocity of /EE, i.e. not expressed in /Base but in the frame /EE. According to the documentation I have to call:
tf_listener.lookupTwist("/EE", "/Base", "/EE", tf::Point(0,0,0), "/EE", ...)
, which means /EE is the tracking frame, /Base the observation frame, /EE the reference frame, and /EE the reference_point frame. But the resulting velocity is according to the /Base frame, NOT /EE!
I suppose the bug is in line 555 of tf.cpp:
lookupTransform(reference_frame,tracking_frame,target_time,inverse);
It should be replaced by:
lookupTransform(reference_frame,observation_frame,target_time,inverse);
At least in my case this solves the problem, but i'm not 100% sure, if this is always true, somebody should re-check.
Line in question is now here: https://github.com/ros/geometry/blob/hydro-devel/tf/src/tf.cpp#L315
http://www.ros.org/wiki/hydro/Migration#tf2.2BAC8-Migration.Removal_of_support_for_tf_prefix states that tf_prefix is deprecated but "should keep working in the cases where tf_prefix was previously used".
In groovy, the TransformBroadcaster called tf::resolve()
by itself to resolve frame_ids in transforms which are not fully resolved. This is not the case anymore currently in hydro. Is this a bug or should the user call tf::resolve()
before filling the TransformStamped data structure in cases where tf_prefix is needed (e.g. for simulating multiple robots in one Gazebo instance)? What is the recommended solution in such cases if tf_prefix support is totally dropped?
tf_prefix is currently not working with the static_transform_publisher for the same reason, too.
If both, the user and TransformBroadcaster, would call tf::resolve()
, would this lead to multiply prefixed frame_ids now?
This will clean up data from old frames which have stopped being published.
Originally filed: https://code.ros.org/trac/ros-pkg/ticket/3908
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.