tsf_driver.launch.py declares its poller argument with default_value="poll_data_node":
poller_arg = DeclareLaunchArgument(
"poller",
default_value="poll_data_node",
description="Driver executable publishing StaticData. Override to "
"point the viz at an alternative poller.",
)
robotiq_tsf installs poll_data_sdk_node and tactile_total_sum_node, and no poll_data_node. So the documented command fails:
ros2 launch robotiq_tsf tsf_driver.launch.py # executable not found
ros2 launch robotiq_tsf tsf_driver.launch.py poller:=poll_data_sdk_node # works
Found while bringing the sensor up for an MCP bench session on 2026-09-11. Pre-existing, unrelated to any open PR.
tactile_viz.launch.py and gripper_tactile_viz.launch.py include this file and carry the same default, so they fail the same way unless the argument is passed.
Fix
Default to poll_data_sdk_node, the executable the package installs. Worth a test that the default names something in the package's install space, since the failure is a runtime "executable not found" that no build catches.
tsf_driver.launch.pydeclares itspollerargument withdefault_value="poll_data_node":robotiq_tsfinstallspoll_data_sdk_nodeandtactile_total_sum_node, and nopoll_data_node. So the documented command fails:Found while bringing the sensor up for an MCP bench session on 2026-09-11. Pre-existing, unrelated to any open PR.
tactile_viz.launch.pyandgripper_tactile_viz.launch.pyinclude this file and carry the same default, so they fail the same way unless the argument is passed.Fix
Default to
poll_data_sdk_node, the executable the package installs. Worth a test that the default names something in the package's install space, since the failure is a runtime "executable not found" that no build catches.