Skip to content

franka_ros2 v3.5.0

Choose a tag to compare

@github-actions github-actions released this 14 Aug 13:24
· 200 commits to humble since this release
  • feat: add TMR battery ROS 2 support in franka_mobile (sensor_msgs/BatteryState
    topic at 1 Hz and std_srvs/Trigger services for wireless charging), with an
    internal franka_desk_api HTTPS 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 in controllers.yaml, rescale the xbox
    normal/turbo axes in xbox.config.yaml to match max_velocity, and reduce
    the joystick deadzone (0.1) with a higher autorepeat rate (50 Hz) in
    mobile_teleop.launch.py for 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.105 instead of the hand's 0 0 0.1034. Requires franka_description with the resolved
    tcp_xyz default. MIGRATION: pass tcp_xyz explicitly 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 the franka_semantic_components::FrankaRobotModel) with async=true.
    Users of the franka_semantic_components::FrankaRobotState should 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::ControlException without restarting
    ros2_control_node. franka_robot_state_broadcaster and
    joint_state_broadcaster stay lifecycle-active. One update cycle may
    publish the pre-fault / frozen sample after read() 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.yaml and moveit.launch.py referenced fr3_gripper
    but the node is launched as franka_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.py in franka_fr3_moveit_config
  • ci: improve Jenkins pipeline test coverage

    • Fix package regex to include mobile_fr3_duo_trajectory_controller and
      franka_bringup structural tests (previously silently dropped)
    • Isolate Gazebo tests into separate optional stage
    • Add executeGazeboTests parameter (default: false)
  • fix: add missing dependencies in package.xml for isolated builds
    (rclcpp_components in franka_hardware; rclcpp_lifecycle, urdf, eigen,
    controller_interface in 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 by xacro:if inside 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
    former gazebo / gazebo_effort semantic 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.