This driver is particularly intended for use with the FLIR D46 line of pan-tilt units. However, because FLIR uses a common serial protocol for their products, this node is likely to work on related FLIR devices, or be adaptable without too much trouble.



Alongside the basic serial driver, there is also included a URDF description of the D46. This is structured as a xacro macro, so it should be straightforward to integrate into your complete robot description. The example.urdf.xacro file provides an example of how to use the macro.

To visualize the model without running the driver, you can launch it like so:

roslaunch flir_ptu_viz view_model.launch

This should produce an rviz window showing the device model, as well as a joint_state_publisher window letting you adjust the joint values.


To try out the driver prior to integration with a larger robot, you can connect and power it, and run:

roslaunch flir_ptu_driver ptu.launch port:=/dev/ttyUSB0

Once up, you can bring up the visualization in rviz:

roslaunch flir_ptu_viz view_ptu.launch

You can send it one-off commands using a provided convenience script:

ROS_NAMESPACE=ptu rosrun flir_ptu_driver cmd_angles -0.6 0.3



Basic serial driver.

Subscribed Topics

cmd (sensor_msgs/JointState)
  • Target angles for the pan and tilt joints. The device will attempt to travel to the specified angles, using the velocities given. The effort array is ignored.

Published Topics

state (sensor_msgs/JointState)
  • Angles of the pan and tilt joints, as reported by the device. Note that if too-large velocities are commanded, the steppers will slip, which this


~port (string, default: /dev/ttyUSB0)
  • Serial device to connect to.
~baud (int, default: 9600)
  • Baud rate of serial link.
~hz (int, default: 10)
  • Rate at which to publish the state message. Note that the device is polled for this data.


The basic driver is stable and usable, but various improvements and fixes are needed, as tracked on Github. Pull requests addressing these are very welcome.

License Note

The driver portion of this package is an evolution of the old ptu46 package, and thus retains its GPL licensing. However, as it is a standalone binary, this should not be an obstacle to using this code. The URDF description macro is BSD, so you are free to integrate that into other projects without implications on their licensing.

Wiki: flir_ptu_driver (last edited 2014-04-14 15:26:46 by MikePurvis)