diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a9d7ce7 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,18 @@ +name: Release + +on: + pull_request: + branches: [jazzy] + types: [opened, synchronize, edited, reopened, ready_for_review, closed] + +permissions: + contents: read + +jobs: + release: + permissions: + contents: write + uses: ROBOTIS-GIT/github-workflows/.github/workflows/release.yml@main + with: + source_branch: main + target_branch: jazzy diff --git a/README.md b/README.md index d83abbb..fc5f33e 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,17 @@ or shortcut: vr model:=sg2 ``` +Run F2: + +```bash +ros2 launch robotis_vuer vr.launch.py model:=f2 +``` + +or shortcut: +```bash +vr model:=f2 +``` + Run HX5: ```bash diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 62d0f29..93240a7 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,7 +1,7 @@ services: robotis_applications: container_name: robotis-applications - image: robotis/robotis-applications:1.0.1 + image: robotis/robotis-applications:1.1.0 tty: true build: context: . diff --git a/robotis_applications/CHANGELOG.rst b/robotis_applications/CHANGELOG.rst index 347d9a6..c1953c4 100644 --- a/robotis_applications/CHANGELOG.rst +++ b/robotis_applications/CHANGELOG.rst @@ -2,6 +2,11 @@ Changelog for package robotis_applications ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.1.0 (2026-10-22) +------------------ +* Added F2 support for VR teleoperation +* Contributors: Yeonguk Kim + 1.0.1 (2026-08-20) ------------------ * Routed SG2 gripper commands to the raw joint trajectory topics diff --git a/robotis_applications/package.xml b/robotis_applications/package.xml index dba529b..f36a187 100644 --- a/robotis_applications/package.xml +++ b/robotis_applications/package.xml @@ -2,7 +2,7 @@ robotis_applications - 1.0.1 + 1.1.0 Meta package for Robotis Applications Pyo Apache License 2.0 diff --git a/robotis_vuer/CHANGELOG.rst b/robotis_vuer/CHANGELOG.rst index 7b5c249..0122a7d 100644 --- a/robotis_vuer/CHANGELOG.rst +++ b/robotis_vuer/CHANGELOG.rst @@ -2,6 +2,12 @@ Changelog for package robotis_vuer ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.1.0 (2026-10-22) +------------------ +* Added F2 VR publisher with HX2-D1 gripper limits +* Added F2 model selection and launch dependencies +* Contributors: Yeonguk Kim + 1.0.1 (2026-08-20) ------------------ * Routed SG2 gripper commands to the raw joint trajectory topics diff --git a/robotis_vuer/launch/vr.launch.py b/robotis_vuer/launch/vr.launch.py index c68ff18..93dc72f 100755 --- a/robotis_vuer/launch/vr.launch.py +++ b/robotis_vuer/launch/vr.launch.py @@ -27,7 +27,8 @@ def generate_launch_description(): model_arg = DeclareLaunchArgument( 'model', default_value='sh5', - description='VR model to run: hx5, sg2, or sh5', + choices=['sg2', 'sh5', 'hx5', 'f2'], + description='VR model to run: sg2, sh5, hx5, or f2', ) model = LaunchConfiguration('model') @@ -41,6 +42,16 @@ def generate_launch_description(): PythonExpression(["'true' if '", model, "' == 'sg2' else 'false'"]) ), ) + f2_node = Node( + package='robotis_vuer', + executable='vr_publisher_f2', + name='vr_publisher_f2', + output='screen', + emulate_tty=True, + condition=IfCondition( + PythonExpression(["'", model, "' == 'f2'"]) + ), + ) sh5_node = Node( package='robotis_vuer', executable='vr_publisher_sh5', @@ -65,6 +76,7 @@ def generate_launch_description(): return LaunchDescription([ model_arg, sg2_node, + f2_node, sh5_node, hx5_node, ]) diff --git a/robotis_vuer/package.xml b/robotis_vuer/package.xml index 12611a1..588b8a6 100644 --- a/robotis_vuer/package.xml +++ b/robotis_vuer/package.xml @@ -2,7 +2,7 @@ robotis_vuer - 1.0.1 + 1.1.0 VR Publisher for Robotis Pyo Apache License 2.0 @@ -14,6 +14,8 @@ Yeonguk Kim geometry_msgs + launch + launch_ros nav_msgs rclpy robotis_interfaces diff --git a/robotis_vuer/robotis_vuer/vr_publisher_f2.py b/robotis_vuer/robotis_vuer/vr_publisher_f2.py new file mode 100644 index 0000000..6f81abf --- /dev/null +++ b/robotis_vuer/robotis_vuer/vr_publisher_f2.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +# +# Copyright 2026 ROBOTIS CO., LTD. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Authors: Yeonguk Kim + +import rclpy +from robotis_vuer.vr_publisher_sg2 import VRTrajectoryPublisher + + +class F2VRTrajectoryPublisher(VRTrajectoryPublisher): + """Use SG2 VR controls with the F2 HX2-D1 gripper range.""" + + def __init__(self): + super().__init__(gripper_max_position=1.1) + + +def main(args=None): + rclpy.init(args=args) + node = F2VRTrajectoryPublisher() + try: + rclpy.spin(node) + except KeyboardInterrupt: + pass + finally: + node.destroy_node() + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/robotis_vuer/robotis_vuer/vr_publisher_sg2.py b/robotis_vuer/robotis_vuer/vr_publisher_sg2.py index 7ae611a..f42c0ea 100644 --- a/robotis_vuer/robotis_vuer/vr_publisher_sg2.py +++ b/robotis_vuer/robotis_vuer/vr_publisher_sg2.py @@ -54,7 +54,7 @@ class VRTrajectoryPublisher(Node): - def __init__(self): + def __init__(self, gripper_max_position=1.3): super().__init__('vr_trajectory_publisher') self.get_logger().set_level(rclpy.logging.LoggingSeverity.INFO) self.declare_parameter('left_wrist_offset_x', 0.0) @@ -73,8 +73,8 @@ def __init__(self): self.declare_parameter('right_trigger_offset', 0.0) self.declare_parameter('left_trigger_scale', 1.0) self.declare_parameter('right_trigger_scale', 1.0) - self.declare_parameter('left_gripper_max_position', 1.3) - self.declare_parameter('right_gripper_max_position', 1.3) + self.declare_parameter('left_gripper_max_position', gripper_max_position) + self.declare_parameter('right_gripper_max_position', gripper_max_position) self.declare_parameter('goal_pose_position_scale', 1.1) self.declare_parameter('stream_fps', 30) self.declare_parameter('pose_publish_hz', 30.0) diff --git a/robotis_vuer/setup.py b/robotis_vuer/setup.py index e7282f7..abfe819 100644 --- a/robotis_vuer/setup.py +++ b/robotis_vuer/setup.py @@ -12,7 +12,7 @@ setup( name=package_name, - version='1.0.1', + version='1.1.0', packages=find_packages(exclude=['test']), data_files=[ ('share/ament_index/resource_index/packages', @@ -35,6 +35,7 @@ 'console_scripts': [ 'vr_publisher_hx5 = robotis_vuer.vr_publisher_hx5:main', 'vr_publisher_sg2 = robotis_vuer.vr_publisher_sg2:main', + 'vr_publisher_f2 = robotis_vuer.vr_publisher_f2:main', 'vr_publisher_sh5 = robotis_vuer.vr_publisher_sh5:main', ], },