Rotate camera to look at a given pose.
- Maintainer status: maintained
- Maintainer: Andy Zelenak <andyz AT utexas DOT edu>
- Author: Andy Zelenak
- License: see license.txt
- Source: git https://github.com/UTNuclearRoboticsPublic/look_at_pose.git (branch: kinetic)
A ROS service that rotates a camera to look at any given pose, while maintaining an upright camera. We use this to track positions in the world as the base of the robot moves.
Example: This camera has a rough initial alignment with the object of interest (the pink cylinder) and it is nearly upside-down. The pose returned from a call to look_at_pose is well-aligned and the camera is upright.
sudo apt install ros-kinetic-look-at-pose
or, clone and build from Github.
To launch the server and send a set of test data:
rosrun rviz rviz
In RViz, turn on TF and Marker (topic: visualization_marker) to see the original camera frame, new camera frame, and point of interest.
rosrun look_at_pose look_at_pose_server
rosrun look_at_pose test_client
Inputs and Outputs
The service request requires 3 parts. IMPORTANT: all 3 parts should be given in the frame of the camera. You may need to use some tf magic to get things in the correct frame.
* geometry_msgs/PoseStamped initial_cam_pose: The current pose of the camera. This should be point (0,0,0) and quaternion (0,0,0,1) in the camera's own frame.
* geometry_msgs/PoseStamped target_pose: Where should the camera look? The orientation actually isn't used.
* geometry_msgs/Vector3Stamped up: A vector that defines "UP." If Z of the camera frame is up, then it would be (0,0,1).
The service response is another PoseStamped in the initial camera frame:
* geometry_msgs/PoseStamped new_cam_pose
It's currently assumed that X is the "lens vector" of the camera and Z of the camera frame should point up. If your situation requires something else, please create an issue on the Github issue tracker.