Skip to content
Robert Haschke edited this page Nov 28, 2023 · 7 revisions

As a prerequisite for the following tasks, install some more ROS packages:

sudo apt install ros-<distro>-moveit ros-<distro>-moveit-resources ros-<distro>-tf2-tools ros-<distro>-agni-tf-tools

I. Relative Transforms

Consider an object $O$ was grasped by a robot at time $t = 0$. At this time, the robot’s hand is located at $T_h^w(0)$ and the object is located at $T_o^w(0)$. Both transforms are specified w.r.t. the world frame $w$. At time $t$ the robot hand moved to another pose $T_h^w(t)$. Assuming that the object didn't move relative to the hand, what is the new pose of the object (w.r.t. to the world) at time $t$? Derive an expression involving the known transforms.

II. TF inspection

Using different terminals (always source the ROS environment!), launch the following:

roslaunch moveit_resources_panda_moveit_config test_environment.launch
rviz
  1. In rviz add the displays RobotModel and TF and ensure that rviz’ fixed frame is set to the panda_link0 of the robot (cf. Global Options). By inspecting the TF tree, determine the kinematic structure of the robot, i.e. the chain of links. What is the name of the end effector link?
  2. Determine the transform = pose of the end-effector frame w.r.t. the panda_link0.
  3. Modify rviz’ fixed frame and observe how the absolute poses of all links change.
    They represent the transform from the currently chosen fixed frame.
  4. Determine the pose of the end-effector frame w.r.t. link4.
  5. Determine the pose of the base link w.r.t. link3.
  6. Using yet another ROS-enabled terminal, inspect the full TF tree by running tf2_tools:
rosrun tf2_tools view_frames.py
evince frames.pdf

Hand in the generated PDF.

III. TF tools

In rviz, add a Static Transform Publisher display.

  1. Place the (interactive) frame 20cm in front of the end-effector, with the same orientation as the robot's panda_link0. Figure out, how to do so, without manually entering values for the orientation. (You might want to disable some other TF link frames to focus on the relevant ones.)
    Note: The adapt transformation checkbox will recompute the configured transformation when changing the parent link.
  2. What’s the corresponding relative transform from the end-effector to this frame? Publish this transform as grasp frame.
  3. Again inspect the TF tree (cf. I) and determine the global pose of the grasp frame, that is w.r.t. panda_link0.

IV. Euler-angle singularities

Examine the smoothness/singularities of RPY and quaternion representations of rotations. To this end, manually rotate the frame of a Static Transform Publisher display and monitor the displayed Euler angles and quaternion components in rviz. Alternatively you can use rqt and plot those values over time (listening to /tf_static/transforms[*]/transform/rotation[^1]).

To rotate the interactive frame, hold Ctrl and move your mouse with the left button pressed. Alternatively, you can switch the marker type to 6DoF handles and operate each axis separately.

Find at least two singular configurations!

[^1]: If multiple different publishers post messages on the topic /tf_static, you will see noisy curves only. Thus, ensure that you have only a single static transform published, i.e. only a single Static Transform Publisher used in rviz. You might also need to stop the test_environment from II.