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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file
CONTRIBUTING
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.
CONTRIBUTING
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.
CONTRIBUTING
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.
CONTRIBUTING
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.
CONTRIBUTING
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:
- FLIR D46 using tty
- FLIR E46 using either tty or tcp
- FLIR D48E using either tty or tcp
- FLIR PTU-5 using either tty or tcp
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_statesby 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 onjoint_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
File truncated at 100 lines see the full file