franka_ros2 v3.5.0
-
feat: add TMR battery ROS 2 support in
franka_mobile(sensor_msgs/BatteryState
topic at 1 Hz andstd_srvs/Triggerservices for wireless charging), with an
internalfranka_desk_apiHTTPS helper used by the spine and battery clients. -
fix: franka_hardware tests now run in isolated ROS domains to avoid possible collisions.
-
fix: fixed franka_hardware stop motion test to check for stopping_joint_positions matching the last
commanded target instead of zero positions. -
fix: tune mobile teleop velocity/acceleration limits to stay within the RCU
2-norm bounds. Raise swerve translational limits to 0.35 m/s / 0.4 m/s^2 and
rotational to 0.5 rad/s / 0.3 rad/s^2 incontrollers.yaml, rescale the xbox
normal/turbo axes inxbox.config.yamlto matchmax_velocity, and reduce
the joystick deadzone (0.1) with a higher autorepeat rate (50 Hz) in
mobile_teleop.launch.pyfor smoother teleop. -
fix: the description extension entry points and the mobile fr3 duo moveit config no longer
hardcode the franka hand's tcp offset, so a cobot pump mounted on them is placed at its own
0 0 0.105instead of the hand's0 0 0.1034. Requires franka_description with the resolved
tcp_xyzdefault. MIGRATION: passtcp_xyzexplicitly to keep the previous value; the franka
hand is unaffected. -
fix: BREAKING CHANGE thread-safe access to robot state interface (changed from RealtimeBuffer to RealtimeThreadSafeBox).
This fixes possible race conditions that could happen when running the broadcaster and the
cartesian impedance example controller (e.g. via thefranka_semantic_components::FrankaRobotModel) with async=true.
Users of thefranka_semantic_components::FrankaRobotStateshould be not impacted, only direct state interface users claiming the hardware interface. -
fix: default thread priority for franka_hardware interface threads is now 98 (was 50) to
ensure RT stability. -
fix: recover from a
franka::ControlExceptionwithout restarting
ros2_control_node.franka_robot_state_broadcasterand
joint_state_broadcasterstay lifecycle-active. One update cycle may
publish the pre-fault / frozen sample afterread()latches, then the
controller-manager update thread blocks for the approximately two-second
braking stop and topic publication pauses; after the block, inactive-state
reads resume and publish live reflex state. After clearing the robot error,
only the command controller needs reactivation. -
docu: add an umbrella guide for the relocated description extensions,
including composition layers, mounting points, prefix rules, and external
gripper attachment. -
docs: comprehensive documentation audit and fixes across 12 packages — corrected
inaccurate launch arguments, removed references to non-existent files, fixed API method
names, updated parameter names to match code, added undocumented launch args, improved
grammar and user experience. Fixed tuple default bug in
franka_vision_and_manipulation_kit launch file. -
fix: align MoveIt gripper controller name with actual gripper node name.
fr3_controllers.yamlandmoveit.launch.pyreferencedfr3_gripper
but the node is launched asfranka_gripper, breaking gripper action commands
and joint state aggregation in MoveIt. (GitHub PR #206) -
test: comprehensive no-hardware test suite
- Add controller load test covering all 16 example controllers (one GTest case each)
- Add launch file parsing validation for 19 first-party launch files
- Add fake-hardware integration tests (controller spawn, activate, verify)
- Add fake-hardware test config files
(test_fake_hardware_{fr3,fr3_duo,mobile_fr3_duo,tmr}.config.yaml) - Register
test_gripper_topic_consistency.pyin franka_fr3_moveit_config
-
ci: improve Jenkins pipeline test coverage
- Fix package regex to include
mobile_fr3_duo_trajectory_controllerand
franka_bringupstructural tests (previously silently dropped) - Isolate Gazebo tests into separate optional stage
- Add
executeGazeboTestsparameter (default: false)
- Fix package regex to include
-
fix: add missing dependencies in package.xml for isolated builds
(rclcpp_componentsin franka_hardware;rclcpp_lifecycle,urdf,eigen,
controller_interfacein franka_semantic_components). Fixes rosdep-based
fresh-environment builds. (community contribution: GitHub PRs #96, #169) -
refactor: decoupled simulation backend selection from the franka_hardware ros2_control
macros and removed all Gazebo-specific content from franka_description. The hardware
<plugin>block (real / mock / gazebo) and the gz_ros2_control<gazebo>system
element are now injected by the owning package (franka_bringup for real/mock, franka_gazebo
for gazebo) instead of being selected byxacro:ifinside franka_hardware. Mode and
interface selection moved up to the entry-point URDFs as implementation-agnostic capability
flags (effort command, finger joint, passive base, self-collision geometry), replacing the
formergazebo/gazebo_effortsemantic flags. franka_description no longer contains
any Gazebo tags, macros, or arguments — the Gazebo SDF/transmission machinery, the world
anchor, and self-collision suppression now live in franka_gazebo, making franka_description
simulator-agnostic. All robot × mode URDF expansions remain byte-identical to before the
refactor.