Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -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
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion docker/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -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: .
Expand Down
5 changes: 5 additions & 0 deletions robotis_applications/CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion robotis_applications/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>robotis_applications</name>
<version>1.0.1</version>
<version>1.1.0</version>
<description>Meta package for Robotis Applications</description>
<maintainer email="pyo@robotis.com">Pyo</maintainer>
<license>Apache License 2.0</license>
Expand Down
6 changes: 6 additions & 0 deletions robotis_vuer/CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 13 additions & 1 deletion robotis_vuer/launch/vr.launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand All @@ -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',
Expand All @@ -65,6 +76,7 @@ def generate_launch_description():
return LaunchDescription([
model_arg,
sg2_node,
f2_node,
sh5_node,
hx5_node,
])
4 changes: 3 additions & 1 deletion robotis_vuer/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>robotis_vuer</name>
<version>1.0.1</version>
<version>1.1.0</version>
<description>VR Publisher for Robotis</description>
<maintainer email="pyo@robotis.com">Pyo</maintainer>
<license>Apache License 2.0</license>
Expand All @@ -14,6 +14,8 @@
<author email="kyu@robotis.com">Yeonguk Kim</author>

<exec_depend>geometry_msgs</exec_depend>
<exec_depend>launch</exec_depend>
<exec_depend>launch_ros</exec_depend>
<exec_depend>nav_msgs</exec_depend>
<exec_depend>rclpy</exec_depend>
<exec_depend>robotis_interfaces</exec_depend>
Expand Down
43 changes: 43 additions & 0 deletions robotis_vuer/robotis_vuer/vr_publisher_f2.py
Original file line number Diff line number Diff line change
@@ -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()
6 changes: 3 additions & 3 deletions robotis_vuer/robotis_vuer/vr_publisher_sg2.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand Down
3 changes: 2 additions & 1 deletion robotis_vuer/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand All @@ -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',
],
},
Expand Down
Loading