No version for distro humble showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro kilted showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro rolling showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro ardent showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro bouncy showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro crystal showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro eloquent showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro dashing showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro galactic showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro foxy showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro iron showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro lunar showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

No version for distro jade showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version master
Last Updated 2021-03-26
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 0.2.1
flir_ptu_driver 0.2.1
flir_ptu_viz 0.2.1

README

flir_ptu

Basic serial ROS driver for FLIR PTUs. Currently tested with:

License

This repo originated at Washington University, where the code was licensed as GPLv2. The initial copy was made at svn revision r2226.

Thanks to Nick Hawes (@hawesie) for the first pass at catkinizing this repo.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version master
Last Updated 2021-03-26
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 0.2.1
flir_ptu_driver 0.2.1
flir_ptu_viz 0.2.1

README

flir_ptu

Basic serial ROS driver for FLIR PTUs. Currently tested with:

License

This repo originated at Washington University, where the code was licensed as GPLv2. The initial copy was made at svn revision r2226.

Thanks to Nick Hawes (@hawesie) for the first pass at catkinizing this repo.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version master
Last Updated 2021-03-26
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 0.2.1
flir_ptu_driver 0.2.1
flir_ptu_viz 0.2.1

README

flir_ptu

Basic serial ROS driver for FLIR PTUs. Currently tested with:

License

This repo originated at Washington University, where the code was licensed as GPLv2. The initial copy was made at svn revision r2226.

Thanks to Nick Hawes (@hawesie) for the first pass at catkinizing this repo.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version master
Last Updated 2021-03-26
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 0.2.1
flir_ptu_driver 0.2.1
flir_ptu_viz 0.2.1

README

flir_ptu

Basic serial ROS driver for FLIR PTUs. Currently tested with:

License

This repo originated at Washington University, where the code was licensed as GPLv2. The initial copy was made at svn revision r2226.

Thanks to Nick Hawes (@hawesie) for the first pass at catkinizing this repo.

No version for distro noetic showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Checkout URI https://github.com/ros-drivers/flir_ptu.git
VCS Type git
VCS Version ros2
Last Updated 2026-04-21
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
flir_ptu_description 1.0.1
flir_ptu_driver 1.0.1
flir_ptu_viz 1.0.1

README

flir_ptu

ROS 2 driver for FLIR PTUs. Currently tested with:

Usage

This repository contains the description and driver ROS 2 packages for the FLIR D46, E46, D48E, and PTU-5 pan-tilt units. Refer to FLIR’s documentation for physically connecting the unit to your robot.

The driver supports both TTY (serial) and TCP (Ethernet) connections between the robot’s PC and the PTU.

Add the flir_ptu macro to your URDF, making sure to add a joint between the mounting location and ${name}_base_link. The model parameter selects the variant (supported values: ptu5, d46):

<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="ptu5" />
<joint name="ptu_base_joint" type="fixed">
  <parent link="base_link" />
  <child link="ptu_base_link" />
  <origin xyz="0.24 0.0 -0.13" rpy="0 0 0" />
</joint>

The model can also be wired up to a top-level xacro arg:

<xacro:arg name="ptu_model" default="ptu5" />
<xacro:include filename="$(find flir_ptu_description)/urdf/flir_ptu.urdf.xacro" />
<xacro:flir_ptu name="ptu" model="$(arg ptu_model)" />

Driver configuration is supplied via a YAML parameter file. See flir_ptu_driver/config/ptu.yaml for the full set of parameters and their defaults. To launch the driver with the default config:

ros2 launch flir_ptu_driver ptu.launch.py

To launch with a custom parameter file:

ros2 launch flir_ptu_driver ptu.launch.py params_file:=/path/to/my_ptu.yaml

An example TCP config:

/**:
  ros__parameters:
    connection_type: "tcp"
    ip_addr: "192.168.131.70"
    tcp_port: 4000
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

An example TTY config:

/**:
  ros__parameters:
    connection_type: "tty"
    port: "/dev/ptu"
    baud: 9600
    hz: 10
    limits_enabled: false
    default_velocity: 0.0
    joint_name_prefix: "ptu_"

Topics

Publications:

  • state (remapped to /joint_states by the launch file): sensor_msgs/msg/JointState — the current pan and tilt actuator positions and velocities.
  • /diagnostics: diagnostic_msgs/msg/DiagnosticArray — connection state, PTU mode, pan/tilt limits, live position/velocity, communication error count, and a frequency monitor on joint_states.

Subscriptions:

  • cmd: sensor_msgs/msg/JointState — command the PTU to move to the desired angle at the requested speed.
  • reset: std_msgs/msg/Empty — publish an empty message to reset (home) the PTU.

When publishing to the cmd topic, the name, position, and velocity arrays must each be of length 2, with the pan actuator first and the tilt actuator second. The effort field is ignored.

ros2 topic pub --once /ptu/cmd sensor_msgs/msg/JointState \
  "{name: ['ptu_pan', 'ptu_tilt'], position: [0.3, -0.2], velocity: [0.6, 0.6]}"

A convenience script is also provided for quick commanding from the terminal:

```bash ros2 run flir_ptu_driver cmd_angles [velocity]

File truncated at 100 lines see the full file