├── docker
├── AMENT_IGNORE
├── COLCON_IGNORE
├── .gitignore
├── docker-compose.yml
└── Dockerfile
├── open_manipulator_bringup
├── resource
│ └── open_manipulator_bringup
├── open_manipulator_bringup
│ ├── __init__.py
│ └── om_create_udev_rules.py
├── setup.cfg
├── open-manipulator-cdc.rules
├── config
│ ├── open_manipulator_x
│ │ ├── initial_positions.yaml
│ │ └── hardware_controller_manager.yaml
│ ├── omy_3m
│ │ ├── initial_positions.yaml
│ │ ├── pack_positions.yaml
│ │ ├── hardware_controller_manager.yaml
│ │ └── qc_positions.yaml
│ ├── omy_f3m
│ │ ├── initial_positions.yaml
│ │ └── hardware_controller_manager.yaml
│ ├── omx_f
│ │ ├── initial_positions.yaml
│ │ └── hardware_controller_manager.yaml
│ ├── omy_l100_follower_ai
│ │ ├── initial_positions.yaml
│ │ └── hardware_controller_manager.yaml
│ ├── omx_f_follower_ai
│ │ ├── initial_positions.yaml
│ │ └── hardware_controller_manager.yaml
│ ├── omy_f3m_follower_ai
│ │ ├── initial_positions.yaml
│ │ ├── hardware_controller_manager.yaml
│ │ └── qc_positions.yaml
│ ├── omy_f3m_leader_ai
│ │ └── hardware_controller_manager.yaml
│ ├── omy_l100_leader_ai
│ │ └── hardware_controller_manager.yaml
│ └── omx_l_leader_ai
│ │ └── hardware_controller_manager.yaml
├── package.xml
├── launch
│ ├── omy_3m_pack.launch.py
│ ├── omy_3m_unpack.launch.py
│ └── camera_usb_cam.launch.py
└── setup.py
├── open_manipulator_teleop
├── resource
│ └── open_manipulator_teleop
├── open_manipulator_teleop
│ └── __init__.py
├── setup.cfg
├── package.xml
└── setup.py
├── open_manipulator_gui
├── config
│ ├── open_manipulator_x_joint_log.csv
│ ├── omx_f_joint_log.csv
│ ├── omy_3m_joint_log.csv
│ └── omy_f3m_joint_log.csv
├── src
│ ├── omy_3m
│ │ └── main.cpp
│ ├── omy_f3m
│ │ └── main.cpp
│ ├── omx_f
│ │ └── main.cpp
│ └── open_manipulator_x
│ │ └── main.cpp
├── launch
│ ├── omy_3m_gui.launch.py
│ ├── omy_f3m_gui.launch.py
│ ├── omx_f_gui.launch.py
│ └── open_manipulator_x_gui.launch.py
├── package.xml
└── include
│ ├── omy_3m_gui
│ ├── main_window.hpp
│ └── qnode.hpp
│ ├── omy_f3m_gui
│ ├── main_window.hpp
│ └── qnode.hpp
│ ├── omx_f_gui
│ ├── main_window.hpp
│ └── qnode.hpp
│ └── open_manipulator_x_gui
│ ├── main_window.hpp
│ └── qnode.hpp
├── open_manipulator_description
├── meshes
│ ├── omy_3m
│ │ ├── link1.stl
│ │ ├── link2.stl
│ │ ├── link3.stl
│ │ ├── link4.stl
│ │ ├── link5.stl
│ │ ├── link6.stl
│ │ └── base_unit.stl
│ ├── omy_f3m
│ │ ├── flange.stl
│ │ ├── link1.stl
│ │ ├── link2.stl
│ │ ├── link3.stl
│ │ ├── link4.stl
│ │ ├── link5.stl
│ │ ├── link6.stl
│ │ └── base_unit.stl
│ ├── omy_l100
│ │ ├── link1.stl
│ │ ├── link2.stl
│ │ ├── link3.stl
│ │ ├── link4.stl
│ │ ├── link5.stl
│ │ ├── link6.stl
│ │ ├── link7.stl
│ │ └── base_unit.stl
│ ├── rh_p12_rn_a
│ │ ├── l1.stl
│ │ ├── l2.stl
│ │ ├── r1.stl
│ │ ├── r2.stl
│ │ └── base.stl
│ ├── omx_f
│ │ ├── follower_01_base.stl
│ │ ├── follower_05_tip.stl
│ │ ├── follower_06_pan_Revised.stl
│ │ ├── follower_08_gripper_gear.stl
│ │ ├── follower_03_middle_verticle.stl
│ │ ├── follower_02_base_tilt_Revised.stl
│ │ ├── follower_04_middle_horizontal.stl
│ │ └── follower_07_gripper_motorized.stl
│ ├── omx_l
│ │ ├── leader_05_tip_roll.stl
│ │ ├── leader_07_tip_grip.stl
│ │ ├── leader_01_base_roll.stl
│ │ ├── leader_03_middle_vertical.stl
│ │ ├── leader_06_tip_pan_revised.stl
│ │ ├── leader_02_base_tilt_revised.stl
│ │ └── leader_04_middle_horizontal.stl
│ └── open_manipulator_x
│ │ ├── link1.stl
│ │ ├── link2.stl
│ │ ├── link3.stl
│ │ ├── link4.stl
│ │ ├── link5.stl
│ │ ├── plate.stl
│ │ ├── gripper_left_palm.stl
│ │ └── gripper_right_palm.stl
├── package.xml
├── CMakeLists.txt
├── urdf
│ ├── omy_l100
│ │ └── omy_l100.urdf.xacro
│ ├── omx_l
│ │ └── omx_l.urdf.xacro
│ ├── open_manipulator_x
│ │ └── open_manipulator_x.urdf.xacro
│ ├── omx_f
│ │ └── omx_f.urdf.xacro
│ ├── omy_3m
│ │ └── omy_3m.urdf.xacro
│ └── omy_f3m
│ │ └── omy_f3m.urdf.xacro
├── gazebo
│ ├── rh_p12_rn_a.gazebo.xacro
│ ├── omx_l.gazebo.xacro
│ ├── omy_3m.gazebo.xacro
│ ├── omy_f3m.gazebo.xacro
│ ├── omy_l100.gazebo.xacro
│ ├── open_manipulator_x.gazebo.xacro
│ └── omx_f.gazebo.xacro
├── ros2_control
│ └── omy_3m_end_unit.ros2_control.xacro
└── launch
│ ├── omx_f.launch.py
│ ├── omx_l.launch.py
│ ├── omy_3m.launch.py
│ ├── omy_f3m.launch.py
│ ├── omy_l100.launch.py
│ └── open_manipulator_x.launch.py
├── open_manipulator_ci.repos
├── open_manipulator_moveit_config
├── config
│ ├── pilz_cartesian_limits.yaml
│ ├── kinematics.yaml
│ ├── omx_f
│ │ ├── kinematics.yaml
│ │ ├── moveit_controllers.yaml
│ │ └── joint_limits.yaml
│ ├── open_manipulator_x
│ │ ├── kinematics.yaml
│ │ ├── moveit_controllers.yaml
│ │ └── joint_limits.yaml
│ ├── omy_3m
│ │ ├── moveit_controllers.yaml
│ │ └── joint_limits.yaml
│ ├── omy_f3m
│ │ ├── moveit_controllers.yaml
│ │ └── joint_limits.yaml
│ ├── ompl_planning.yaml
│ ├── pilz_industrial_motion_planner_planning.yaml
│ ├── chomp_planning.yaml
│ └── moveit.rviz
├── CMakeLists.txt
└── package.xml
├── ros2_controller
├── om_gravity_compensation_controller
│ ├── README.md
│ ├── gravity_compensation_plugin.xml
│ ├── package.xml
│ ├── CHANGELOG.rst
│ ├── include
│ │ └── gravity_compensation_controller
│ │ │ └── visibility_control.h
│ └── src
│ │ └── gravity_compensation_controller_parameters.yaml
├── om_spring_actuator_controller
│ ├── spring_actuator_plugin.xml
│ ├── package.xml
│ ├── CHANGELOG.rst
│ ├── src
│ │ └── spring_actuator_controller_parameters.yaml
│ └── include
│ │ └── spring_actuator_controller
│ │ └── visibility_control.h
└── om_joint_trajectory_command_broadcaster
│ ├── joint_trajectory_command_plugin.xml
│ ├── package.xml
│ ├── CHANGELOG.rst
│ ├── src
│ └── joint_trajectory_command_broadcaster_parameters.yaml
│ └── include
│ └── joint_trajectory_command_broadcaster
│ └── visibility_control.h
├── open_manipulator
├── CMakeLists.txt
└── package.xml
├── CONTRIBUTING.md
├── .github
└── workflows
│ ├── ros-lint.yml
│ └── ros-ci.yml
├── open_manipulator_playground
├── package.xml
├── include
│ └── open_manipulator_playground
│ │ ├── omy_3m_hello_moveit.h
│ │ ├── omy_f3m_hello_moveit.h
│ │ └── open_manipulator_x_hello_moveit.h
└── CMakeLists.txt
├── open_manipulator_collision
├── CHANGELOG.rst
├── package.xml
├── launch
│ └── self_collision.launch.py
└── CMakeLists.txt
└── README.md
/docker/AMENT_IGNORE:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docker/COLCON_IGNORE:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docker/.gitignore:
--------------------------------------------------------------------------------
1 | workspace/
2 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/resource/open_manipulator_bringup:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/open_manipulator_teleop/resource/open_manipulator_teleop:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/open_manipulator_bringup/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/open_manipulator_teleop/open_manipulator_teleop/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/open_manipulator_gui/config/open_manipulator_x_joint_log.csv:
--------------------------------------------------------------------------------
1 | 0,-1.00016,0.696767,0.300807,-0.00975459
2 | 0.00153473,-0.478602,0.331502,0.141195,-0.00975459
3 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/setup.cfg:
--------------------------------------------------------------------------------
1 | [develop]
2 | script_dir=$base/lib/open_manipulator_bringup
3 | [install]
4 | install_scripts=$base/lib/open_manipulator_bringup
5 |
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_3m/link1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_3m/link1.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_3m/link2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_3m/link2.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_3m/link3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_3m/link3.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_3m/link4.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_3m/link4.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_3m/link5.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_3m/link5.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_3m/link6.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_3m/link6.stl
--------------------------------------------------------------------------------
/open_manipulator_teleop/setup.cfg:
--------------------------------------------------------------------------------
1 | [develop]
2 | script_dir=$base/lib/open_manipulator_teleop
3 | [install]
4 | install_scripts=$base/lib/open_manipulator_teleop
5 |
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_f3m/flange.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_f3m/flange.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_f3m/link1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_f3m/link1.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_f3m/link2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_f3m/link2.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_f3m/link3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_f3m/link3.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_f3m/link4.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_f3m/link4.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_f3m/link5.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_f3m/link5.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_f3m/link6.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_f3m/link6.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_l100/link1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_l100/link1.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_l100/link2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_l100/link2.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_l100/link3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_l100/link3.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_l100/link4.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_l100/link4.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_l100/link5.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_l100/link5.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_l100/link6.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_l100/link6.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_l100/link7.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_l100/link7.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/rh_p12_rn_a/l1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/rh_p12_rn_a/l1.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/rh_p12_rn_a/l2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/rh_p12_rn_a/l2.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/rh_p12_rn_a/r1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/rh_p12_rn_a/r1.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/rh_p12_rn_a/r2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/rh_p12_rn_a/r2.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_3m/base_unit.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_3m/base_unit.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_f3m/base_unit.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_f3m/base_unit.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/rh_p12_rn_a/base.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/rh_p12_rn_a/base.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omy_l100/base_unit.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omy_l100/base_unit.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_f/follower_01_base.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_f/follower_01_base.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_f/follower_05_tip.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_f/follower_05_tip.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_l/leader_05_tip_roll.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_l/leader_05_tip_roll.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_l/leader_07_tip_grip.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_l/leader_07_tip_grip.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/open_manipulator_x/link1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/open_manipulator_x/link1.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/open_manipulator_x/link2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/open_manipulator_x/link2.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/open_manipulator_x/link3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/open_manipulator_x/link3.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/open_manipulator_x/link4.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/open_manipulator_x/link4.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/open_manipulator_x/link5.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/open_manipulator_x/link5.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/open_manipulator_x/plate.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/open_manipulator_x/plate.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_l/leader_01_base_roll.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_l/leader_01_base_roll.stl
--------------------------------------------------------------------------------
/open_manipulator_ci.repos:
--------------------------------------------------------------------------------
1 | repositories:
2 | utils/dynamixel_hardware_interface:
3 | type: git
4 | url: https://github.com/ROBOTIS-GIT/dynamixel_hardware_interface.git
5 | version: main
6 |
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_f/follower_06_pan_Revised.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_f/follower_06_pan_Revised.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_f/follower_08_gripper_gear.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_f/follower_08_gripper_gear.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_l/leader_03_middle_vertical.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_l/leader_03_middle_vertical.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_l/leader_06_tip_pan_revised.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_l/leader_06_tip_pan_revised.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_f/follower_03_middle_verticle.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_f/follower_03_middle_verticle.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_l/leader_02_base_tilt_revised.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_l/leader_02_base_tilt_revised.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_l/leader_04_middle_horizontal.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_l/leader_04_middle_horizontal.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_f/follower_02_base_tilt_Revised.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_f/follower_02_base_tilt_Revised.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_f/follower_04_middle_horizontal.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_f/follower_04_middle_horizontal.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/omx_f/follower_07_gripper_motorized.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/omx_f/follower_07_gripper_motorized.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/open_manipulator_x/gripper_left_palm.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/open_manipulator_x/gripper_left_palm.stl
--------------------------------------------------------------------------------
/open_manipulator_description/meshes/open_manipulator_x/gripper_right_palm.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/HEAD/open_manipulator_description/meshes/open_manipulator_x/gripper_right_palm.stl
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/pilz_cartesian_limits.yaml:
--------------------------------------------------------------------------------
1 | # Limits for the Pilz planner
2 | cartesian_limits:
3 | max_trans_vel: 1.0
4 | max_trans_acc: 2.25
5 | max_trans_dec: -5.0
6 | max_rot_vel: 1.57
7 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/open-manipulator-cdc.rules:
--------------------------------------------------------------------------------
1 | KERNEL=="ttyACM*", DRIVERS=="ftdi_sio", MODE="0666", ATTR{device/latency_timer}="1"
2 | KERNEL=="ttyUSB*", DRIVERS=="ftdi_sio", MODE="0666", ATTR{device/latency_timer}="1"
3 |
--------------------------------------------------------------------------------
/open_manipulator_gui/config/omx_f_joint_log.csv:
--------------------------------------------------------------------------------
1 | -0.62273,-0.570634,0.449157,0.188428,0.00239883,0.500074
2 | 0.530859,0.333098,-0.362668,0.839606,-0.005517,0.500074
3 | 0.42196,-0.109891,-0.595157,0.792862,-0.00610794,0.500074
4 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/kinematics.yaml:
--------------------------------------------------------------------------------
1 | arm:
2 | kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
3 | kinematics_solver_search_resolution: 0.0050000000000000001
4 | kinematics_solver_timeout: 0.0050000000000000001
5 |
--------------------------------------------------------------------------------
/ros2_controller/om_gravity_compensation_controller/README.md:
--------------------------------------------------------------------------------
1 | # Gravity Compensation Controller
2 |
3 | This controller is used to compensate for gravity in a robot arm. It uses the KDL library to compute the torques required to maintain the arm in a desired position.
4 |
5 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/omx_f/kinematics.yaml:
--------------------------------------------------------------------------------
1 | arm:
2 | kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
3 | kinematics_solver_search_resolution: 0.0050000000000000001
4 | kinematics_solver_timeout: 0.0050000000000000001
5 | position_only_ik: True
6 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/open_manipulator_x/kinematics.yaml:
--------------------------------------------------------------------------------
1 | arm:
2 | kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
3 | kinematics_solver_search_resolution: 0.0050000000000000001
4 | kinematics_solver_timeout: 0.0050000000000000001
5 | position_only_ik: True
6 |
--------------------------------------------------------------------------------
/open_manipulator_gui/config/omy_3m_joint_log.csv:
--------------------------------------------------------------------------------
1 | -0.0010347,-0.00684561,0.00986501,0.0170844,0.00057297,-0.020038
2 | 6.86629e-05,8.72821e-05,6.71737e-05,-8.70082e-05,-1.80313e-05,6.82321e-05
3 | 7.95328e-05,-0.730698,1.74333,-1.1383,0.159155,0.159209
4 | -0.00758848,-0.485194,2.06937,-1.73665,0.206905,0.193761
5 | -0.00758848,-0.485194,2.06937,-1.73665,0.206905,0.193761
6 |
--------------------------------------------------------------------------------
/open_manipulator_gui/config/omy_f3m_joint_log.csv:
--------------------------------------------------------------------------------
1 | -0.0010347,-0.00684561,0.00986501,0.0170844,0.00057297,-0.020038,-2.8833e-08
2 | 6.86629e-05,8.72821e-05,6.71737e-05,-8.70082e-05,-1.80313e-05,6.82321e-05,8.74899e-05
3 | 7.95328e-05,-0.730698,1.74333,-1.1383,0.159155,0.159209,8.74899e-05
4 | -0.00758848,-0.485194,2.06937,-1.73665,0.206905,0.193761,8.74899e-05
5 | -0.00758848,-0.485194,2.06937,-1.73665,0.206905,0.193761,1.0999
6 |
--------------------------------------------------------------------------------
/ros2_controller/om_spring_actuator_controller/spring_actuator_plugin.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The spring actuator controller compensates for gravity on a set of joints
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ros2_controller/om_gravity_compensation_controller/gravity_compensation_plugin.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The gravity compensation controller compensates for gravity on a set of joints
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/open_manipulator_x/initial_positions.yaml:
--------------------------------------------------------------------------------
1 | joint_trajectory_executor:
2 | ros__parameters:
3 | joint_names:
4 | - joint1
5 | - joint2
6 | - joint3
7 | - joint4
8 |
9 | step_names: [home] # Names of the steps
10 |
11 | home: [0.0, -1.0, 1.0, 0.0] # Home position
12 |
13 | duration: 3.0
14 | epsilon: 0.01
15 | action_topic: '/arm_controller/follow_joint_trajectory'
16 | joint_states_topic: '/joint_states'
17 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_3m/initial_positions.yaml:
--------------------------------------------------------------------------------
1 | joint_trajectory_executor:
2 | ros__parameters:
3 | joint_names:
4 | - joint1
5 | - joint2
6 | - joint3
7 | - joint4
8 | - joint5
9 | - joint6
10 |
11 | step_names: [home] # Names of the steps
12 |
13 | home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # Initial position
14 |
15 | duration: 10.0
16 | epsilon: 0.01
17 | action_topic: '/arm_controller/follow_joint_trajectory'
18 | joint_states_topic: '/joint_states'
19 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_f3m/initial_positions.yaml:
--------------------------------------------------------------------------------
1 | joint_trajectory_executor:
2 | ros__parameters:
3 | joint_names:
4 | - joint1
5 | - joint2
6 | - joint3
7 | - joint4
8 | - joint5
9 | - joint6
10 |
11 | step_names: [home] # Names of the steps
12 |
13 | home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # Initial position
14 |
15 | duration: 10.0
16 | epsilon: 0.01
17 | action_topic: '/arm_controller/follow_joint_trajectory'
18 | joint_states_topic: '/joint_states'
19 |
--------------------------------------------------------------------------------
/ros2_controller/om_joint_trajectory_command_broadcaster/joint_trajectory_command_plugin.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The joint trajectory command broadcaster publishes the current states from ros2_control system.
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omx_f/initial_positions.yaml:
--------------------------------------------------------------------------------
1 | joint_trajectory_executor:
2 | ros__parameters:
3 | joint_names:
4 | - joint1
5 | - joint2
6 | - joint3
7 | - joint4
8 | - joint5
9 |
10 | step_names: [step1, step2] # Names of the steps
11 |
12 | step1: [0.0, 0.0, 0.0, 0.0, 0.0]
13 | step2: [0.0, -1.57, 1.57, 1.57, 0.0]
14 |
15 | duration: 5.0
16 | epsilon: 0.15
17 | action_topic: '/arm_controller/follow_joint_trajectory'
18 | joint_states_topic: '/joint_states'
19 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/omy_3m/moveit_controllers.yaml:
--------------------------------------------------------------------------------
1 | # MoveIt uses this configuration for controller management
2 |
3 | moveit_controller_manager: moveit_simple_controller_manager/MoveItSimpleControllerManager
4 |
5 | moveit_simple_controller_manager:
6 | controller_names:
7 | - arm_controller
8 |
9 | arm_controller:
10 | type: FollowJointTrajectory
11 | action_ns: follow_joint_trajectory
12 | joints:
13 | - joint1
14 | - joint2
15 | - joint3
16 | - joint4
17 | - joint5
18 | - joint6
19 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_l100_follower_ai/initial_positions.yaml:
--------------------------------------------------------------------------------
1 | joint_trajectory_executor:
2 | ros__parameters:
3 | joint_names:
4 | - joint1
5 | - joint2
6 | - joint3
7 | - joint4
8 | - joint5
9 | - joint6
10 | - rh_r1_joint
11 |
12 | step_names: [home] # Names of the steps
13 |
14 | home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # Initial position
15 |
16 | duration: 10.0
17 | epsilon: 0.01
18 | action_topic: '/arm_controller/follow_joint_trajectory'
19 | joint_states_topic: '/joint_states'
20 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omx_f_follower_ai/initial_positions.yaml:
--------------------------------------------------------------------------------
1 | joint_trajectory_executor:
2 | ros__parameters:
3 | joint_names:
4 | - joint1
5 | - joint2
6 | - joint3
7 | - joint4
8 | - joint5
9 | - gripper_joint_1
10 |
11 | step_names: [step1, step2] # Names of the steps
12 |
13 | step1: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
14 | step2: [0.0, -1.57, 1.57, 1.57, 0.0, 0.0]
15 |
16 | duration: 5.0
17 | epsilon: 0.15
18 | action_topic: '/arm_controller/follow_joint_trajectory'
19 | joint_states_topic: '/joint_states'
20 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_3m/pack_positions.yaml:
--------------------------------------------------------------------------------
1 | joint_trajectory_executor:
2 | ros__parameters:
3 | joint_names:
4 | - joint1
5 | - joint2
6 | - joint3
7 | - joint4
8 | - joint5
9 | - joint6
10 |
11 | step_names: [home, pack] # Names of the steps
12 |
13 | home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # Initial position
14 | pack: [0.0, 0.0, -2.61799, -0.52360, 0.0, 0.0] # Pack position
15 |
16 | duration: 10.0
17 | epsilon: 0.01
18 | action_topic: '/arm_controller/follow_joint_trajectory'
19 | joint_states_topic: '/joint_states'
20 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_f3m_follower_ai/initial_positions.yaml:
--------------------------------------------------------------------------------
1 | joint_trajectory_executor:
2 | ros__parameters:
3 | joint_names:
4 | - joint1
5 | - joint2
6 | - joint3
7 | - joint4
8 | - joint5
9 | - joint6
10 | - rh_r1_joint
11 |
12 | step_names: [home, ready] # Names of the steps
13 |
14 | home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # Initial position
15 | ready: [0.0, -1.5708, 2.6529, -1.0821, 1.5708, 0.0, 0.0] # Ready position
16 |
17 | duration: 10.0
18 | epsilon: 0.01
19 | action_topic: '/arm_controller/follow_joint_trajectory'
20 | joint_states_topic: '/joint_states'
21 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/open_manipulator_x/moveit_controllers.yaml:
--------------------------------------------------------------------------------
1 | # MoveIt uses this configuration for controller management
2 |
3 | moveit_controller_manager: moveit_simple_controller_manager/MoveItSimpleControllerManager
4 |
5 | moveit_simple_controller_manager:
6 | controller_names:
7 | - arm_controller
8 | - gripper_controller
9 |
10 | arm_controller:
11 | type: FollowJointTrajectory
12 | action_ns: follow_joint_trajectory
13 | joints:
14 | - joint1
15 | - joint2
16 | - joint3
17 | - joint4
18 | gripper_controller:
19 | type: GripperCommand
20 | action_ns: gripper_cmd
21 | joints:
22 | - gripper_left_joint
23 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/omx_f/moveit_controllers.yaml:
--------------------------------------------------------------------------------
1 | # MoveIt uses this configuration for controller management
2 |
3 | moveit_controller_manager: moveit_simple_controller_manager/MoveItSimpleControllerManager
4 |
5 | moveit_simple_controller_manager:
6 | controller_names:
7 | - arm_controller
8 | - gripper_controller
9 |
10 | arm_controller:
11 | type: FollowJointTrajectory
12 | action_ns: follow_joint_trajectory
13 | joints:
14 | - joint1
15 | - joint2
16 | - joint3
17 | - joint4
18 | - joint5
19 | gripper_controller:
20 | type: GripperCommand
21 | action_ns: gripper_cmd
22 | joints:
23 | - gripper_joint_1
24 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/omy_f3m/moveit_controllers.yaml:
--------------------------------------------------------------------------------
1 | # MoveIt uses this configuration for controller management
2 |
3 | moveit_controller_manager: moveit_simple_controller_manager/MoveItSimpleControllerManager
4 |
5 | moveit_simple_controller_manager:
6 | controller_names:
7 | - arm_controller
8 | - gripper_controller
9 |
10 | arm_controller:
11 | type: FollowJointTrajectory
12 | action_ns: follow_joint_trajectory
13 | joints:
14 | - joint1
15 | - joint2
16 | - joint3
17 | - joint4
18 | - joint5
19 | - joint6
20 | gripper_controller:
21 | type: GripperCommand
22 | action_ns: gripper_cmd
23 | joints:
24 | - rh_r1_joint
25 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/ompl_planning.yaml:
--------------------------------------------------------------------------------
1 | planning_plugins:
2 | - ompl_interface/OMPLPlanner
3 | # The order of the elements in the adapter corresponds to the order they are processed by the motion planning pipeline.
4 | request_adapters:
5 | - default_planning_request_adapters/ResolveConstraintFrames
6 | - default_planning_request_adapters/ValidateWorkspaceBounds
7 | - default_planning_request_adapters/CheckStartStateBounds
8 | - default_planning_request_adapters/CheckStartStateCollision
9 | response_adapters:
10 | - default_planning_response_adapters/AddTimeOptimalParameterization
11 | - default_planning_response_adapters/ValidateSolution
12 | - default_planning_response_adapters/DisplayMotionPath
13 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/pilz_industrial_motion_planner_planning.yaml:
--------------------------------------------------------------------------------
1 | planning_plugins:
2 | - pilz_industrial_motion_planner/CommandPlanner
3 | default_planner_config: PTP
4 | request_adapters:
5 | - default_planning_request_adapters/ResolveConstraintFrames
6 | - default_planning_request_adapters/ValidateWorkspaceBounds
7 | - default_planning_request_adapters/CheckStartStateBounds
8 | - default_planning_request_adapters/CheckStartStateCollision
9 | response_adapters:
10 | - default_planning_response_adapters/ValidateSolution
11 | - default_planning_response_adapters/DisplayMotionPath
12 | capabilities: >-
13 | pilz_industrial_motion_planner/MoveGroupSequenceAction
14 | pilz_industrial_motion_planner/MoveGroupSequenceService
15 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/chomp_planning.yaml:
--------------------------------------------------------------------------------
1 | planning_plugins:
2 | - chomp_interface/CHOMPPlanner
3 | enable_failure_recovery: true
4 | # The order of the elements in the adapter corresponds to the order they are processed by the motion planning pipeline.
5 | request_adapters:
6 | - default_planning_request_adapters/ResolveConstraintFrames
7 | - default_planning_request_adapters/ValidateWorkspaceBounds
8 | - default_planning_request_adapters/CheckStartStateBounds
9 | - default_planning_request_adapters/CheckStartStateCollision
10 | response_adapters:
11 | - default_planning_response_adapters/AddTimeOptimalParameterization
12 | - default_planning_response_adapters/ValidateSolution
13 | - default_planning_response_adapters/DisplayMotionPath
14 |
15 | ridge_factor: 0.01
16 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omx_f_follower_ai/hardware_controller_manager.yaml:
--------------------------------------------------------------------------------
1 | /**:
2 | controller_manager:
3 | ros__parameters:
4 | update_rate: 100 # Hz
5 |
6 | joint_state_broadcaster:
7 | type: joint_state_broadcaster/JointStateBroadcaster
8 |
9 | arm_controller:
10 | type: joint_trajectory_controller/JointTrajectoryController
11 |
12 | /**:
13 | arm_controller:
14 | ros__parameters:
15 | joints:
16 | - joint1
17 | - joint2
18 | - joint3
19 | - joint4
20 | - joint5
21 | - gripper_joint_1
22 |
23 | interface_name: position
24 |
25 | command_interfaces:
26 | - position
27 |
28 | state_interfaces:
29 | - position
30 | - velocity
31 |
32 | allow_partial_joints_goal: true
33 |
--------------------------------------------------------------------------------
/open_manipulator_teleop/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | open_manipulator_teleop
5 | 4.1.1
6 | OpenManipulator teleoperation package
7 | Pyo
8 | Apache License 2.0
9 | Sungho Woo
10 | Wonho Yun
11 | rclpy
12 | std_msgs
13 | sensor_msgs
14 | trajectory_msgs
15 | control_msgs
16 |
17 | ament_python
18 |
19 |
20 |
--------------------------------------------------------------------------------
/open_manipulator/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | ################################################################################
2 | # Set minimum required version of cmake, project name and compile options
3 | ################################################################################
4 | cmake_minimum_required(VERSION 3.5)
5 | project(open_manipulator)
6 |
7 | ################################################################################
8 | # Find ament packages and libraries for ament and system dependencies
9 | ################################################################################
10 | find_package(ament_cmake REQUIRED)
11 |
12 | ################################################################################
13 | # Macro for ament package
14 | ################################################################################
15 | ament_package()
16 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_3m/hardware_controller_manager.yaml:
--------------------------------------------------------------------------------
1 | /**:
2 | controller_manager:
3 | ros__parameters:
4 | update_rate: 400 # Hz
5 | thread_priority: 40
6 | cpu_affinity: [1, 2, 3]
7 |
8 | joint_state_broadcaster:
9 | type: joint_state_broadcaster/JointStateBroadcaster
10 |
11 | arm_controller:
12 | type: joint_trajectory_controller/JointTrajectoryController
13 |
14 | /**:
15 | arm_controller:
16 | ros__parameters:
17 | joints:
18 | - joint1
19 | - joint2
20 | - joint3
21 | - joint4
22 | - joint5
23 | - joint6
24 |
25 | interface_name: position
26 |
27 | command_interfaces:
28 | - position
29 |
30 | state_interfaces:
31 | - position
32 | - velocity
33 |
34 | allow_partial_joints_goal: true
35 |
--------------------------------------------------------------------------------
/docker/docker-compose.yml:
--------------------------------------------------------------------------------
1 | services:
2 | open_manipulator:
3 | container_name: open_manipulator
4 | build:
5 | context: .
6 | dockerfile: Dockerfile
7 | image: robotis/open-manipulator:latest
8 | tty: true
9 | restart: always
10 | cap_add:
11 | - SYS_NICE
12 | ulimits:
13 | rtprio: 99
14 | rttime: -1
15 | memlock: 8428281856
16 | network_mode: host
17 | ipc: host
18 | pid: host
19 | environment:
20 | - DISPLAY=${DISPLAY}
21 | - QT_X11_NO_MITSHM=1
22 | # - RMW_IMPLEMENTATION=rmw_zenoh_cpp
23 | volumes:
24 | - /dev:/dev
25 | - /dev/shm:/dev/shm
26 | - /tmp/.X11-unix:/tmp/.X11-unix:rw
27 | - /tmp/.docker.xauth:/tmp/.docker.xauth:rw
28 | - ./workspace:/workspace
29 | - ../:/root/ros2_ws/src/open_manipulator/
30 | privileged: true
31 | command: bash
32 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_l100_follower_ai/hardware_controller_manager.yaml:
--------------------------------------------------------------------------------
1 | /**:
2 | controller_manager:
3 | ros__parameters:
4 | update_rate: 300 # Hz
5 | thread_priority: 20
6 | cpu_affinity: [1, 2, 3]
7 |
8 | joint_state_broadcaster:
9 | type: joint_state_broadcaster/JointStateBroadcaster
10 |
11 | arm_controller:
12 | type: joint_trajectory_controller/JointTrajectoryController
13 |
14 | /**:
15 | arm_controller:
16 | ros__parameters:
17 | joints:
18 | - joint1
19 | - joint2
20 | - joint3
21 | - joint4
22 | - joint5
23 | - joint6
24 | - rh_r1_joint
25 |
26 | interface_name: position
27 |
28 | command_interfaces:
29 | - position
30 |
31 | state_interfaces:
32 | - position
33 | - velocity
34 |
35 | allow_partial_joints_goal: true
36 |
--------------------------------------------------------------------------------
/ros2_controller/om_spring_actuator_controller/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | om_spring_actuator_controller
5 | 4.1.1
6 |
7 | Spring Actuator Controller ROS 2 package.
8 |
9 | Pyo
10 | Apache 2.0
11 | Woojin Wie
12 | ament_cmake
13 | controller_interface
14 | generate_parameter_library
15 | hardware_interface
16 | pluginlib
17 | rclcpp
18 | rclcpp_lifecycle
19 | urdf
20 |
21 | ament_cmake
22 |
23 |
24 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/open_manipulator_x/hardware_controller_manager.yaml:
--------------------------------------------------------------------------------
1 | /**:
2 | controller_manager:
3 | ros__parameters:
4 | update_rate: 100 # Hz
5 |
6 | joint_state_broadcaster:
7 | type: joint_state_broadcaster/JointStateBroadcaster
8 |
9 | arm_controller:
10 | type: joint_trajectory_controller/JointTrajectoryController
11 |
12 | gripper_controller:
13 | type: position_controllers/GripperActionController
14 |
15 | /**:
16 | arm_controller:
17 | ros__parameters:
18 | joints:
19 | - joint1
20 | - joint2
21 | - joint3
22 | - joint4
23 |
24 | interface_name: position
25 |
26 | command_interfaces:
27 | - position
28 |
29 | state_interfaces:
30 | - position
31 | - velocity
32 |
33 | allow_partial_joints_goal: true
34 |
35 | /**:
36 | gripper_controller:
37 | ros__parameters:
38 | joint: gripper_left_joint
39 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omx_f/hardware_controller_manager.yaml:
--------------------------------------------------------------------------------
1 | /**:
2 | controller_manager:
3 | ros__parameters:
4 | update_rate: 100 # Hz
5 |
6 | joint_state_broadcaster:
7 | type: joint_state_broadcaster/JointStateBroadcaster
8 |
9 | arm_controller:
10 | type: joint_trajectory_controller/JointTrajectoryController
11 |
12 | gripper_controller:
13 | type: position_controllers/GripperActionController
14 |
15 | /**:
16 | arm_controller:
17 | ros__parameters:
18 | joints:
19 | - joint1
20 | - joint2
21 | - joint3
22 | - joint4
23 | - joint5
24 |
25 | interface_name: position
26 |
27 | command_interfaces:
28 | - position
29 |
30 | state_interfaces:
31 | - position
32 | - velocity
33 |
34 | allow_partial_joints_goal: true
35 |
36 | /**:
37 | gripper_controller:
38 | ros__parameters:
39 | joint: gripper_joint_1
40 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | Any contribution that you make to this repository will
2 | be under the Apache 2 License, as dictated by that
3 | [license](http://www.apache.org/licenses/LICENSE-2.0.html):
4 |
5 | ~~~
6 | 5. Submission of Contributions. Unless You explicitly state otherwise,
7 | any Contribution intentionally submitted for inclusion in the Work
8 | by You to the Licensor shall be under the terms and conditions of
9 | this License, without any additional terms or conditions.
10 | Notwithstanding the above, nothing herein shall supersede or modify
11 | the terms of any separate license agreement you may have executed
12 | with Licensor regarding such Contributions.
13 | ~~~
14 |
15 | Contributors must sign-off each commit by adding a `Signed-off-by: ...`
16 | line to commit messages to certify that they have the right to submit
17 | the code they are contributing to the project according to the
18 | [Developer Certificate of Origin (DCO)](https://developercertificate.org/).
19 |
--------------------------------------------------------------------------------
/.github/workflows/ros-lint.yml:
--------------------------------------------------------------------------------
1 | # The name of the workflow
2 | name: Lint
3 |
4 | # Specifies the events that trigger the workflow
5 | on:
6 | pull_request:
7 |
8 | # Defines a set of jobs to be run as part of the workflow
9 | jobs:
10 | ament_lint:
11 | runs-on: ubuntu-latest
12 | container:
13 | image: rostooling/setup-ros-docker:ubuntu-noble-ros-rolling-ros-base-latest
14 | strategy:
15 | fail-fast: false
16 | matrix:
17 | linter: [cppcheck, cpplint, uncrustify, flake8, pep257, lint_cmake, xmllint, copyright]
18 | steps:
19 | - name: Checkout code
20 | uses: actions/checkout@v4
21 |
22 | - name: Setup ROS environment
23 | uses: ros-tooling/setup-ros@v0.7
24 |
25 | - name: Run Linter
26 | env:
27 | AMENT_CPPCHECK_ALLOW_SLOW_VERSIONS: 1
28 | uses: ros-tooling/action-ros-lint@master
29 | with:
30 | linter: ${{ matrix.linter }}
31 | distribution: rolling
32 | package-name: "*"
33 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_f3m/hardware_controller_manager.yaml:
--------------------------------------------------------------------------------
1 | /**:
2 | controller_manager:
3 | ros__parameters:
4 | update_rate: 400 # Hz
5 | thread_priority: 40
6 | cpu_affinity: [1, 2, 3]
7 |
8 | joint_state_broadcaster:
9 | type: joint_state_broadcaster/JointStateBroadcaster
10 |
11 | arm_controller:
12 | type: joint_trajectory_controller/JointTrajectoryController
13 |
14 | gripper_controller:
15 | type: position_controllers/GripperActionController
16 |
17 | /**:
18 | arm_controller:
19 | ros__parameters:
20 | joints:
21 | - joint1
22 | - joint2
23 | - joint3
24 | - joint4
25 | - joint5
26 | - joint6
27 |
28 | interface_name: position
29 |
30 | command_interfaces:
31 | - position
32 |
33 | state_interfaces:
34 | - position
35 | - velocity
36 |
37 | allow_partial_joints_goal: true
38 |
39 | /**:
40 | gripper_controller:
41 | ros__parameters:
42 | joint: rh_r1_joint
43 |
--------------------------------------------------------------------------------
/open_manipulator_playground/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | open_manipulator_playground
5 | 4.1.1
6 |
7 | This package provides an example for utilizing the MoveIt API with the OpenMANIPULATOR,
8 | allowing users to practice and experiment freely.
9 |
10 | Pyo
11 | Apache 2.0
12 | http://wiki.ros.org/open_manipulator
13 | https://github.com/ROBOTIS-GIT/open_manipulator
14 | https://github.com/ROBOTIS-GIT/open_manipulator/issues
15 | Sungho Woo
16 | Wonho Yun
17 | ament_cmake
18 | moveit_ros_planning_interface
19 | rclcpp
20 |
21 | ament_cmake
22 |
23 |
24 |
--------------------------------------------------------------------------------
/open_manipulator_playground/include/open_manipulator_playground/omy_3m_hello_moveit.h:
--------------------------------------------------------------------------------
1 | // Copyright 2025 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Sungho Woo, Wonho Yun, Woojin Wie
16 |
17 | #ifndef OPEN_MANIPULATOR_PLAYGROUND__OMY_3M_HELLO_MOVEIT_H_
18 | #define OPEN_MANIPULATOR_PLAYGROUND__OMY_3M_HELLO_MOVEIT_H_
19 |
20 | #include
21 | #include
22 | #include
23 |
24 | #include
25 | #include
26 |
27 | #endif // OPEN_MANIPULATOR_PLAYGROUND__OMY_3M_HELLO_MOVEIT_H_
28 |
--------------------------------------------------------------------------------
/open_manipulator_playground/include/open_manipulator_playground/omy_f3m_hello_moveit.h:
--------------------------------------------------------------------------------
1 | // Copyright 2025 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Sungho Woo, Wonho Yun, Woojin Wie
16 |
17 | #ifndef OPEN_MANIPULATOR_PLAYGROUND__OMY_F3M_HELLO_MOVEIT_H_
18 | #define OPEN_MANIPULATOR_PLAYGROUND__OMY_F3M_HELLO_MOVEIT_H_
19 |
20 | #include
21 | #include
22 | #include
23 |
24 | #include
25 | #include
26 |
27 | #endif // OPEN_MANIPULATOR_PLAYGROUND__OMY_F3M_HELLO_MOVEIT_H_
28 |
--------------------------------------------------------------------------------
/open_manipulator_gui/src/omy_3m/main.cpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yoon, Woojin Wie
16 |
17 | #include
18 | #include
19 | #include "../include/omy_3m_gui/main_window.hpp"
20 | #include "omy_3m_gui/qnode.hpp"
21 |
22 |
23 | int main(int argc, char ** argv)
24 | {
25 | QApplication app(argc, argv);
26 | omy_3m_gui::MainWindow w(argc, argv);
27 | w.show();
28 | app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
29 | int result = app.exec();
30 | return result;
31 | }
32 |
--------------------------------------------------------------------------------
/open_manipulator_gui/src/omy_f3m/main.cpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yun, Woojin Wie
16 |
17 | #include
18 | #include
19 | #include "../include/omy_f3m_gui/main_window.hpp"
20 | #include "omy_f3m_gui/qnode.hpp"
21 |
22 |
23 | int main(int argc, char ** argv)
24 | {
25 | QApplication app(argc, argv);
26 | omy_f3m_gui::MainWindow w(argc, argv);
27 | w.show();
28 | app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
29 | int result = app.exec();
30 | return result;
31 | }
32 |
--------------------------------------------------------------------------------
/ros2_controller/om_joint_trajectory_command_broadcaster/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | om_joint_trajectory_command_broadcaster
5 | 4.1.1
6 |
7 | Joint Trajectory Command Broadcaster ROS 2 package.
8 |
9 | Pyo
10 | Apache 2.0
11 | Woojin Wie
12 | ament_cmake
13 | backward_ros
14 | builtin_interfaces
15 | control_msgs
16 | controller_interface
17 | generate_parameter_library
18 | pluginlib
19 | rclcpp_lifecycle
20 | rcutils
21 | realtime_tools
22 | sensor_msgs
23 | urdf
24 | trajectory_msgs
25 |
26 | ament_cmake
27 |
28 |
29 |
--------------------------------------------------------------------------------
/open_manipulator_gui/src/omx_f/main.cpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yun, Woojin Wie, Heewon Lee
16 |
17 | #include
18 | #include
19 | #include "../include/omx_f_gui/main_window.hpp"
20 | #include "omx_f_gui/qnode.hpp"
21 |
22 |
23 | int main(int argc, char ** argv)
24 | {
25 | QApplication app(argc, argv);
26 | omx_f_gui::MainWindow w(argc, argv);
27 | w.show();
28 | app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
29 |
30 | int result = app.exec();
31 | return result;
32 | }
33 |
--------------------------------------------------------------------------------
/open_manipulator_playground/include/open_manipulator_playground/open_manipulator_x_hello_moveit.h:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Sungho Woo, Wonho Yun, Woojin Wie
16 |
17 | #ifndef OPEN_MANIPULATOR_PLAYGROUND__OPEN_MANIPULATOR_X_HELLO_MOVEIT_H_
18 | #define OPEN_MANIPULATOR_PLAYGROUND__OPEN_MANIPULATOR_X_HELLO_MOVEIT_H_
19 |
20 | #include
21 | #include
22 | #include
23 |
24 | #include
25 | #include
26 |
27 | #endif // OPEN_MANIPULATOR_PLAYGROUND__OPEN_MANIPULATOR_X_HELLO_MOVEIT_H_
28 |
--------------------------------------------------------------------------------
/open_manipulator_gui/src/open_manipulator_x/main.cpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yun, Woojin Wie
16 |
17 | #include
18 | #include
19 | #include "../include/open_manipulator_x_gui/main_window.hpp"
20 | #include "open_manipulator_x_gui/qnode.hpp"
21 |
22 |
23 | int main(int argc, char ** argv)
24 | {
25 | QApplication app(argc, argv);
26 | open_manipulator_x_gui::MainWindow w(argc, argv);
27 | w.show();
28 | app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
29 |
30 | int result = app.exec();
31 | return result;
32 | }
33 |
--------------------------------------------------------------------------------
/open_manipulator_collision/CHANGELOG.rst:
--------------------------------------------------------------------------------
1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 | Changelog for package open_manipulator_collision
3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4 |
5 | 4.1.1 (2025-11-13)
6 | ------------------
7 | * None
8 |
9 | 4.1.0 (2025-10-24)
10 | ------------------
11 | * None
12 |
13 | 4.0.10 (2025-10-23)
14 | -------------------
15 | * None
16 |
17 | 4.0.9 (2025-09-15)
18 | ------------------
19 | * None
20 |
21 | 4.0.8 (2025-09-03)
22 | ------------------
23 | * None
24 |
25 | 4.0.7 (2025-07-17)
26 | ------------------
27 | * None
28 |
29 | 4.0.6 (2025-07-15)
30 | ------------------
31 | * None
32 |
33 | 4.0.5 (2025-07-02)
34 | ------------------
35 | * Updated urdf file path for OMY
36 | * Contributors: Sungho Woo
37 |
38 | 4.0.4 (2025-06-26)
39 | ------------------
40 | * None
41 |
42 | 4.0.3 (2025-06-25)
43 | ------------------
44 | * None
45 |
46 | 4.0.2 (2025-06-25)
47 | ------------------
48 | * None
49 |
50 | 4.0.1 (2025-06-23)
51 | ------------------
52 | * None
53 |
54 | 4.0.0 (2025-06-19)
55 | ------------------
56 | * None
57 |
58 | 3.3.0 (2025-06-10)
59 | ------------------
60 | * Added self-collision functionality to OMY Follower
61 | * Contributors: Sungho Woo
62 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | ################################################################################
2 | # Set minimum required version of cmake, project name and compile options
3 | ################################################################################
4 | cmake_minimum_required(VERSION 3.22)
5 | project(open_manipulator_moveit_config)
6 |
7 | ################################################################################
8 | # Find ament packages and libraries for ament and system dependencies
9 | ################################################################################
10 | find_package(ament_cmake REQUIRED)
11 |
12 | ################################################################################
13 | # Install
14 | ################################################################################
15 | install(DIRECTORY launch DESTINATION share/${PROJECT_NAME}
16 | PATTERN "setup_assistant.launch" EXCLUDE)
17 | install(DIRECTORY config DESTINATION share/${PROJECT_NAME})
18 |
19 | ################################################################################
20 | # Macro for ament package
21 | ################################################################################
22 | ament_package()
23 |
--------------------------------------------------------------------------------
/ros2_controller/om_gravity_compensation_controller/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | om_gravity_compensation_controller
5 | 4.1.1
6 |
7 | Controller for compensating for gravity on a group of joints
8 |
9 | Pyo
10 | Apache 2.0
11 | Woojin Wie
12 | ament_cmake
13 | angles
14 | backward_ros
15 | controller_interface
16 | control_msgs
17 | control_toolbox
18 | generate_parameter_library
19 | hardware_interface
20 | pluginlib
21 | rclcpp
22 | rclcpp_lifecycle
23 | realtime_tools
24 | rsl
25 | tl_expected
26 | urdf
27 | kdl_parser
28 |
29 | ament_cmake
30 |
31 |
32 |
--------------------------------------------------------------------------------
/open_manipulator_description/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | open_manipulator_description
5 | 4.1.1
6 |
7 | open_manipulator_description ROS 2 package.
8 |
9 | Pyo
10 | Apache 2.0
11 | http://wiki.ros.org/open_manipulator
12 | https://github.com/ROBOTIS-GIT/open_manipulator
13 | https://github.com/ROBOTIS-GIT/open_manipulator/issues
14 | Hye-Jong KIM
15 | Sungho Woo
16 | Wonho Yun
17 | Woojin Wie
18 | ament_cmake
19 | joint_state_publisher
20 | joint_state_publisher_gui
21 | robot_state_publisher
22 | rviz2
23 |
24 | ament_cmake
25 |
26 |
27 |
--------------------------------------------------------------------------------
/open_manipulator_teleop/setup.py:
--------------------------------------------------------------------------------
1 | from glob import glob
2 | import os
3 |
4 | from setuptools import find_packages
5 | from setuptools import setup
6 |
7 | package_name = 'open_manipulator_teleop'
8 |
9 | setup(
10 | name=package_name,
11 | version='4.1.1',
12 | packages=find_packages(exclude=[]),
13 | data_files=[
14 | ('share/ament_index/resource_index/packages', ['resource/' + package_name]),
15 | ('share/' + package_name, ['package.xml']),
16 | (os.path.join('share', package_name, 'launch'), glob('launch/*.py')),
17 | ],
18 | install_requires=['setuptools'],
19 | zip_safe=True,
20 | maintainer='Pyo',
21 | maintainer_email='pyo@robotis.com',
22 | author='Sungho Woo, Wonho Yun',
23 | author_email='wsh@robotis.com, ywh@robotis.com',
24 | description='OpenManipulator teleoperation package',
25 | license='Apache License 2.0',
26 | tests_require=['pytest'],
27 | entry_points={
28 | 'console_scripts': [
29 | 'open_manipulator_x_teleop = open_manipulator_teleop.open_manipulator_x_teleop:main',
30 | 'omy_3m_teleop = open_manipulator_teleop.omy_3m_teleop:main',
31 | 'omy_f3m_teleop = open_manipulator_teleop.omy_f3m_teleop:main',
32 | 'omx_f_teleop = open_manipulator_teleop.omx_f_teleop:main',
33 | ],
34 | },
35 | )
36 |
--------------------------------------------------------------------------------
/open_manipulator_collision/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | open_manipulator_collision
5 | 4.1.1
6 |
7 | This package implements a self-collision detection system for the follower robot during
8 | leader-follower teleoperation. Its primary purpose is to enhance safety by detecting
9 | potential self-collisions in real time while the robot is being remotely operated.
10 | Pyo
11 | Apache 2.0
12 | http://wiki.ros.org/open_manipulator
13 | https://github.com/ROBOTIS-GIT/open_manipulator
14 | https://github.com/ROBOTIS-GIT/open_manipulator/issues
15 | Sungho Woo
16 | ament_cmake
17 | rclcpp
18 | sensor_msgs
19 | std_msgs
20 | eigen
21 | visualization_msgs
22 | libfcl-dev
23 | kdl_parser
24 | urdf
25 |
26 | ament_cmake
27 |
28 |
29 |
--------------------------------------------------------------------------------
/open_manipulator_description/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | ################################################################################
2 | # Set minimum required version of cmake, project name and compile options
3 | ################################################################################
4 | cmake_minimum_required(VERSION 3.5)
5 | project(open_manipulator_description)
6 |
7 | if(NOT CMAKE_CXX_STANDARD)
8 | set(CMAKE_CXX_STANDARD 14)
9 | endif()
10 |
11 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
12 | add_compile_options(-Wall -Wextra -Wpedantic)
13 | endif()
14 |
15 | ################################################################################
16 | # Find ament packages and libraries for ament and system dependencies
17 | ################################################################################
18 | find_package(ament_cmake REQUIRED)
19 |
20 | ################################################################################
21 | # Install
22 | ################################################################################
23 | install(DIRECTORY launch meshes rviz urdf gazebo ros2_control
24 | DESTINATION share/${PROJECT_NAME}
25 | )
26 |
27 | ################################################################################
28 | # Macro for ament package
29 | ################################################################################
30 | ament_package()
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ROBOTIS OpenMANIPULATOR ROS 2 Packages
2 |
3 | This repository contains the official ROS 2 packages for the ROBOTIS OpenMANIPULATOR platform. These packages provide the necessary interfaces and tools to control the robot, integrate with its sensors, and develop physical AI applications, including those utilizing frameworks like LeRobot. For detailed usage instructions, please refer to the documentation below.
4 | - [Documentation for OMY](https://ai.robotis.com/omy/introduction_omy.html)
5 | - [Documentation for OpenMANIPULATOR-X](https://emanual.robotis.com/docs/en/platform/openmanipulator_x/overview/)
6 |
7 | To learn more about the Physical AI Tools, visit:
8 | - [Physical AI Tools](https://github.com/ROBOTIS-GIT/physical_ai_tools)
9 |
10 | To explore our open-source platforms in a simulation environment, visit:
11 | - [Simulation Models](https://github.com/ROBOTIS-GIT/robotis_mujoco_menagerie)
12 |
13 | For usage instructions and demonstrations of the OpenMANIPULATOR, check out:
14 | - [Tutorial Videos](https://www.youtube.com/@ROBOTISOpenSourceTeam)
15 |
16 | To access datasets and pre-trained models for our open-source platforms, see:
17 | - [AI Models & Datasets](https://huggingface.co/ROBOTIS)
18 |
19 | To use the Docker image for running ROS packages and Physical AI tools with the OpenMANIPULATOR, visit:
20 | - [Docker Images](https://hub.docker.com/r/robotis/ros/tags)
21 |
--------------------------------------------------------------------------------
/open_manipulator_gui/launch/omy_3m_gui.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Sungho Woo
18 |
19 | import os
20 |
21 | from ament_index_python.packages import get_package_share_directory
22 | from launch import LaunchDescription
23 | from launch_ros.actions import Node
24 |
25 |
26 | def generate_launch_description():
27 | csv_file_path = os.path.join(
28 | get_package_share_directory('open_manipulator_gui'),
29 | 'config',
30 | 'omy_3m_joint_log.csv',
31 | )
32 |
33 | gui_node = Node(
34 | package='open_manipulator_gui',
35 | executable='omy_3m_gui_node',
36 | output='screen',
37 | parameters=[{'use_sim_time': True}, {'csv_path': csv_file_path}],
38 | )
39 |
40 | return LaunchDescription([gui_node])
41 |
--------------------------------------------------------------------------------
/open_manipulator_gui/launch/omy_f3m_gui.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Sungho Woo
18 |
19 | import os
20 |
21 | from ament_index_python.packages import get_package_share_directory
22 | from launch import LaunchDescription
23 | from launch_ros.actions import Node
24 |
25 |
26 | def generate_launch_description():
27 | csv_file_path = os.path.join(
28 | get_package_share_directory('open_manipulator_gui'),
29 | 'config',
30 | 'omy_f3m_joint_log.csv',
31 | )
32 |
33 | gui_node = Node(
34 | package='open_manipulator_gui',
35 | executable='omy_f3m_gui_node',
36 | output='screen',
37 | parameters=[{'use_sim_time': True}, {'csv_path': csv_file_path}],
38 | )
39 |
40 | return LaunchDescription([gui_node])
41 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_f3m_follower_ai/hardware_controller_manager.yaml:
--------------------------------------------------------------------------------
1 | /**:
2 | controller_manager:
3 | ros__parameters:
4 | update_rate: 400 # Hz
5 | thread_priority: 40
6 | cpu_affinity: [1, 2, 3]
7 |
8 | joint_state_broadcaster:
9 | type: joint_state_broadcaster/JointStateBroadcaster
10 |
11 | arm_controller:
12 | type: joint_trajectory_controller/JointTrajectoryController
13 |
14 | gpio_command_controller:
15 | type: gpio_controllers/GpioCommandController
16 |
17 | /**:
18 | arm_controller:
19 | ros__parameters:
20 | joints:
21 | - joint1
22 | - joint2
23 | - joint3
24 | - joint4
25 | - joint5
26 | - joint6
27 | - rh_r1_joint
28 |
29 | interface_name: position
30 |
31 | command_interfaces:
32 | - position
33 |
34 | state_interfaces:
35 | - position
36 | - velocity
37 |
38 | allow_partial_joints_goal: true
39 |
40 | /**:
41 | gpio_command_controller:
42 | ros__parameters:
43 | type: gpio_controllers/GpioCommandController
44 | gpios:
45 | - omy_end
46 | command_interfaces:
47 | omy_end:
48 | - interfaces:
49 | - R LED
50 | - G LED
51 | - B LED
52 | state_interfaces:
53 | omy_end:
54 | - interfaces:
55 | - Button Status
56 |
--------------------------------------------------------------------------------
/open_manipulator_gui/launch/omx_f_gui.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Wonho Yun, Sungho Woo, Heewon Lee
18 |
19 | import os
20 |
21 | from ament_index_python.packages import get_package_share_directory
22 | from launch import LaunchDescription
23 | from launch_ros.actions import Node
24 |
25 |
26 | def generate_launch_description():
27 | csv_file_path = os.path.join(
28 | get_package_share_directory('open_manipulator_gui'),
29 | 'config',
30 | 'omx_f_joint_log.csv',
31 | )
32 |
33 | gui_node = Node(
34 | package='open_manipulator_gui',
35 | executable='omx_f_gui_node',
36 | output='screen',
37 | parameters=[{'use_sim_time': True}, {'csv_path': csv_file_path}],
38 | )
39 |
40 | return LaunchDescription([gui_node])
41 |
--------------------------------------------------------------------------------
/open_manipulator_gui/launch/open_manipulator_x_gui.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Wonho Yun, Sungho Woo
18 |
19 | import os
20 |
21 | from ament_index_python.packages import get_package_share_directory
22 | from launch import LaunchDescription
23 | from launch_ros.actions import Node
24 |
25 |
26 | def generate_launch_description():
27 | csv_file_path = os.path.join(
28 | get_package_share_directory('open_manipulator_gui'),
29 | 'config',
30 | 'open_manipulator_x_joint_log.csv',
31 | )
32 |
33 | gui_node = Node(
34 | package='open_manipulator_gui',
35 | executable='open_manipulator_x_gui_node',
36 | output='screen',
37 | parameters=[{'use_sim_time': True}, {'csv_path': csv_file_path}],
38 | )
39 |
40 | return LaunchDescription([gui_node])
41 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | open_manipulator_bringup
5 | 4.1.1
6 | OpenMANIPULATOR bringup ROS 2 package.
7 | Pyo
8 | Apache 2.0
9 | http://wiki.ros.org/open_manipulator
10 | https://github.com/ROBOTIS-GIT/open_manipulator
11 | https://github.com/ROBOTIS-GIT/open_manipulator/issues
12 | Hye-Jong KIM
13 | Sungho Woo
14 | Wonho Yun
15 | Woojin Wie
16 | rclpy
17 | dynamixel_hardware_interface
18 | ros_gz_bridge
19 | ros_gz_sim
20 | ros_gz_image
21 | robot_state_publisher
22 | gz_ros2_control
23 | ros2_control
24 | ros2_controllers
25 | rviz2
26 | open_manipulator_description
27 | xacro
28 |
29 | ament_python
30 |
31 |
32 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/omy_3m/joint_limits.yaml:
--------------------------------------------------------------------------------
1 | # joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed
2 |
3 | # For beginners, we downscale velocity and acceleration limits.
4 | # You can always specify higher scaling factors (<= 1.0) in your motion requests. # Increase the values below to 1.0 to always move at maximum speed.
5 | default_velocity_scaling_factor: 0.1
6 | default_acceleration_scaling_factor: 0.1
7 |
8 | # Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration]
9 | # Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits]
10 | joint_limits:
11 | joint1:
12 | has_velocity_limits: true
13 | max_velocity: 5.0
14 | has_acceleration_limits: true
15 | max_acceleration: 5.0
16 | joint2:
17 | has_velocity_limits: true
18 | max_velocity: 5.0
19 | has_acceleration_limits: true
20 | max_acceleration: 5.0
21 | joint3:
22 | has_velocity_limits: true
23 | max_velocity: 5.0
24 | has_acceleration_limits: true
25 | max_acceleration: 5.0
26 | joint4:
27 | has_velocity_limits: true
28 | max_velocity: 5.0
29 | has_acceleration_limits: true
30 | max_acceleration: 5.0
31 | joint5:
32 | has_velocity_limits: true
33 | max_velocity: 5.0
34 | has_acceleration_limits: true
35 | max_acceleration: 5.0
36 | joint6:
37 | has_velocity_limits: true
38 | max_velocity: 5.0
39 | has_acceleration_limits: true
40 | max_acceleration: 5.0
41 |
--------------------------------------------------------------------------------
/open_manipulator_gui/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | open_manipulator_gui
5 | 4.1.1
6 |
7 | The OpenMANIPULATOR GUI ROS 2 package enables users to explore Joint Space,
8 | Task Space, and even work with the Task Constructor functionality.
9 | Pyo
10 | Apache 2.0
11 | http://wiki.ros.org/open_manipulator
12 | https://github.com/ROBOTIS-GIT/open_manipulator
13 | https://github.com/ROBOTIS-GIT/open_manipulator/issues
14 | Hye-Jong KIM
15 | Sungho Woo
16 | Wonho Yun
17 | ament_cmake
18 | rclcpp
19 | std_msgs
20 | sensor_msgs
21 | qtbase5-dev
22 | qt5-qmake
23 | libqt5-core
24 | libqt5-gui
25 | eigen3_cmake_module
26 | moveit_msgs
27 | moveit_core
28 | moveit_ros_planning
29 | moveit_ros_planning_interface
30 | geometry_msgs
31 |
32 | ament_cmake
33 |
34 |
35 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/open_manipulator_x/joint_limits.yaml:
--------------------------------------------------------------------------------
1 | # joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed
2 |
3 | # For beginners, we downscale velocity and acceleration limits.
4 | # You can always specify higher scaling factors (<= 1.0) in your motion requests. # Increase the values below to 1.0 to always move at maximum speed.
5 | default_velocity_scaling_factor: 0.1
6 | default_acceleration_scaling_factor: 0.1
7 |
8 | # Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration]
9 | # Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits]
10 | joint_limits:
11 | gripper_left_joint:
12 | has_velocity_limits: true
13 | max_velocity: 5.0
14 | has_acceleration_limits: true
15 | max_acceleration: 5.0
16 | gripper_right_joint:
17 | has_velocity_limits: true
18 | max_velocity: 5.0
19 | has_acceleration_limits: true
20 | max_acceleration: 5.0
21 | joint1:
22 | has_velocity_limits: true
23 | max_velocity: 5.0
24 | has_acceleration_limits: true
25 | max_acceleration: 5.0
26 | joint2:
27 | has_velocity_limits: true
28 | max_velocity: 5.0
29 | has_acceleration_limits: true
30 | max_acceleration: 5.0
31 | joint3:
32 | has_velocity_limits: true
33 | max_velocity: 5.0
34 | has_acceleration_limits: true
35 | max_acceleration: 5.0
36 | joint4:
37 | has_velocity_limits: true
38 | max_velocity: 5.0
39 | has_acceleration_limits: true
40 | max_acceleration: 5.0
41 |
--------------------------------------------------------------------------------
/open_manipulator_collision/launch/self_collision.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Sungho Woo
18 |
19 | from launch import LaunchDescription
20 | from launch.substitutions import Command, PathJoinSubstitution
21 | from launch_ros.actions import Node
22 | from launch_ros.substitutions import FindPackageShare
23 |
24 |
25 | def generate_launch_description():
26 | urdf_path = PathJoinSubstitution([
27 | FindPackageShare('open_manipulator_description'),
28 | 'urdf',
29 | 'omy_f3m',
30 | 'omy_f3m.urdf.xacro'
31 | ])
32 |
33 | return LaunchDescription([
34 |
35 | Node(
36 | package='open_manipulator_collision',
37 | executable='self_collision_node',
38 | name='self_collision_node',
39 | parameters=[{
40 | 'robot_description': Command(['xacro ', urdf_path]),
41 | 'base_link': 'link0',
42 | 'tip_link': 'rh_p12_rn_base',
43 | 'enable_marker': False
44 | }],
45 | output='screen'
46 | )
47 | ])
48 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/omx_f/joint_limits.yaml:
--------------------------------------------------------------------------------
1 | # joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed
2 |
3 | # For beginners, we downscale velocity and acceleration limits.
4 | # You can always specify higher scaling factors (<= 1.0) in your motion requests. # Increase the values below to 1.0 to always move at maximum speed.
5 | default_velocity_scaling_factor: 0.1
6 | default_acceleration_scaling_factor: 0.1
7 |
8 | # Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration]
9 | # Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits]
10 | joint_limits:
11 | gripper_joint_1:
12 | has_velocity_limits: true
13 | max_velocity: 5.0
14 | has_acceleration_limits: true
15 | max_acceleration: 5.0
16 | gripper_joint_2:
17 | has_velocity_limits: true
18 | max_velocity: 5.0
19 | has_acceleration_limits: true
20 | max_acceleration: 5.0
21 | joint1:
22 | has_velocity_limits: true
23 | max_velocity: 5.0
24 | has_acceleration_limits: true
25 | max_acceleration: 5.0
26 | joint2:
27 | has_velocity_limits: true
28 | max_velocity: 5.0
29 | has_acceleration_limits: true
30 | max_acceleration: 5.0
31 | joint3:
32 | has_velocity_limits: true
33 | max_velocity: 5.0
34 | has_acceleration_limits: true
35 | max_acceleration: 5.0
36 | joint4:
37 | has_velocity_limits: true
38 | max_velocity: 5.0
39 | has_acceleration_limits: true
40 | max_acceleration: 5.0
41 | joint5:
42 | has_velocity_limits: true
43 | max_velocity: 5.0
44 | has_acceleration_limits: true
45 | max_acceleration: 5.0
46 |
--------------------------------------------------------------------------------
/open_manipulator_description/urdf/omy_l100/omy_l100.urdf.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
32 |
33 |
34 |
35 | $(find open_manipulator_bringup)/config/om_y_leader/gazebo_controller_manager.yaml
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/open_manipulator_bringup/om_create_udev_rules.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Wonho Yun
18 |
19 | import os
20 | import subprocess
21 |
22 |
23 | def main():
24 | print('\nThis script copies the udev rule to /etc/udev/rules.d/')
25 | print('to configure the U2D2 device for the OpenMANIPULATOR.\n')
26 |
27 | try:
28 | udev_rule_path = os.path.join(
29 | subprocess.check_output(
30 | ['ros2', 'pkg', 'prefix', 'open_manipulator_bringup']
31 | ).decode().strip(),
32 | 'share/open_manipulator_bringup/open-manipulator-cdc.rules'
33 | )
34 | subprocess.run(['sudo', 'cp', udev_rule_path, '/etc/udev/rules.d/'], check=True)
35 |
36 | print('\nReloading rules\n')
37 | subprocess.run(['sudo', 'udevadm', 'control', '--reload-rules'], check=True)
38 | subprocess.run(['sudo', 'udevadm', 'trigger'], check=True)
39 |
40 | print('\nUdev rules successfully updated.\n')
41 | except Exception as e:
42 | print(f'An error occurred: {e}')
43 |
44 |
45 | if __name__ == '__main__':
46 | main()
47 |
--------------------------------------------------------------------------------
/open_manipulator_description/urdf/omx_l/omx_l.urdf.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
33 |
34 |
35 |
36 | $(find open_manipulator_bringup)/config/$(arg config_type)/hardware_controller_manager.yaml
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_f3m_leader_ai/hardware_controller_manager.yaml:
--------------------------------------------------------------------------------
1 | /**:
2 | controller_manager:
3 | ros__parameters:
4 | update_rate: 400 # Hz
5 | thread_priority: 40
6 | cpu_affinity: [1, 2, 3]
7 |
8 | joint_state_broadcaster:
9 | type: joint_state_broadcaster/JointStateBroadcaster
10 |
11 | gravity_compensation_controller:
12 | type: gravity_compensation_controller/GravityCompensationController
13 |
14 | joint_trajectory_command_broadcaster:
15 | type: joint_trajectory_command_broadcaster/JointTrajectoryCommandBroadcaster
16 |
17 | /**:
18 | gravity_compensation_controller:
19 | ros__parameters:
20 | joints:
21 | - joint1
22 | - joint2
23 | - joint3
24 | - joint4
25 | - joint5
26 | - joint6
27 | command_interfaces:
28 | - effort
29 | state_interfaces:
30 | - position
31 | - velocity
32 | kinetic_friction_scalars:
33 | - 0.0
34 | - 0.0
35 | - 0.0
36 | - 0.0
37 | - 0.0
38 | - 0.0
39 | input_velocity_scaling_factors:
40 | - 0.1
41 | - 0.1
42 | - 0.1
43 | - 0.1
44 | - 0.1
45 | - 0.1
46 | input_acceleration_scaling_factors:
47 | - 0.0
48 | - 0.0
49 | - 0.0
50 | - 0.0
51 | - 0.0
52 | - 0.0
53 |
54 | /**:
55 | joint_trajectory_command_broadcaster:
56 | ros__parameters:
57 | joints:
58 | - joint1
59 | - joint2
60 | - joint3
61 | - joint4
62 | - joint5
63 | - joint6
64 | interfaces:
65 | - position
66 | offsets:
67 | - 0.0
68 | - 0.0
69 | - 0.0
70 | - 0.0
71 | - 0.0
72 | - 0.0
73 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/launch/omy_3m_pack.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Sungho Woo, Woojin Wie
18 |
19 | import os
20 |
21 | from ament_index_python.packages import get_package_share_directory
22 | from launch import LaunchDescription
23 | from launch.actions import IncludeLaunchDescription
24 | from launch.actions import LogInfo
25 | from launch.launch_description_sources import PythonLaunchDescriptionSource
26 |
27 |
28 | def generate_launch_description():
29 | # Get the package share directory
30 | pkg_share = get_package_share_directory('open_manipulator_bringup')
31 |
32 | # Path to the omy_3m.launch.py file
33 | omy_3m_launch_file = os.path.join(pkg_share, 'launch', 'omy_3m.launch.py')
34 |
35 | # Include the omy_3m.launch.py with pack parameters
36 | omy_3m_launch = IncludeLaunchDescription(
37 | PythonLaunchDescriptionSource([omy_3m_launch_file]),
38 | launch_arguments={
39 | 'init_position': 'true',
40 | 'init_position_file': 'pack_positions.yaml'
41 | }.items()
42 | )
43 |
44 | return LaunchDescription([
45 | LogInfo(msg='Starting OMY packing...'),
46 | omy_3m_launch,
47 | ])
48 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/launch/omy_3m_unpack.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Sungho Woo, Woojin Wie
18 |
19 | import os
20 |
21 | from ament_index_python.packages import get_package_share_directory
22 | from launch import LaunchDescription
23 | from launch.actions import IncludeLaunchDescription
24 | from launch.actions import LogInfo
25 | from launch.launch_description_sources import PythonLaunchDescriptionSource
26 |
27 |
28 | def generate_launch_description():
29 | # Get the package share directory
30 | pkg_share = get_package_share_directory('open_manipulator_bringup')
31 |
32 | # Path to the omy_3m.launch.py file
33 | omy_3m_launch_file = os.path.join(pkg_share, 'launch', 'omy_3m.launch.py')
34 |
35 | # Include the omy_3m.launch.py with pack parameters
36 | omy_3m_launch = IncludeLaunchDescription(
37 | PythonLaunchDescriptionSource([omy_3m_launch_file]),
38 | launch_arguments={
39 | 'init_position': 'true',
40 | 'init_position_file': 'initial_positions.yaml'
41 | }.items()
42 | )
43 |
44 | return LaunchDescription([
45 | LogInfo(msg='Starting OMY unpacking...'),
46 | omy_3m_launch,
47 | ])
48 |
--------------------------------------------------------------------------------
/open_manipulator_description/gazebo/rh_p12_rn_a.gazebo.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | transmission_interface/SimpleTransmission
10 |
11 | PositionJointInterface
12 |
13 |
14 | 1
15 | PositionJointInterface
16 |
17 |
18 |
19 |
20 |
21 |
22 | 1000000.0
23 | 100.0
24 | 30.0
25 | 30.0
26 | 1.0
27 | 0.001
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/open_manipulator_description/urdf/open_manipulator_x/open_manipulator_x.urdf.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
32 |
33 |
34 |
35 | $(find open_manipulator_bringup)/config/open_manipulator_x/hardware_controller_manager.yaml
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/open_manipulator/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | open_manipulator
5 | 4.1.1
6 |
7 | OpenMANIPULATOR meta ROS 2 package.
8 |
9 | Pyo
10 | Apache 2.0
11 | http://wiki.ros.org/open_manipulator
12 | https://github.com/ROBOTIS-GIT/open_manipulator
13 | https://github.com/ROBOTIS-GIT/open_manipulator/issues
14 | Darby Lim
15 | Hye-Jong KIM
16 | Ryan Shim
17 | Yong-Ho Na
18 | Will Son
19 | Sungho Woo
20 | Wonho Yun
21 | Woojin Wie
22 | ament_cmake
23 | open_manipulator_bringup
24 | open_manipulator_collision
25 | open_manipulator_description
26 | open_manipulator_gui
27 | open_manipulator_moveit_config
28 | open_manipulator_playground
29 | open_manipulator_teleop
30 | om_gravity_compensation_controller
31 | om_joint_trajectory_command_broadcaster
32 | om_spring_actuator_controller
33 |
34 | ament_cmake
35 |
36 |
37 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_3m/qc_positions.yaml:
--------------------------------------------------------------------------------
1 | joint_trajectory_executor:
2 | ros__parameters:
3 | joint_names:
4 | - joint1
5 | - joint2
6 | - joint3
7 | - joint4
8 | - joint5
9 | - joint6
10 |
11 | step_names: [home_1, joint6_1, joint6_home, joint6_2, home_2, joint5_1, joint5_home, joint5_2, home_3, joint4_1, joint4_home, joint4_2, home_4, joint3_1, joint3_home, joint3_2, home_5, joint2_1, joint2_home, joint2_2, home_6, joint1_1, joint1_home, joint1_2, home_7] # Names of the steps
12 |
13 | home_1: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
14 | joint6_1: [0.0, 0.0, 0.0, 0.0, 0.0, -3.14]
15 | joint6_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
16 | joint6_2: [0.0, 0.0, 0.0, 0.0, 0.0, 3.14]
17 | home_2: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
18 | joint5_1: [0.0, 0.0, 0.0, 0.0, -3.14, 0.0]
19 | joint5_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
20 | joint5_2: [0.0, 0.0, 0.0, 0.0, 3.14, 0.0]
21 | home_3: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
22 | joint4_1: [0.0, 0.0, 0.0, -1.57, 0.0, 0.0]
23 | joint4_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
24 | joint4_2: [0.0, 0.0, 0.0, 1.57, 0.0, 0.0]
25 | home_4: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
26 | joint3_1: [0.0, 0.0, -1.57, 0.0, 0.0, 0.0]
27 | joint3_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
28 | joint3_2: [0.0, 0.0, 1.57, 0.0, 0.0, 0.0]
29 | home_5: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
30 | joint2_1: [0.0, -1.57, 0.0, 0.0, 0.0, 0.0]
31 | joint2_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
32 | joint2_2: [0.0, 1.57, 0.0, 0.0, 0.0, 0.0]
33 | home_6: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
34 | joint1_1: [-3.14, 0.0, 0.0, 0.0, 0.0, 0.0]
35 | joint1_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
36 | joint1_2: [3.14, 0.0, 0.0, 0.0, 0.0, 0.0]
37 | home_7: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
38 |
39 | duration: 2.0
40 | epsilon: 0.01
41 | action_topic: '/arm_controller/follow_joint_trajectory'
42 | joint_states_topic: '/joint_states'
43 |
--------------------------------------------------------------------------------
/open_manipulator_description/gazebo/omx_l.gazebo.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | transmission_interface/SimpleTransmission
10 |
11 | PositionJointInterface
12 |
13 |
14 | 1
15 | PositionJointInterface
16 |
17 |
18 |
19 |
20 |
21 |
22 | 1000000.0
23 | 100.0
24 | 30.0
25 | 30.0
26 | 1.0
27 | 0.001
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/ros2_controller/om_spring_actuator_controller/CHANGELOG.rst:
--------------------------------------------------------------------------------
1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 | Changelog for package om_spring_actuator_controller
3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4 |
5 | 4.1.1 (2025-11-13)
6 | ------------------
7 | * None
8 |
9 | 4.1.0 (2025-10-24)
10 | ------------------
11 | * None
12 |
13 | 4.0.10 (2025-10-23)
14 | -------------------
15 | * None
16 |
17 | 4.0.9 (2025-09-15)
18 | ------------------
19 | * None
20 |
21 | 4.0.8 (2025-09-03)
22 | ------------------
23 | * None
24 |
25 | 4.0.7 (2025-07-17)
26 | ------------------
27 | * None
28 |
29 | 4.0.6 (2025-07-15)
30 | ------------------
31 | * None
32 |
33 | 4.0.5 (2025-07-02)
34 | ------------------
35 | * Fixed lint errors
36 | * Contributors: Sungho Woo
37 |
38 | 4.0.4 (2025-06-26)
39 | ------------------
40 | * None
41 |
42 | 4.0.3 (2025-06-25)
43 | ------------------
44 | * None
45 |
46 | 4.0.2 (2025-06-25)
47 | ------------------
48 | * None
49 |
50 | 4.0.1 (2025-06-23)
51 | ------------------
52 | * None
53 |
54 | 4.0.0 (2025-06-19)
55 | ------------------
56 | * Fix the velocity unit issue to match the new dynamixel_hardware_interface version
57 | * Contributors: Woojin Wie
58 |
59 | 3.3.0 (2025-06-10)
60 | ------------------
61 | * None
62 |
63 | 3.2.4 (2025-05-30)
64 | ------------------
65 | * Modified ROS2 controller package dependencies
66 | * Fixed stderr output handling
67 | * Deprecate ament_include_dependency usage in CMakeLists.txt
68 | * Contributors: Wonho Yun
69 |
70 | 3.2.3 (2025-05-07)
71 | ------------------
72 | * None
73 |
74 | 3.2.2 (2025-04-17)
75 | ------------------
76 | * Handle lint errors
77 | * Contributors: Woojin Wie
78 |
79 | 3.2.1 (2025-04-11)
80 | ------------------
81 | * None
82 |
83 | 3.2.0 (2025-04-09)
84 | ------------------
85 | * Updated OM-Y Follower for improved joint initialization and action-based ROS2 control
86 | * Contributors: Woojin Wie
87 |
88 | 3.1.0 (2025-03-17)
89 | ------------------
90 | * Compensated for gravity in a robot arm. It uses the KDL library to compute the torques required to maintain the arm in a desired position.
91 | * Contributors: Woojin Wie
92 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/moveit.rviz:
--------------------------------------------------------------------------------
1 | Panels:
2 | - Class: rviz_common/Displays
3 | Name: Displays
4 | Property Tree Widget:
5 | Expanded:
6 | - /MotionPlanning1
7 | - Class: rviz_common/Help
8 | Name: Help
9 | - Class: rviz_common/Views
10 | Name: Views
11 | Visualization Manager:
12 | Displays:
13 | - Class: rviz_default_plugins/Grid
14 | Name: Grid
15 | Value: true
16 | - Class: moveit_rviz_plugin/MotionPlanning
17 | Name: MotionPlanning
18 | Planned Path:
19 | Loop Animation: true
20 | State Display Time: 0.05 s
21 | Trajectory Topic: display_planned_path
22 | Planning Scene Topic: monitored_planning_scene
23 | Robot Description: robot_description
24 | Scene Geometry:
25 | Scene Alpha: 1
26 | Scene Robot:
27 | Robot Alpha: 0.5
28 | Value: true
29 | Global Options:
30 | Fixed Frame: world
31 | Tools:
32 | - Class: rviz_default_plugins/Interact
33 | - Class: rviz_default_plugins/MoveCamera
34 | - Class: rviz_default_plugins/Select
35 | Value: true
36 | Views:
37 | Current:
38 | Class: rviz_default_plugins/Orbit
39 | Distance: 2.0
40 | Focal Point:
41 | X: -0.1
42 | Y: 0.25
43 | Z: 0.30
44 | Name: Current View
45 | Pitch: 0.5
46 | Target Frame: world
47 | Yaw: -0.623
48 | Window Geometry:
49 | Height: 975
50 | QMainWindow State: 000000ff00000000fd0000000100000000000002b400000375fc0200000005fb00000044004d006f00740069006f006e0050006c0061006e006e0069006e00670020002d0020005400720061006a006500630074006f0072007900200053006c00690064006500720000000000ffffffff0000004100fffffffb000000100044006900730070006c006100790073010000003d00000123000000c900fffffffb0000001c004d006f00740069006f006e0050006c0061006e006e0069006e00670100000166000001910000018800fffffffb0000000800480065006c0070000000029a0000006e0000006e00fffffffb0000000a0056006900650077007301000002fd000000b5000000a400ffffff000001f60000037500000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
51 | Width: 1200
52 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_l100_leader_ai/hardware_controller_manager.yaml:
--------------------------------------------------------------------------------
1 | /**:
2 | controller_manager:
3 | ros__parameters:
4 | update_rate: 300 # Hz
5 | thread_priority: 20
6 | cpu_affinity: [1, 2, 3]
7 |
8 | joint_state_broadcaster:
9 | type: joint_state_broadcaster/JointStateBroadcaster
10 |
11 | gravity_compensation_controller:
12 | type: gravity_compensation_controller/GravityCompensationController
13 |
14 | spring_actuator_controller:
15 | type: spring_actuator_controller/SpringActuatorController
16 |
17 | joint_trajectory_command_broadcaster:
18 | type: joint_trajectory_command_broadcaster/JointTrajectoryCommandBroadcaster
19 |
20 | /**:
21 | gravity_compensation_controller:
22 | ros__parameters:
23 | joints:
24 | - joint1
25 | - joint2
26 | - joint3
27 | - joint4
28 | - joint5
29 | - joint6
30 | command_interfaces:
31 | - effort
32 | state_interfaces:
33 | - position
34 | - velocity
35 | kinetic_friction_scalars:
36 | - 0.8
37 | - 0.8
38 | - 0.8
39 | - 0.1
40 | - 0.1
41 | - 0.1
42 | torque_scaling_factors:
43 | - 1.0
44 | - 1.0
45 | - 1.0
46 | - 0.8
47 | - 0.8
48 | - 1.0
49 | enable_spring_effect: true
50 |
51 | /**:
52 | spring_actuator_controller:
53 | ros__parameters:
54 | joints:
55 | - rh_r1_joint
56 | command_interfaces:
57 | - effort
58 | state_interfaces:
59 | - position
60 | - velocity
61 |
62 | /**:
63 | joint_trajectory_command_broadcaster:
64 | ros__parameters:
65 | joints:
66 | - joint1
67 | - joint2
68 | - joint3
69 | - joint4
70 | - joint5
71 | - joint6
72 | - rh_r1_joint
73 | interfaces:
74 | - position
75 | reverse_joints:
76 | - rh_r1_joint
77 | offsets:
78 | - 0.0
79 | - 0.0
80 | - 0.0
81 | - 0.0
82 | - 0.0
83 | - 0.0
84 | - 0.2
85 |
--------------------------------------------------------------------------------
/open_manipulator_description/gazebo/omy_3m.gazebo.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | transmission_interface/SimpleTransmission
10 |
11 | PositionJointInterface
12 |
13 |
14 | 1
15 | PositionJointInterface
16 |
17 |
18 |
19 |
20 |
21 |
22 | 1000000.0
23 | 100.0
24 | 30.0
25 | 30.0
26 | 1.0
27 | 0.001
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/open_manipulator_description/gazebo/omy_f3m.gazebo.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | transmission_interface/SimpleTransmission
10 |
11 | PositionJointInterface
12 |
13 |
14 | 1
15 | PositionJointInterface
16 |
17 |
18 |
19 |
20 |
21 |
22 | 1000000.0
23 | 100.0
24 | 30.0
25 | 30.0
26 | 1.0
27 | 0.001
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/open_manipulator_description/gazebo/omy_l100.gazebo.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | transmission_interface/SimpleTransmission
10 |
11 | PositionJointInterface
12 |
13 |
14 | 1
15 | PositionJointInterface
16 |
17 |
18 |
19 |
20 |
21 |
22 | 1000000.0
23 | 100.0
24 | 30.0
25 | 30.0
26 | 1.0
27 | 0.001
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omy_f3m_follower_ai/qc_positions.yaml:
--------------------------------------------------------------------------------
1 | joint_trajectory_executor:
2 | ros__parameters:
3 | joint_names:
4 | - joint1
5 | - joint2
6 | - joint3
7 | - joint4
8 | - joint5
9 | - joint6
10 | - rh_r1_joint
11 |
12 | step_names: [home_1, gripper_close, gripper_open, joint6_1, joint6_home, joint6_2, home_2, joint5_1, joint5_home, joint5_2, home_3, joint4_1, joint4_home, joint4_2, home_4, joint3_1, joint3_home, joint3_2, home_5, joint2_1, joint2_home, joint2_2, home_6, joint1_1, joint1_home, joint1_2, home_7] # Names of the steps
13 |
14 | home_1: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
15 | gripper_close: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.1]
16 | gripper_open: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
17 | joint6_1: [0.0, 0.0, 0.0, 0.0, 0.0, -3.14, 0.0]
18 | joint6_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
19 | joint6_2: [0.0, 0.0, 0.0, 0.0, 0.0, 3.14, 0.0]
20 | home_2: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
21 | joint5_1: [0.0, 0.0, 0.0, 0.0, -3.14, 0.0, 0.0]
22 | joint5_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
23 | joint5_2: [0.0, 0.0, 0.0, 0.0, 3.14, 0.0, 0.0]
24 | home_3: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
25 | joint4_1: [0.0, 0.0, 0.0, -1.57, 0.0, 0.0, 0.0]
26 | joint4_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
27 | joint4_2: [0.0, 0.0, 0.0, 1.57, 0.0, 0.0, 0.0]
28 | home_4: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
29 | joint3_1: [0.0, 0.0, -1.57, 0.0, 0.0, 0.0, 0.0]
30 | joint3_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
31 | joint3_2: [0.0, 0.0, 1.57, 0.0, 0.0, 0.0, 0.0]
32 | home_5: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
33 | joint2_1: [0.0, -1.57, 0.0, 0.0, 0.0, 0.0, 0.0]
34 | joint2_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
35 | joint2_2: [0.0, 1.57, 0.0, 0.0, 0.0, 0.0, 0.0]
36 | home_6: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
37 | joint1_1: [-3.14, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
38 | joint1_home: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
39 | joint1_2: [3.14, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
40 | home_7: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
41 |
42 | duration: 2.0
43 | epsilon: 0.01
44 | action_topic: '/arm_controller/follow_joint_trajectory'
45 | joint_states_topic: '/joint_states'
46 |
--------------------------------------------------------------------------------
/open_manipulator_description/gazebo/open_manipulator_x.gazebo.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | transmission_interface/SimpleTransmission
10 |
11 | PositionJointInterface
12 |
13 |
14 | 1
15 | PositionJointInterface
16 |
17 |
18 |
19 |
20 |
21 |
22 | 1000000.0
23 | 100.0
24 | 30.0
25 | 30.0
26 | 1.0
27 | 0.001
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/open_manipulator_description/gazebo/omx_f.gazebo.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | transmission_interface/SimpleTransmission
10 |
11 | PositionJointInterface
12 |
13 |
14 | 1
15 | PositionJointInterface
16 |
17 |
18 |
19 |
20 |
21 |
22 | 1000000.0
23 | 100.0
24 | 30.0
25 | 30.0
26 | 1.0
27 | 0.001
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/config/omx_l_leader_ai/hardware_controller_manager.yaml:
--------------------------------------------------------------------------------
1 | /**:
2 | controller_manager:
3 | ros__parameters:
4 | update_rate: 100 # Hz
5 |
6 | joint_state_broadcaster:
7 | type: joint_state_broadcaster/JointStateBroadcaster
8 |
9 | gravity_compensation_controller:
10 | type: gravity_compensation_controller/GravityCompensationController
11 |
12 | trigger_position_controller:
13 | type: position_controllers/JointGroupPositionController
14 |
15 | joint_trajectory_command_broadcaster:
16 | type: joint_trajectory_command_broadcaster/JointTrajectoryCommandBroadcaster
17 |
18 | /**:
19 | gravity_compensation_controller:
20 | ros__parameters:
21 | joints:
22 | - joint1
23 | - joint2
24 | - joint3
25 | - joint4
26 | - joint5
27 | command_interfaces:
28 | - effort
29 | state_interfaces:
30 | - position
31 | - velocity
32 | kinetic_friction_scalars:
33 | - 0.0005
34 | - 0.15
35 | - 0.15
36 | - 0.15
37 | - 0.15
38 | torque_scaling_factors:
39 | - 200.0
40 | - 350.0
41 | - 300.0
42 | - 300.0
43 | - 300.0
44 | input_velocity_scaling_factors:
45 | - 1.0
46 | - 0.1
47 | - 0.1
48 | - 0.1
49 | - 0.1
50 | input_acceleration_scaling_factors:
51 | - 0.2
52 | - 0.0
53 | - 0.0
54 | - 0.0
55 | - 0.0
56 | friction_compensation_velocity_thresholds:
57 | - 100.0
58 | - 3.5
59 | - 3.5
60 | - 3.5
61 | - 3.5
62 | - 3.5
63 |
64 | /**:
65 | trigger_position_controller:
66 | ros__parameters:
67 | joints:
68 | - gripper_joint_1
69 |
70 | /**:
71 | joint_trajectory_command_broadcaster:
72 | ros__parameters:
73 | joints:
74 | - joint1
75 | - joint2
76 | - joint3
77 | - joint4
78 | - joint5
79 | - gripper_joint_1
80 | interfaces:
81 | - position
82 | reverse_joints:
83 | - gripper_joint_1
84 | offsets:
85 | - 0.0
86 | - 0.0
87 | - 0.0
88 | - 0.0
89 | - 0.0
90 | - 0.0
91 |
--------------------------------------------------------------------------------
/ros2_controller/om_gravity_compensation_controller/CHANGELOG.rst:
--------------------------------------------------------------------------------
1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 | Changelog for package om_gravity_compensation_controller
3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4 |
5 | 4.1.1 (2025-11-13)
6 | ------------------
7 | * None
8 |
9 | 4.1.0 (2025-10-24)
10 | ------------------
11 | * None
12 |
13 | 4.0.10 (2025-10-23)
14 | -------------------
15 | * None
16 |
17 | 4.0.9 (2025-09-15)
18 | ------------------
19 | * None
20 |
21 | 4.0.8 (2025-09-03)
22 | ------------------
23 | * Added parameter for enabling spring effect
24 | * Added parameters about scaling factors for input joint velocities and accelerations
25 | * Contributors: Woojin Wie
26 |
27 | 4.0.7 (2025-07-17)
28 | ------------------
29 | * None
30 |
31 | 4.0.6 (2025-07-15)
32 | ------------------
33 | * None
34 |
35 | 4.0.5 (2025-07-02)
36 | ------------------
37 | * Added feedback control for leader-follower synchronization
38 | * Contributors: Sungho Woo
39 |
40 | 4.0.4 (2025-06-26)
41 | ------------------
42 | * None
43 |
44 | 4.0.3 (2025-06-25)
45 | ------------------
46 | * None
47 |
48 | 4.0.2 (2025-06-25)
49 | ------------------
50 | * None
51 |
52 | 4.0.1 (2025-06-23)
53 | ------------------
54 | * None
55 |
56 | 4.0.0 (2025-06-19)
57 | ------------------
58 | * Fix the velocity unit issue to match the new dynamixel_hardware_interface version
59 | * Contributors: Woojin Wie
60 |
61 | 3.3.0 (2025-06-10)
62 | ------------------
63 | * None
64 |
65 | 3.2.4 (2025-05-30)
66 | ------------------
67 | * Modified ROS2 controller package dependencies
68 | * Fixed stderr output handling
69 | * Deprecate ament_include_dependency usage in CMakeLists.txt
70 | * Contributors: Wonho Yun
71 |
72 | 3.2.3 (2025-05-07)
73 | ------------------
74 | * None
75 |
76 | 3.2.2 (2025-04-17)
77 | ------------------
78 | * None
79 |
80 | 3.2.1 (2025-04-11)
81 | ------------------
82 | * None
83 |
84 | 3.2.0 (2025-04-09)
85 | ------------------
86 | * Updated OM-Y Follower for improved joint initialization and action-based ROS2 control
87 | * Contributors: Woojin Wie
88 |
89 | 3.1.0 (2025-03-17)
90 | ------------------
91 | * Compensated for gravity in a robot arm. It uses the KDL library to compute the torques required to maintain the arm in a desired position.
92 | * Contributors: Woojin Wie
93 |
--------------------------------------------------------------------------------
/ros2_controller/om_joint_trajectory_command_broadcaster/CHANGELOG.rst:
--------------------------------------------------------------------------------
1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 | Changelog for package om_joint_trajectory_command_broadcaster
3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4 |
5 | 4.1.1 (2025-11-13)
6 | ------------------
7 | * Updated for new realtime_tools::RealtimePublisher API\
8 | * Contributors: Woojin Wie
9 |
10 | 4.1.0 (2025-10-24)
11 | ------------------
12 | * None
13 |
14 | 4.0.10 (2025-10-23)
15 | -------------------
16 | * None
17 |
18 | 4.0.9 (2025-09-15)
19 | ------------------
20 | * None
21 |
22 | 4.0.8 (2025-09-03)
23 | ------------------
24 | * None
25 |
26 | 4.0.7 (2025-07-17)
27 | ------------------
28 | * Fixed joint offset functionality of joint trajectory command broadcaster
29 | * Contributors: Woojin Wie
30 |
31 | 4.0.6 (2025-07-15)
32 | ------------------
33 | * None
34 |
35 | 4.0.5 (2025-07-02)
36 | ------------------
37 | * Fixed lint errors
38 | * Contributors: Sungho Woo
39 |
40 | 4.0.4 (2025-06-26)
41 | ------------------
42 | * None
43 |
44 | 4.0.3 (2025-06-25)
45 | ------------------
46 | * None
47 |
48 | 4.0.2 (2025-06-25)
49 | ------------------
50 | * None
51 |
52 | 4.0.1 (2025-06-23)
53 | ------------------
54 | * None
55 |
56 | 4.0.0 (2025-06-19)
57 | ------------------
58 | * None
59 |
60 | 3.3.0 (2025-06-10)
61 | ------------------
62 | * Added self-collision functionality to OMY Follower
63 | * Contributors: Sungho Woo
64 |
65 | 3.2.4 (2025-05-30)
66 | ------------------
67 | * Modified ROS2 controller package dependencies
68 | * Fixed stderr output handling
69 | * Deprecate ament_include_dependency usage in CMakeLists.txt
70 | * Contributors: Wonho Yun
71 |
72 | 3.2.3 (2025-05-07)
73 | ------------------
74 | * None
75 |
76 | 3.2.2 (2025-04-17)
77 | ------------------
78 | * Handle lint errors
79 | * Contributors: Woojin Wie
80 |
81 | 3.2.1 (2025-04-11)
82 | ------------------
83 | * None
84 |
85 | 3.2.0 (2025-04-09)
86 | ------------------
87 | * Updated OM-Y Follower for improved joint initialization and action-based ROS2 control
88 | * Contributors: Woojin Wie
89 |
90 | 3.1.0 (2025-03-17)
91 | ------------------
92 | * Compensated for gravity in a robot arm. It uses the KDL library to compute the torques required to maintain the arm in a desired position.
93 | * Contributors: Woojin Wie
94 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | open_manipulator_moveit_config
5 | 4.1.1
6 |
7 | An automatically generated package with all the configuration and launch files for using the open_manipulator_x with the MoveIt Motion Planning Framework
8 |
9 | Pyo
10 | Apache 2.0
11 | http://wiki.ros.org/open_manipulator
12 | https://github.com/ROBOTIS-GIT/open_manipulator
13 | https://github.com/ROBOTIS-GIT/open_manipulator/issues
14 | Hye-Jong KIM
15 | Sungho Woo
16 | Wonho Yun
17 | Woojin Wie
18 | ament_cmake
19 | moveit_ros_move_group
20 | moveit_kinematics
21 | moveit_planners
22 | moveit_simple_controller_manager
23 | joint_state_publisher
24 | joint_state_publisher_gui
25 | tf2_ros
26 | xacro
27 | controller_manager
28 | moveit_configs_utils
29 | moveit_ros_move_group
30 | moveit_ros_visualization
31 | moveit_ros_warehouse
32 | warehouse_ros_sqlite
33 | moveit_setup_assistant
34 | open_manipulator_description
35 | robot_state_publisher
36 | rviz2
37 | rviz_common
38 | rviz_default_plugins
39 | tf2_ros
40 | xacro
41 |
42 | ament_cmake
43 |
44 |
45 |
--------------------------------------------------------------------------------
/ros2_controller/om_spring_actuator_controller/src/spring_actuator_controller_parameters.yaml:
--------------------------------------------------------------------------------
1 | spring_actuator_controller:
2 | # -----------------------------------------------------------
3 | # Basic interface & joint parameters
4 | # -----------------------------------------------------------
5 | joints:
6 | type: string_array
7 | default_value: []
8 | description: "Joint names to control and listen to (e.g., [joint1, joint2, ...])"
9 | read_only: true
10 | validation:
11 | unique<>: null
12 |
13 | command_interfaces:
14 | type: string_array
15 | default_value: []
16 | description: "Command interfaces provided by the hardware interface for all joints"
17 | read_only: true
18 |
19 | state_interfaces:
20 | type: string_array
21 | default_value: []
22 | description: "State interfaces provided by the hardware for all joints"
23 | read_only: true
24 |
25 | command_joints:
26 | type: string_array
27 | default_value: []
28 | description: "Joint names to control if the command and state interfaces differ"
29 | read_only: true
30 | validation:
31 | unique<>: null
32 |
33 | # -----------------------------------------------------------
34 | # Spring-specific parameters for the "trigger" joint
35 | # -----------------------------------------------------------
36 | static_friction_scalars:
37 | type: double_array
38 | default_value: [0.1]
39 | description: "Scaling factors for static friction compensation (dithering)"
40 |
41 | static_friction_velocity_thresholds:
42 | type: double_array
43 | default_value: [0.3]
44 | description: "Velocity thresholds for static friction compensation"
45 |
46 | torque_scaling_factors:
47 | type: double_array
48 | default_value: [1.0]
49 | description: "Scaling factors for calculated torques"
50 |
51 | trigger_spring_stiffness:
52 | type: double_array
53 | default_value: [0.06]
54 | description: "Spring stiffness constant (K) for the trigger joint"
55 |
56 | trigger_neutral_position:
57 | type: double_array
58 | default_value: [0.0]
59 | description: "Rest/neutral angle (in radians) for the trigger joint"
60 |
61 | trigger_damping:
62 | type: double_array
63 | default_value: [0.004]
64 | description: "Damping coefficient for the trigger joint"
65 |
--------------------------------------------------------------------------------
/open_manipulator_description/urdf/omx_f/omx_f.urdf.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
51 |
52 |
53 |
54 | $(find open_manipulator_bringup)/config/$(arg config_type)/hardware_controller_manager.yaml
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/open_manipulator_gui/include/omy_3m_gui/main_window.hpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yun, Woojin Wie
16 |
17 | #ifndef OMY_3M_GUI__MAIN_WINDOW_HPP_
18 | #define OMY_3M_GUI__MAIN_WINDOW_HPP_
19 |
20 | #include
21 | #include
22 | #include
23 | #include
24 |
25 | #include
26 |
27 | #include
28 | #include
29 |
30 | #include
31 | #include
32 | #include
33 | #include
34 |
35 | #include "omy_3m_gui/qnode.hpp"
36 | #include "omy_3m_gui/ui_omy_3m_main_window.h"
37 |
38 |
39 | namespace omy_3m_gui
40 | {
41 |
42 | class MainWindow : public QMainWindow
43 | {
44 | Q_OBJECT
45 |
46 | public:
47 | MainWindow(int argc, char ** argv, QWidget * parent = 0);
48 | ~MainWindow();
49 | void writeLog(QString str);
50 |
51 | public Q_SLOTS:
52 | void timerCallback();
53 | void on_btn_timer_start_clicked(void);
54 | void on_btn_init_pose_clicked(void);
55 | void on_btn_home_pose_clicked(void);
56 | void on_btn_read_joint_angle_clicked(void);
57 | void on_btn_send_joint_angle_clicked(void);
58 | void on_btn_read_kinematic_pose_clicked(void);
59 | void on_btn_send_kinematic_pose_clicked(void);
60 | void on_btn_save_pose_clicked(void);
61 | void on_btn_play_clicked(void);
62 | void on_btn_reset_task_clicked(void);
63 | void on_btn_stop_clicked(void);
64 | void on_btn_read_task_clicked(void);
65 | void tabSelected();
66 |
67 | private:
68 | Ui::MainWindowDesign ui;
69 | QNode qnode;
70 | QTimer * timer;
71 | QTableWidget * tableWidget;
72 | std::string csv_file_path_;
73 | };
74 |
75 | } // namespace omy_3m_gui
76 |
77 | #endif // OMY_3M_GUI__MAIN_WINDOW_HPP_
78 |
--------------------------------------------------------------------------------
/docker/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM robotis/ros:jazzy-ros-base-librealsense AS librealsense
2 |
3 | # Use the base ROS2 Jazzy image
4 | FROM ros:jazzy-ros-base AS open-manipulator
5 |
6 | COPY --from=librealsense /opt/librealsense /usr/local/
7 | COPY --from=librealsense /usr/local/lib/python3.12/dist-packages/pyrealsense2 /usr/local/lib/python3.12/dist-packages/pyrealsense2
8 | COPY --from=librealsense /usr/src/librealsense/config/99-realsense-libusb.rules /etc/udev/rules.d/
9 | COPY --from=librealsense /usr/src/librealsense/config/99-realsense-d4xx-mipi-dfu.rules /etc/udev/rules.d/
10 | ENV PYTHONPATH=$PYTHONPATH:/usr/local/lib
11 |
12 | # Set environment variables
13 | ENV DEBIAN_FRONTEND=noninteractive
14 |
15 | # Install realsense dependencies
16 | RUN apt-get update && apt-get install -y \
17 | libusb-1.0-0-dev \
18 | libglfw3-dev \
19 | ros-${ROS_DISTRO}-image-transport-plugins \
20 | ros-${ROS_DISTRO}-usb-cam \
21 | vim \
22 | nano \
23 | && rm -rf /var/lib/apt/lists/*
24 |
25 | ENV COLCON_WS=/root/ros2_ws
26 | WORKDIR ${COLCON_WS}
27 |
28 | RUN mkdir -p ${COLCON_WS}/src && \
29 | cd ${COLCON_WS}/src && \
30 | git clone -b jazzy https://github.com/ROBOTIS-GIT/dynamixel_hardware_interface.git && \
31 | git clone -b jazzy https://github.com/ROBOTIS-GIT/dynamixel_interfaces.git && \
32 | git clone -b jazzy https://github.com/ROBOTIS-GIT/DynamixelSDK.git && \
33 | git clone -b jazzy https://github.com/ROBOTIS-GIT/open_manipulator.git && \
34 | git clone -b jazzy https://github.com/ros2/rmw_zenoh.git && \
35 | git clone -b r/4.56.4 https://github.com/IntelRealSense/realsense-ros.git && \
36 | cd realsense-ros && git checkout cbd8b8487d4c0126bb590822db9469414496e62a
37 |
38 | RUN cd ${COLCON_WS} && \
39 | apt-get update && \
40 | rosdep update && \
41 | rosdep install -i --from-path src --rosdistro $ROS_DISTRO --skip-keys="librealsense2" -y && \
42 | rm -rf /var/lib/apt/lists/*
43 |
44 | RUN bash -c "source /opt/ros/${ROS_DISTRO}/setup.bash && \
45 | cd ${COLCON_WS} && \
46 | colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release"
47 |
48 | RUN echo "source /opt/ros/${ROS_DISTRO}/setup.bash" >> ~/.bashrc && \
49 | echo "source ${COLCON_WS}/install/setup.bash" >> ~/.bashrc && \
50 | echo "alias cb='colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release'" >> ~/.bashrc && \
51 | echo "export ROS_DOMAIN_ID=30" >> ~/.bashrc
52 |
53 | CMD ["bash"]
54 |
--------------------------------------------------------------------------------
/ros2_controller/om_joint_trajectory_command_broadcaster/src/joint_trajectory_command_broadcaster_parameters.yaml:
--------------------------------------------------------------------------------
1 | joint_trajectory_command_broadcaster:
2 | use_local_topics: {
3 | type: bool,
4 | default_value: false,
5 | description: "Defining if ``joint_states`` and ``dynamic_joint_states`` messages should be published into local namespace, e.g., ``/my_state_broadcaster/joint_states``."
6 | }
7 | joints: {
8 | type: string_array,
9 | default_value: [],
10 | description: "Parameter to support broadcasting of only specific joints and interfaces.
11 | It has to be used in combination with the ``interfaces`` parameter.
12 | If either ``joints`` or ``interfaces`` is left empty, all available state interfaces will be
13 | published.
14 | Joint state broadcaster asks for access to all defined interfaces on all defined joints."
15 | }
16 | extra_joints: {
17 | type: string_array,
18 | default_value: [],
19 | description: "Names of extra joints to be added to ``joint_states`` and ``dynamic_joint_states`` with state set to 0."
20 | }
21 | interfaces: {
22 | type: string_array,
23 | default_value: [],
24 | description: "Parameter to support broadcasting of only specific joints and interfaces.
25 | It has to be used in combination with the ``joints`` parameter.
26 | If either ``joints`` or ``interfaces`` is left empty, all available state interfaces will be
27 | published."
28 | }
29 | reverse_joints: {
30 | type: string_array,
31 | default_value: [],
32 | description: "Names of joints to be reversed."
33 | }
34 | offsets: {
35 | type: double_array,
36 | default_value: [],
37 | description: "Offsets of joints to be added to the joint positions."
38 | }
39 | map_interface_to_joint_state:
40 | position: {
41 | type: string,
42 | default_value: "position",
43 | }
44 | velocity: {
45 | type: string,
46 | default_value: "velocity",
47 | }
48 | effort: {
49 | type: string,
50 | default_value: "effort",
51 | }
52 | use_urdf_to_filter: {
53 | type: bool,
54 | default_value: true,
55 | description: "Uses the robot_description to filter the ``joint_states`` topic.
56 | If true, the broadcaster will publish the data of the joints present in the URDF alone.
57 | If false, the broadcaster will publish the data of any interface that has type ``position``, ``velocity``, or ``effort``."
58 | }
59 |
--------------------------------------------------------------------------------
/open_manipulator_moveit_config/config/omy_f3m/joint_limits.yaml:
--------------------------------------------------------------------------------
1 | # joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed
2 |
3 | # For beginners, we downscale velocity and acceleration limits.
4 | # You can always specify higher scaling factors (<= 1.0) in your motion requests. # Increase the values below to 1.0 to always move at maximum speed.
5 | default_velocity_scaling_factor: 0.1
6 | default_acceleration_scaling_factor: 0.1
7 |
8 | # Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration]
9 | # Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits]
10 | joint_limits:
11 | joint1:
12 | has_velocity_limits: true
13 | max_velocity: 5.0
14 | has_acceleration_limits: true
15 | max_acceleration: 5.0
16 | joint2:
17 | has_velocity_limits: true
18 | max_velocity: 5.0
19 | has_acceleration_limits: true
20 | max_acceleration: 5.0
21 | joint3:
22 | has_velocity_limits: true
23 | max_velocity: 5.0
24 | has_acceleration_limits: true
25 | max_acceleration: 5.0
26 | joint4:
27 | has_velocity_limits: true
28 | max_velocity: 5.0
29 | has_acceleration_limits: true
30 | max_acceleration: 5.0
31 | joint5:
32 | has_velocity_limits: true
33 | max_velocity: 5.0
34 | has_acceleration_limits: true
35 | max_acceleration: 5.0
36 | joint6:
37 | has_velocity_limits: true
38 | max_velocity: 5.0
39 | has_acceleration_limits: true
40 | max_acceleration: 5.0
41 | rh_l1:
42 | has_velocity_limits: true
43 | max_velocity: 5.0
44 | has_acceleration_limits: true
45 | max_acceleration: 5.0
46 | has_position_limits: true
47 | min_position: -0.01
48 | max_position: 1.14
49 | rh_l2:
50 | has_velocity_limits: true
51 | max_velocity: 5.0
52 | has_acceleration_limits: true
53 | max_acceleration: 5.0
54 | has_position_limits: true
55 | min_position: -0.01
56 | max_position: 1.14
57 | rh_r1_joint:
58 | has_velocity_limits: true
59 | max_velocity: 5.0
60 | has_acceleration_limits: true
61 | max_acceleration: 5.0
62 | has_position_limits: true
63 | min_position: -0.01
64 | max_position: 1.14
65 | rh_r2:
66 | has_velocity_limits: true
67 | max_velocity: 5.0
68 | has_acceleration_limits: true
69 | max_acceleration: 5.0
70 | has_position_limits: true
71 | min_position: -0.01
72 | max_position: 1.14
73 |
--------------------------------------------------------------------------------
/open_manipulator_gui/include/omy_f3m_gui/main_window.hpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yun, Woojin Wie
16 |
17 | #ifndef OMY_F3M_GUI__MAIN_WINDOW_HPP_
18 | #define OMY_F3M_GUI__MAIN_WINDOW_HPP_
19 |
20 | #include
21 | #include
22 | #include
23 | #include
24 |
25 | #include
26 |
27 | #include
28 | #include
29 |
30 | #include
31 | #include
32 | #include
33 | #include
34 |
35 | #include "omy_f3m_gui/qnode.hpp"
36 | #include "omy_f3m_gui/ui_omy_f3m_main_window.h"
37 |
38 |
39 | namespace omy_f3m_gui
40 | {
41 |
42 | class MainWindow : public QMainWindow
43 | {
44 | Q_OBJECT
45 |
46 | public:
47 | MainWindow(int argc, char ** argv, QWidget * parent = 0);
48 | ~MainWindow();
49 | void writeLog(QString str);
50 |
51 | public Q_SLOTS:
52 | void timerCallback();
53 | void on_btn_timer_start_clicked(void);
54 | void on_btn_init_pose_clicked(void);
55 | void on_btn_home_pose_clicked(void);
56 | void on_btn_gripper_open_clicked(void);
57 | void on_btn_gripper_close_clicked(void);
58 | void on_btn_read_joint_angle_clicked(void);
59 | void on_btn_send_joint_angle_clicked(void);
60 | void on_btn_read_kinematic_pose_clicked(void);
61 | void on_btn_send_kinematic_pose_clicked(void);
62 | void on_btn_set_gripper_clicked(void);
63 | void on_btn_save_pose_clicked(void);
64 | void on_btn_play_clicked(void);
65 | void on_btn_reset_task_clicked(void);
66 | void on_btn_stop_clicked(void);
67 | void on_btn_read_task_clicked(void);
68 | void tabSelected();
69 |
70 | private:
71 | Ui::MainWindowDesign ui;
72 | QNode qnode;
73 | QTimer * timer;
74 | QTableWidget * tableWidget;
75 | std::string csv_file_path_;
76 | };
77 |
78 | } // namespace omy_f3m_gui
79 |
80 | #endif // OMY_F3M_GUI__MAIN_WINDOW_HPP_
81 |
--------------------------------------------------------------------------------
/open_manipulator_description/urdf/omy_3m/omy_3m.urdf.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
50 |
51 |
55 |
56 |
57 |
58 | $(find open_manipulator_bringup)/config/omy_3m/hardware_controller_manager.yaml
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/open_manipulator_gui/include/omx_f_gui/main_window.hpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yun, Woojin Wie, Heewon Lee
16 |
17 | #ifndef OMX_F_GUI__MAIN_WINDOW_HPP_
18 | #define OMX_F_GUI__MAIN_WINDOW_HPP_
19 |
20 | #include
21 | #include
22 | #include
23 | #include
24 | #include
25 |
26 | #include
27 |
28 | #include
29 | #include
30 |
31 | #include
32 | #include
33 | #include
34 | #include
35 |
36 | #include "omx_f_gui/qnode.hpp"
37 | #include "omx_f_gui/ui_omx_f_main_window.h"
38 |
39 | namespace omx_f_gui
40 | {
41 |
42 | class MainWindow : public QMainWindow
43 | {
44 | Q_OBJECT
45 |
46 | public:
47 | MainWindow(int argc, char ** argv, QWidget * parent = 0);
48 | ~MainWindow();
49 | void writeLog(QString str);
50 |
51 | public Q_SLOTS:
52 | void timerCallback();
53 | void on_btn_timer_start_clicked(void);
54 | void on_btn_init_pose_clicked(void);
55 | void on_btn_home_pose_clicked(void);
56 | void on_btn_gripper_open_clicked(void);
57 | void on_btn_gripper_close_clicked(void);
58 | void on_btn_read_joint_angle_clicked(void);
59 | void on_btn_send_joint_angle_clicked(void);
60 | void on_btn_read_kinematic_pose_clicked(void);
61 | void on_btn_send_kinematic_pose_clicked(void);
62 | void on_btn_set_gripper_clicked(void);
63 | void on_btn_save_pose_clicked(void);
64 | void on_btn_play_clicked(void);
65 | void on_btn_reset_task_clicked(void);
66 | void on_btn_stop_clicked(void);
67 | void on_btn_read_task_clicked(void);
68 | void tabSelected();
69 | // void on_check_CheckBox_Toggled(bool checked);
70 |
71 | private:
72 | Ui::MainWindowDesign ui;
73 | QNode qnode;
74 | QTimer * timer;
75 | QTableWidget * tableWidget;
76 | std::string csv_file_path_;
77 | };
78 |
79 | } // namespace omx_f_gui
80 |
81 | #endif // OMX_F_GUI__MAIN_WINDOW_HPP_
82 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/setup.py:
--------------------------------------------------------------------------------
1 | from glob import glob
2 | import os
3 |
4 | from setuptools import find_packages
5 | from setuptools import setup
6 |
7 | package_name = 'open_manipulator_bringup'
8 |
9 | setup(
10 | name=package_name,
11 | version='4.1.1',
12 | packages=find_packages(exclude=['test']),
13 | data_files=[
14 | ('share/ament_index/resource_index/packages', ['resource/' + package_name]),
15 | ('share/' + package_name, ['package.xml']),
16 | (os.path.join('share', package_name, 'launch'), glob('launch/*.py')),
17 | (os.path.join('share', package_name, 'config/open_manipulator_x'),
18 | glob('config/open_manipulator_x/*')),
19 | (os.path.join('share', package_name, 'config/omy_3m'), glob('config/omy_3m/*')),
20 | (os.path.join('share', package_name, 'config/omy_f3m'), glob('config/omy_f3m/*')),
21 | (os.path.join('share', package_name, 'config/omy_f3m_follower_ai'),
22 | glob('config/omy_f3m_follower_ai/*')),
23 | (os.path.join('share', package_name, 'config/omy_f3m_leader_ai'),
24 | glob('config/omy_f3m_leader_ai/*')),
25 | (os.path.join('share', package_name, 'config/omy_l100_follower_ai'),
26 | glob('config/omy_l100_follower_ai/*')),
27 | (os.path.join('share', package_name, 'config/omy_l100_leader_ai'),
28 | glob('config/omy_l100_leader_ai/*')),
29 | (os.path.join('share', package_name, 'config/open_manipulator_x'),
30 | glob('config/open_manipulator_x/*')),
31 | (os.path.join('share', package_name, 'config/omx_f'),
32 | glob('config/omx_f/*')),
33 | (os.path.join('share', package_name, 'config/omx_f_follower_ai'),
34 | glob('config/omx_f_follower_ai/*')),
35 | (os.path.join('share', package_name, 'config/omx_l_leader_ai'),
36 | glob('config/omx_l_leader_ai/*')),
37 | (os.path.join('share', package_name, 'worlds'), glob('worlds/*')),
38 | (os.path.join('share', package_name), ['open-manipulator-cdc.rules']),
39 |
40 | ],
41 | install_requires=['setuptools'],
42 | zip_safe=True,
43 | maintainer='Pyo',
44 | maintainer_email='pyo@robotis.com',
45 | description='OpenMANIPULATOR bringup ROS 2 package.',
46 | license='Apache 2.0',
47 | tests_require=['pytest'],
48 | entry_points={
49 | 'console_scripts': [
50 | 'joint_trajectory_executor = open_manipulator_bringup.joint_trajectory_executor:main',
51 | 'om_create_udev_rules = open_manipulator_bringup.om_create_udev_rules:main',
52 | ],
53 | },
54 | )
55 |
--------------------------------------------------------------------------------
/open_manipulator_gui/include/omy_3m_gui/qnode.hpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yun, Woojin Wie
16 |
17 | #ifndef OMY_3M_GUI__QNODE_HPP_
18 | #define OMY_3M_GUI__QNODE_HPP_
19 |
20 | #include
21 | #include
22 |
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 |
29 | #include
30 | #include
31 | #include
32 |
33 | #include
34 |
35 | namespace omy_3m_gui
36 | {
37 |
38 | class QNode : public QThread
39 | {
40 | Q_OBJECT
41 |
42 | public:
43 | QNode(int argc, char ** argv);
44 | virtual ~QNode();
45 | bool init();
46 | void run();
47 | std::vector getPresentJointAngle();
48 | std::vector getPresentKinematicsPosition();
49 | bool setJointSpacePath(std::vector joint_angle);
50 | bool setTaskSpacePath(
51 | std::vector kinematics_pose,
52 | bool position_only,
53 | double position_tol,
54 | double orientation_tol);
55 | bool setToolControl(std::vector joint_angle);
56 | bool isMotionComplete();
57 | void stopMotion();
58 | bool isStopRequested();
59 | void resetStopRequest();
60 | std::string getCSVPath() const;
61 |
62 | private:
63 | int init_argc;
64 | char ** init_argv;
65 | rclcpp::Node::SharedPtr node_;
66 | std::shared_ptr executor_;
67 | std::thread spinner_thread_;
68 |
69 | std::shared_ptr move_group_;
70 |
71 | std::vector present_joint_angle_;
72 | std::vector present_kinematics_position_;
73 |
74 | void updateRobotState();
75 | std::atomic stop_requested_;
76 | std::string csv_file_path_;
77 |
78 | Q_SIGNALS:
79 | void rosShutdown();
80 | };
81 |
82 | } // namespace omy_3m_gui
83 |
84 | #endif // OMY_3M_GUI__QNODE_HPP_
85 |
--------------------------------------------------------------------------------
/open_manipulator_gui/include/open_manipulator_x_gui/main_window.hpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yun, Woojin Wie
16 |
17 | #ifndef OPEN_MANIPULATOR_X_GUI__MAIN_WINDOW_HPP_
18 | #define OPEN_MANIPULATOR_X_GUI__MAIN_WINDOW_HPP_
19 |
20 | #include
21 | #include
22 | #include
23 | #include
24 | #include
25 |
26 | #include
27 |
28 | #include
29 | #include
30 |
31 | #include
32 | #include
33 | #include
34 | #include
35 |
36 | #include "open_manipulator_x_gui/qnode.hpp"
37 | #include "open_manipulator_x_gui/ui_open_manipulator_x_main_window.h"
38 |
39 | namespace open_manipulator_x_gui
40 | {
41 |
42 | class MainWindow : public QMainWindow
43 | {
44 | Q_OBJECT
45 |
46 | public:
47 | MainWindow(int argc, char ** argv, QWidget * parent = 0);
48 | ~MainWindow();
49 | void writeLog(QString str);
50 |
51 | public Q_SLOTS:
52 | void timerCallback();
53 | void on_btn_timer_start_clicked(void);
54 | void on_btn_init_pose_clicked(void);
55 | void on_btn_home_pose_clicked(void);
56 | void on_btn_gripper_open_clicked(void);
57 | void on_btn_gripper_close_clicked(void);
58 | void on_btn_read_joint_angle_clicked(void);
59 | void on_btn_send_joint_angle_clicked(void);
60 | void on_btn_read_kinematic_pose_clicked(void);
61 | void on_btn_send_kinematic_pose_clicked(void);
62 | void on_btn_set_gripper_clicked(void);
63 | void on_btn_save_pose_clicked(void);
64 | void on_btn_play_clicked(void);
65 | void on_btn_reset_task_clicked(void);
66 | void on_btn_stop_clicked(void);
67 | void on_btn_read_task_clicked(void);
68 | void tabSelected();
69 | // void on_check_CheckBox_Toggled(bool checked);
70 |
71 | private:
72 | Ui::MainWindowDesign ui;
73 | QNode qnode;
74 | QTimer * timer;
75 | QTableWidget * tableWidget;
76 | std::string csv_file_path_;
77 | };
78 |
79 | } // namespace open_manipulator_x_gui
80 |
81 | #endif // OPEN_MANIPULATOR_X_GUI__MAIN_WINDOW_HPP_
82 |
--------------------------------------------------------------------------------
/open_manipulator_gui/include/omy_f3m_gui/qnode.hpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yun, Woojin Wie
16 |
17 | #ifndef OMY_F3M_GUI__QNODE_HPP_
18 | #define OMY_F3M_GUI__QNODE_HPP_
19 |
20 | #include
21 | #include
22 |
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 |
29 | #include
30 | #include
31 | #include
32 |
33 | #include
34 |
35 | namespace omy_f3m_gui
36 | {
37 |
38 | class QNode : public QThread
39 | {
40 | Q_OBJECT
41 |
42 | public:
43 | QNode(int argc, char ** argv);
44 | virtual ~QNode();
45 | bool init();
46 | void run();
47 | std::vector getPresentJointAngle();
48 | std::vector getPresentKinematicsPosition();
49 | bool setJointSpacePath(std::vector joint_angle);
50 | bool setTaskSpacePath(
51 | std::vector kinematics_pose,
52 | bool position_only,
53 | double position_tol,
54 | double orientation_tol);
55 | bool setToolControl(std::vector joint_angle);
56 | bool isMotionComplete();
57 | void stopMotion();
58 | bool isStopRequested();
59 | void resetStopRequest();
60 | std::string getCSVPath() const;
61 |
62 | private:
63 | int init_argc;
64 | char ** init_argv;
65 | rclcpp::Node::SharedPtr node_;
66 | std::shared_ptr executor_;
67 | std::thread spinner_thread_;
68 |
69 | std::shared_ptr move_group_;
70 | std::shared_ptr move_group2_;
71 |
72 | std::vector present_joint_angle_;
73 | std::vector present_kinematics_position_;
74 |
75 | void updateRobotState();
76 | std::atomic stop_requested_;
77 | std::string csv_file_path_;
78 |
79 | Q_SIGNALS:
80 | void rosShutdown();
81 | };
82 |
83 | } // namespace omy_f3m_gui
84 |
85 | #endif // OMY_F3M_GUI__QNODE_HPP_
86 |
--------------------------------------------------------------------------------
/open_manipulator_bringup/launch/camera_usb_cam.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Wonho Yun, Sungho Woo, Woojin Wie, Junha Cha
18 |
19 | from launch import LaunchDescription
20 | from launch.actions import DeclareLaunchArgument
21 | from launch.substitutions import LaunchConfiguration
22 | from launch.substitutions import PathJoinSubstitution
23 | from launch_ros.actions import Node
24 | from launch_ros.substitutions import FindPackageShare
25 |
26 |
27 | def generate_launch_description():
28 | # Declare launch arguments
29 | declared_arguments = [
30 | DeclareLaunchArgument(
31 | 'name',
32 | default_value='camera1',
33 | description='Name of the camera',
34 | ),
35 | DeclareLaunchArgument(
36 | 'video_device',
37 | default_value='/dev/video0',
38 | description='Video device path to open (e.g., /dev/video2)',
39 | ),
40 | ]
41 |
42 | # Launch configurations
43 | name = LaunchConfiguration('name')
44 | video_device = LaunchConfiguration('video_device')
45 |
46 | camera_config = PathJoinSubstitution([
47 | FindPackageShare('usb_cam'),
48 | 'config',
49 | 'params_1.yaml',
50 | ])
51 |
52 | camera_nodes = [
53 | Node(
54 | package='usb_cam',
55 | executable='usb_cam_node_exe',
56 | parameters=[
57 | camera_config,
58 | {
59 | 'video_device': video_device,
60 | },
61 | ],
62 | output='both',
63 | remappings=[
64 | ('image_raw', [name, '/image_raw']),
65 | ('image_raw/compressed', [name, '/image_raw/compressed']),
66 | ('image_raw/compressedDepth', [name, '/image_raw/compressedDepth']),
67 | ('image_raw/theora', [name, '/image_raw/theora']),
68 | ('camera_info', [name, '/camera_info']),
69 | ]
70 | )
71 | ]
72 |
73 | return LaunchDescription(declared_arguments + camera_nodes)
74 |
--------------------------------------------------------------------------------
/ros2_controller/om_spring_actuator_controller/include/spring_actuator_controller/visibility_control.h:
--------------------------------------------------------------------------------
1 | // Copyright 2017 Open Source Robotics Foundation, Inc.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | /* This header must be included by all rclcpp headers which declare symbols
16 | * which are defined in the rclcpp library. When not building the rclcpp
17 | * library, i.e. when using the headers in other package's code, the contents
18 | * of this header change the visibility of certain symbols which the rclcpp
19 | * library cannot have, but the consuming code must have inorder to link.
20 | */
21 |
22 | #ifndef SPRING_ACTUATOR_CONTROLLER__VISIBILITY_CONTROL_H_
23 | #define SPRING_ACTUATOR_CONTROLLER__VISIBILITY_CONTROL_H_
24 |
25 | // This logic was borrowed (then namespaced) from the examples on the gcc wiki:
26 | // https://gcc.gnu.org/wiki/Visibility
27 |
28 | #if defined _WIN32 || defined __CYGWIN__
29 | #ifdef __GNUC__
30 | #define SPRING_ACTUATOR_CONTROLLER_EXPORT __attribute__((dllexport))
31 | #define SPRING_ACTUATOR_CONTROLLER_IMPORT __attribute__((dllimport))
32 | #else
33 | #define SPRING_ACTUATOR_CONTROLLER_EXPORT __declspec(dllexport)
34 | #define SPRING_ACTUATOR_CONTROLLER_IMPORT __declspec(dllimport)
35 | #endif
36 | #ifdef SPRING_ACTUATOR_CONTROLLER_BUILDING_DLL
37 | #define SPRING_ACTUATOR_CONTROLLER_PUBLIC SPRING_ACTUATOR_CONTROLLER_EXPORT
38 | #else
39 | #define SPRING_ACTUATOR_CONTROLLER_PUBLIC SPRING_ACTUATOR_CONTROLLER_IMPORT
40 | #endif
41 | #define SPRING_ACTUATOR_CONTROLLER_PUBLIC_TYPE SPRING_ACTUATOR_CONTROLLER_PUBLIC
42 | #define SPRING_ACTUATOR_CONTROLLER_LOCAL
43 | #else
44 | #define SPRING_ACTUATOR_CONTROLLER_EXPORT __attribute__((visibility("default")))
45 | #define SPRING_ACTUATOR_CONTROLLER_IMPORT
46 | #if __GNUC__ >= 4
47 | #define SPRING_ACTUATOR_CONTROLLER_PUBLIC __attribute__((visibility("default")))
48 | #define SPRING_ACTUATOR_CONTROLLER_LOCAL __attribute__((visibility("hidden")))
49 | #else
50 | #define SPRING_ACTUATOR_CONTROLLER_PUBLIC
51 | #define SPRING_ACTUATOR_CONTROLLER_LOCAL
52 | #endif
53 | #define SPRING_ACTUATOR_CONTROLLER_PUBLIC_TYPE
54 | #endif
55 |
56 | #endif // SPRING_ACTUATOR_CONTROLLER__VISIBILITY_CONTROL_H_
57 |
--------------------------------------------------------------------------------
/open_manipulator_description/ros2_control/omy_3m_end_unit.ros2_control.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | mock_components/GenericSystem
9 | ${mock_sensor_commands}
10 | 0.0
11 |
12 |
13 | dynamixel_hardware_interface/DynamixelHardware
14 | ${port_name}
15 | 4000000
16 | 500
17 | /param/dxl_model
18 | 0
19 | 0
20 | true
21 | dynamixel_hardware_interface/dxl_state
22 | dynamixel_hardware_interface/get_dxl_data
23 | dynamixel_hardware_interface/set_dxl_data
24 | dynamixel_hardware_interface/reboot_dxl
25 | dynamixel_hardware_interface/set_dxl_torque
26 |
27 |
28 |
29 |
30 |
31 | controller
32 | 210
33 | 6
34 | 0
35 | 8
36 | 1
37 | 0
38 | 200
39 | 200
40 | 120
41 | 634
42 | 16
43 | 665
44 | 12
45 | 1
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/open_manipulator_gui/include/omx_f_gui/qnode.hpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yun, Woojin Wie, Heewon Lee
16 |
17 | #ifndef OMX_F_GUI__QNODE_HPP_
18 | #define OMX_F_GUI__QNODE_HPP_
19 |
20 | #include
21 | #include
22 |
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 |
29 | #include
30 | #include
31 | #include
32 |
33 | #include
34 |
35 | namespace omx_f_gui
36 | {
37 |
38 | class QNode : public QThread
39 | {
40 | Q_OBJECT
41 |
42 | public:
43 | QNode(int argc, char ** argv);
44 | virtual ~QNode();
45 | bool init();
46 | void run();
47 |
48 | std::vector getPresentJointAngle();
49 | std::vector getPresentKinematicsPosition();
50 | bool setJointSpacePath(std::vector joint_angle);
51 | bool setTaskSpacePath(
52 | std::vector kinematics_pose,
53 | bool position_only,
54 | double position_tol,
55 | double orientation_tol);
56 | bool setToolControl(std::vector joint_angle);
57 | bool isMotionComplete();
58 | void stopMotion();
59 | bool isStopRequested();
60 | void resetStopRequest();
61 | bool sendTorqueSrv(bool checked);
62 | std::string getCSVPath() const;
63 |
64 | private:
65 | int init_argc;
66 | char ** init_argv;
67 | rclcpp::Node::SharedPtr node_;
68 | std::shared_ptr executor_;
69 | std::thread spinner_thread_;
70 | rclcpp::Client::SharedPtr torque_client_;
71 |
72 | std::shared_ptr move_group_;
73 | std::shared_ptr move_group2_;
74 |
75 | std::vector present_joint_angle_;
76 | std::vector present_kinematics_position_;
77 | void updateRobotState();
78 | std::atomic stop_requested_;
79 | std::string csv_file_path_;
80 |
81 | Q_SIGNALS:
82 | void rosShutdown();
83 | };
84 |
85 | } // namespace omx_f_gui
86 |
87 | #endif // OMX_F_GUI__QNODE_HPP_
88 |
--------------------------------------------------------------------------------
/ros2_controller/om_gravity_compensation_controller/include/gravity_compensation_controller/visibility_control.h:
--------------------------------------------------------------------------------
1 | // Copyright 2017 Open Source Robotics Foundation, Inc.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | /* This header must be included by all rclcpp headers which declare symbols
16 | * which are defined in the rclcpp library. When not building the rclcpp
17 | * library, i.e. when using the headers in other package's code, the contents
18 | * of this header change the visibility of certain symbols which the rclcpp
19 | * library cannot have, but the consuming code must have inorder to link.
20 | */
21 |
22 | #ifndef GRAVITY_COMPENSATION_CONTROLLER__VISIBILITY_CONTROL_H_
23 | #define GRAVITY_COMPENSATION_CONTROLLER__VISIBILITY_CONTROL_H_
24 |
25 | // This logic was borrowed (then namespaced) from the examples on the gcc wiki:
26 | // https://gcc.gnu.org/wiki/Visibility
27 |
28 | #if defined _WIN32 || defined __CYGWIN__
29 | #ifdef __GNUC__
30 | #define GRAVITY_COMPENSATION_CONTROLLER_EXPORT __attribute__((dllexport))
31 | #define GRAVITY_COMPENSATION_CONTROLLER_IMPORT __attribute__((dllimport))
32 | #else
33 | #define GRAVITY_COMPENSATION_CONTROLLER_EXPORT __declspec(dllexport)
34 | #define GRAVITY_COMPENSATION_CONTROLLER_IMPORT __declspec(dllimport)
35 | #endif
36 | #ifdef GRAVITY_COMPENSATION_CONTROLLER_BUILDING_DLL
37 | #define GRAVITY_COMPENSATION_CONTROLLER_PUBLIC GRAVITY_COMPENSATION_CONTROLLER_EXPORT
38 | #else
39 | #define GRAVITY_COMPENSATION_CONTROLLER_PUBLIC GRAVITY_COMPENSATION_CONTROLLER_IMPORT
40 | #endif
41 | #define GRAVITY_COMPENSATION_CONTROLLER_PUBLIC_TYPE GRAVITY_COMPENSATION_CONTROLLER_PUBLIC
42 | #define GRAVITY_COMPENSATION_CONTROLLER_LOCAL
43 | #else
44 | #define GRAVITY_COMPENSATION_CONTROLLER_EXPORT __attribute__((visibility("default")))
45 | #define GRAVITY_COMPENSATION_CONTROLLER_IMPORT
46 | #if __GNUC__ >= 4
47 | #define GRAVITY_COMPENSATION_CONTROLLER_PUBLIC __attribute__((visibility("default")))
48 | #define GRAVITY_COMPENSATION_CONTROLLER_LOCAL __attribute__((visibility("hidden")))
49 | #else
50 | #define GRAVITY_COMPENSATION_CONTROLLER_PUBLIC
51 | #define GRAVITY_COMPENSATION_CONTROLLER_LOCAL
52 | #endif
53 | #define GRAVITY_COMPENSATION_CONTROLLER_PUBLIC_TYPE
54 | #endif
55 |
56 | #endif // GRAVITY_COMPENSATION_CONTROLLER__VISIBILITY_CONTROL_H_
57 |
--------------------------------------------------------------------------------
/open_manipulator_gui/include/open_manipulator_x_gui/qnode.hpp:
--------------------------------------------------------------------------------
1 | // Copyright 2024 ROBOTIS CO., LTD.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 | //
15 | // Author: Ryan Shim, Sungho Woo, Wonho Yun, Woojin Wie
16 |
17 | #ifndef OPEN_MANIPULATOR_X_GUI__QNODE_HPP_
18 | #define OPEN_MANIPULATOR_X_GUI__QNODE_HPP_
19 |
20 | #include
21 | #include
22 |
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 |
29 | #include
30 | #include
31 | #include
32 |
33 | #include
34 |
35 | namespace open_manipulator_x_gui
36 | {
37 |
38 | class QNode : public QThread
39 | {
40 | Q_OBJECT
41 |
42 | public:
43 | QNode(int argc, char ** argv);
44 | virtual ~QNode();
45 | bool init();
46 | void run();
47 |
48 | std::vector getPresentJointAngle();
49 | std::vector getPresentKinematicsPosition();
50 | bool setJointSpacePath(std::vector joint_angle);
51 | bool setTaskSpacePath(
52 | std::vector kinematics_pose,
53 | bool position_only,
54 | double position_tol,
55 | double orientation_tol);
56 | bool setToolControl(std::vector joint_angle);
57 | bool isMotionComplete();
58 | void stopMotion();
59 | bool isStopRequested();
60 | void resetStopRequest();
61 | bool sendTorqueSrv(bool checked);
62 | std::string getCSVPath() const;
63 |
64 | private:
65 | int init_argc;
66 | char ** init_argv;
67 | rclcpp::Node::SharedPtr node_;
68 | std::shared_ptr executor_;
69 | std::thread spinner_thread_;
70 | rclcpp::Client::SharedPtr torque_client_;
71 |
72 | std::shared_ptr move_group_;
73 | std::shared_ptr move_group2_;
74 |
75 | std::vector present_joint_angle_;
76 | std::vector present_kinematics_position_;
77 | void updateRobotState();
78 | std::atomic stop_requested_;
79 | std::string csv_file_path_;
80 |
81 | Q_SIGNALS:
82 | void rosShutdown();
83 | };
84 |
85 | } // namespace open_manipulator_x_gui
86 |
87 | #endif // OPEN_MANIPULATOR_X_GUI__QNODE_HPP_
88 |
--------------------------------------------------------------------------------
/ros2_controller/om_joint_trajectory_command_broadcaster/include/joint_trajectory_command_broadcaster/visibility_control.h:
--------------------------------------------------------------------------------
1 | // Copyright 2017 Open Source Robotics Foundation, Inc.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | /* This header must be included by all rclcpp headers which declare symbols
16 | * which are defined in the rclcpp library. When not building the rclcpp
17 | * library, i.e. when using the headers in other package's code, the contents
18 | * of this header change the visibility of certain symbols which the rclcpp
19 | * library cannot have, but the consuming code must have inorder to link.
20 | */
21 |
22 | #ifndef JOINT_TRAJECTORY_COMMAND_BROADCASTER__VISIBILITY_CONTROL_H_
23 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER__VISIBILITY_CONTROL_H_
24 |
25 | // This logic was borrowed (then namespaced) from the examples on the gcc wiki:
26 | // https://gcc.gnu.org/wiki/Visibility
27 |
28 | #if defined _WIN32 || defined __CYGWIN__
29 | #ifdef __GNUC__
30 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_EXPORT __attribute__((dllexport))
31 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_IMPORT __attribute__((dllimport))
32 | #else
33 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_EXPORT __declspec(dllexport)
34 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_IMPORT __declspec(dllimport)
35 | #endif
36 | #ifdef JOINT_TRAJECTORY_COMMAND_BROADCASTER_BUILDING_DLL
37 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_PUBLIC JOINT_TRAJECTORY_COMMAND_BROADCASTER_EXPORT
38 | #else
39 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_PUBLIC JOINT_TRAJECTORY_COMMAND_BROADCASTER_IMPORT
40 | #endif
41 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_PUBLIC_TYPE JOINT_TRAJECTORY_COMMAND_BROADCASTER_PUBLIC
42 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_LOCAL
43 | #else
44 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_EXPORT __attribute__((visibility("default")))
45 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_IMPORT
46 | #if __GNUC__ >= 4
47 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_PUBLIC __attribute__((visibility("default")))
48 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_LOCAL __attribute__((visibility("hidden")))
49 | #else
50 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_PUBLIC
51 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_LOCAL
52 | #endif
53 | #define JOINT_TRAJECTORY_COMMAND_BROADCASTER_PUBLIC_TYPE
54 | #endif
55 |
56 | #endif // JOINT_TRAJECTORY_COMMAND_BROADCASTER__VISIBILITY_CONTROL_H_
57 |
--------------------------------------------------------------------------------
/open_manipulator_description/launch/omx_f.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Wonho Yun, Sungho Woo, Woojin Wie
18 |
19 |
20 | from launch import LaunchDescription
21 | from launch.actions import DeclareLaunchArgument
22 | from launch.conditions import IfCondition
23 | from launch.substitutions import Command
24 | from launch.substitutions import FindExecutable
25 | from launch.substitutions import LaunchConfiguration
26 | from launch.substitutions import PathJoinSubstitution
27 | from launch_ros.actions import Node
28 | from launch_ros.substitutions import FindPackageShare
29 |
30 |
31 | def generate_launch_description():
32 | prefix = LaunchConfiguration('prefix')
33 | use_gui = LaunchConfiguration('use_gui')
34 |
35 | urdf_file = Command([
36 | PathJoinSubstitution([FindExecutable(name='xacro')]),
37 | ' ',
38 | PathJoinSubstitution([
39 | FindPackageShare('open_manipulator_description'),
40 | 'urdf',
41 | 'omx_f',
42 | 'omx_f.urdf.xacro',
43 | ]),
44 | ' ',
45 | 'prefix:=',
46 | prefix,
47 | ' ',
48 | 'use_mock_hardware:=',
49 | 'True',
50 | ])
51 |
52 | rviz_config_file = PathJoinSubstitution([
53 | FindPackageShare('open_manipulator_description'),
54 | 'rviz',
55 | 'open_manipulator.rviz',
56 | ])
57 |
58 | return LaunchDescription([
59 | DeclareLaunchArgument(
60 | 'prefix',
61 | default_value='""',
62 | description='prefix of the joint and link names',
63 | ),
64 | DeclareLaunchArgument(
65 | 'use_gui',
66 | default_value='true',
67 | description='Run joint state publisher gui node',
68 | ),
69 | Node(
70 | package='robot_state_publisher',
71 | executable='robot_state_publisher',
72 | parameters=[{'robot_description': urdf_file}],
73 | output='screen',
74 | ),
75 | Node(
76 | package='rviz2',
77 | executable='rviz2',
78 | arguments=['-d', rviz_config_file],
79 | output='screen',
80 | ),
81 | Node(
82 | package='joint_state_publisher_gui',
83 | executable='joint_state_publisher_gui',
84 | condition=IfCondition(use_gui),
85 | ),
86 | ])
87 |
--------------------------------------------------------------------------------
/open_manipulator_description/launch/omx_l.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Wonho Yun, Sungho Woo, Woojin Wie
18 |
19 |
20 | from launch import LaunchDescription
21 | from launch.actions import DeclareLaunchArgument
22 | from launch.conditions import IfCondition
23 | from launch.substitutions import Command
24 | from launch.substitutions import FindExecutable
25 | from launch.substitutions import LaunchConfiguration
26 | from launch.substitutions import PathJoinSubstitution
27 | from launch_ros.actions import Node
28 | from launch_ros.substitutions import FindPackageShare
29 |
30 |
31 | def generate_launch_description():
32 | prefix = LaunchConfiguration('prefix')
33 | use_gui = LaunchConfiguration('use_gui')
34 |
35 | urdf_file = Command([
36 | PathJoinSubstitution([FindExecutable(name='xacro')]),
37 | ' ',
38 | PathJoinSubstitution([
39 | FindPackageShare('open_manipulator_description'),
40 | 'urdf',
41 | 'omx_l',
42 | 'omx_l.urdf.xacro',
43 | ]),
44 | ' ',
45 | 'prefix:=',
46 | prefix,
47 | ' ',
48 | 'use_mock_hardware:=',
49 | 'True',
50 | ])
51 |
52 | rviz_config_file = PathJoinSubstitution([
53 | FindPackageShare('open_manipulator_description'),
54 | 'rviz',
55 | 'open_manipulator.rviz',
56 | ])
57 |
58 | return LaunchDescription([
59 | DeclareLaunchArgument(
60 | 'prefix',
61 | default_value='""',
62 | description='prefix of the joint and link names',
63 | ),
64 | DeclareLaunchArgument(
65 | 'use_gui',
66 | default_value='true',
67 | description='Run joint state publisher gui node',
68 | ),
69 | Node(
70 | package='robot_state_publisher',
71 | executable='robot_state_publisher',
72 | parameters=[{'robot_description': urdf_file}],
73 | output='screen',
74 | ),
75 | Node(
76 | package='rviz2',
77 | executable='rviz2',
78 | arguments=['-d', rviz_config_file],
79 | output='screen',
80 | ),
81 | Node(
82 | package='joint_state_publisher_gui',
83 | executable='joint_state_publisher_gui',
84 | condition=IfCondition(use_gui),
85 | ),
86 | ])
87 |
--------------------------------------------------------------------------------
/open_manipulator_description/launch/omy_3m.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Wonho Yun, Sungho Woo, Woojin Wie
18 |
19 |
20 | from launch import LaunchDescription
21 | from launch.actions import DeclareLaunchArgument
22 | from launch.conditions import IfCondition
23 | from launch.substitutions import Command
24 | from launch.substitutions import FindExecutable
25 | from launch.substitutions import LaunchConfiguration
26 | from launch.substitutions import PathJoinSubstitution
27 | from launch_ros.actions import Node
28 | from launch_ros.substitutions import FindPackageShare
29 |
30 |
31 | def generate_launch_description():
32 | prefix = LaunchConfiguration('prefix')
33 | use_gui = LaunchConfiguration('use_gui')
34 |
35 | urdf_file = Command([
36 | PathJoinSubstitution([FindExecutable(name='xacro')]),
37 | ' ',
38 | PathJoinSubstitution([
39 | FindPackageShare('open_manipulator_description'),
40 | 'urdf',
41 | 'omy_3m',
42 | 'omy_3m.urdf.xacro',
43 | ]),
44 | ' ',
45 | 'prefix:=',
46 | prefix,
47 | ' ',
48 | 'use_mock_hardware:=',
49 | 'True',
50 | ])
51 |
52 | rviz_config_file = PathJoinSubstitution([
53 | FindPackageShare('open_manipulator_description'),
54 | 'rviz',
55 | 'open_manipulator.rviz',
56 | ])
57 |
58 | return LaunchDescription([
59 | DeclareLaunchArgument(
60 | 'prefix',
61 | default_value='""',
62 | description='prefix of the joint and link names',
63 | ),
64 | DeclareLaunchArgument(
65 | 'use_gui',
66 | default_value='true',
67 | description='Run joint state publisher gui node',
68 | ),
69 | Node(
70 | package='robot_state_publisher',
71 | executable='robot_state_publisher',
72 | parameters=[{'robot_description': urdf_file}],
73 | output='screen',
74 | ),
75 | Node(
76 | package='rviz2',
77 | executable='rviz2',
78 | arguments=['-d', rviz_config_file],
79 | output='screen',
80 | ),
81 | Node(
82 | package='joint_state_publisher_gui',
83 | executable='joint_state_publisher_gui',
84 | condition=IfCondition(use_gui),
85 | ),
86 | ])
87 |
--------------------------------------------------------------------------------
/open_manipulator_description/launch/omy_f3m.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Wonho Yun, Sungho Woo, Woojin Wie
18 |
19 |
20 | from launch import LaunchDescription
21 | from launch.actions import DeclareLaunchArgument
22 | from launch.conditions import IfCondition
23 | from launch.substitutions import Command
24 | from launch.substitutions import FindExecutable
25 | from launch.substitutions import LaunchConfiguration
26 | from launch.substitutions import PathJoinSubstitution
27 | from launch_ros.actions import Node
28 | from launch_ros.substitutions import FindPackageShare
29 |
30 |
31 | def generate_launch_description():
32 | prefix = LaunchConfiguration('prefix')
33 | use_gui = LaunchConfiguration('use_gui')
34 |
35 | urdf_file = Command([
36 | PathJoinSubstitution([FindExecutable(name='xacro')]),
37 | ' ',
38 | PathJoinSubstitution([
39 | FindPackageShare('open_manipulator_description'),
40 | 'urdf',
41 | 'omy_f3m',
42 | 'omy_f3m.urdf.xacro',
43 | ]),
44 | ' ',
45 | 'prefix:=',
46 | prefix,
47 | ' ',
48 | 'use_mock_hardware:=',
49 | 'True',
50 | ])
51 |
52 | rviz_config_file = PathJoinSubstitution([
53 | FindPackageShare('open_manipulator_description'),
54 | 'rviz',
55 | 'open_manipulator.rviz',
56 | ])
57 |
58 | return LaunchDescription([
59 | DeclareLaunchArgument(
60 | 'prefix',
61 | default_value='""',
62 | description='prefix of the joint and link names',
63 | ),
64 | DeclareLaunchArgument(
65 | 'use_gui',
66 | default_value='true',
67 | description='Run joint state publisher gui node',
68 | ),
69 | Node(
70 | package='robot_state_publisher',
71 | executable='robot_state_publisher',
72 | parameters=[{'robot_description': urdf_file}],
73 | output='screen',
74 | ),
75 | Node(
76 | package='rviz2',
77 | executable='rviz2',
78 | arguments=['-d', rviz_config_file],
79 | output='screen',
80 | ),
81 | Node(
82 | package='joint_state_publisher_gui',
83 | executable='joint_state_publisher_gui',
84 | condition=IfCondition(use_gui),
85 | ),
86 | ])
87 |
--------------------------------------------------------------------------------
/open_manipulator_description/launch/omy_l100.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Wonho Yun, Sungho Woo, Woojin Wie
18 |
19 |
20 | from launch import LaunchDescription
21 | from launch.actions import DeclareLaunchArgument
22 | from launch.conditions import IfCondition
23 | from launch.substitutions import Command
24 | from launch.substitutions import FindExecutable
25 | from launch.substitutions import LaunchConfiguration
26 | from launch.substitutions import PathJoinSubstitution
27 | from launch_ros.actions import Node
28 | from launch_ros.substitutions import FindPackageShare
29 |
30 |
31 | def generate_launch_description():
32 | prefix = LaunchConfiguration('prefix')
33 | use_gui = LaunchConfiguration('use_gui')
34 |
35 | urdf_file = Command([
36 | PathJoinSubstitution([FindExecutable(name='xacro')]),
37 | ' ',
38 | PathJoinSubstitution([
39 | FindPackageShare('open_manipulator_description'),
40 | 'urdf',
41 | 'omy_l100',
42 | 'omy_l100.urdf.xacro',
43 | ]),
44 | ' ',
45 | 'prefix:=',
46 | prefix,
47 | ' ',
48 | 'use_mock_hardware:=',
49 | 'True',
50 | ])
51 |
52 | rviz_config_file = PathJoinSubstitution([
53 | FindPackageShare('open_manipulator_description'),
54 | 'rviz',
55 | 'open_manipulator.rviz',
56 | ])
57 |
58 | return LaunchDescription([
59 | DeclareLaunchArgument(
60 | 'prefix',
61 | default_value='""',
62 | description='prefix of the joint and link names',
63 | ),
64 | DeclareLaunchArgument(
65 | 'use_gui',
66 | default_value='true',
67 | description='Run joint state publisher gui node',
68 | ),
69 | Node(
70 | package='robot_state_publisher',
71 | executable='robot_state_publisher',
72 | parameters=[{'robot_description': urdf_file}],
73 | output='screen',
74 | ),
75 | Node(
76 | package='rviz2',
77 | executable='rviz2',
78 | arguments=['-d', rviz_config_file],
79 | output='screen',
80 | ),
81 | Node(
82 | package='joint_state_publisher_gui',
83 | executable='joint_state_publisher_gui',
84 | condition=IfCondition(use_gui),
85 | ),
86 | ])
87 |
--------------------------------------------------------------------------------
/open_manipulator_collision/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | ################################################################################
2 | # Set minimum required version of cmake, project name and compile options
3 | ################################################################################
4 | cmake_minimum_required(VERSION 3.5)
5 | project(open_manipulator_collision)
6 |
7 | # Default to C++14
8 | set(CMAKE_CXX_STANDARD 14)
9 | set(CMAKE_CXX_STANDARD_REQUIRED ON)
10 |
11 | ################################################################################
12 | # Find ament packages and libraries for ament and system dependencies
13 | ################################################################################
14 | find_package(ament_cmake REQUIRED)
15 | find_package(rclcpp REQUIRED)
16 | find_package(std_msgs REQUIRED)
17 | find_package(sensor_msgs REQUIRED)
18 | find_package(Eigen3 REQUIRED)
19 | find_package(fcl REQUIRED)
20 | find_package(visualization_msgs REQUIRED)
21 | find_package(kdl_parser REQUIRED)
22 | find_package(urdf REQUIRED)
23 |
24 | ################################################################################
25 | # Build
26 | ################################################################################
27 | add_executable(self_collision_node src/self_collision_node.cpp)
28 |
29 | target_include_directories(self_collision_node
30 | PUBLIC
31 | $
32 | $
33 | ${urdf_INCLUDE_DIRS}
34 | ${kdl_parser_INCLUDE_DIRS}
35 | ${sensor_msgs_INCLUDE_DIRS}
36 | ${visualization_msgs_INCLUDE_DIRS}
37 | ${std_msgs_INCLUDE_DIRS}
38 | ${EIGEN3_INCLUDE_DIR}
39 | )
40 |
41 | target_link_libraries(self_collision_node
42 | PUBLIC
43 | rclcpp::rclcpp
44 | ${std_msgs_TARGETS}
45 | ${sensor_msgs_TARGETS}
46 | ${visualization_msgs_TARGETS}
47 | ${kdl_parser_TARGETS}
48 | ${urdf_TARGETS}
49 | Eigen3::Eigen
50 | fcl
51 | )
52 |
53 | ################################################################################
54 | # Install
55 | ################################################################################
56 | install(TARGETS
57 | self_collision_node
58 | DESTINATION lib/${PROJECT_NAME}
59 | )
60 |
61 | install(DIRECTORY include/
62 | DESTINATION include/
63 | )
64 |
65 | install(DIRECTORY launch/
66 | DESTINATION share/${PROJECT_NAME}
67 | )
68 |
69 | ################################################################################
70 | # Macro for ament package
71 | ################################################################################
72 | ament_export_dependencies(
73 | rclcpp
74 | std_msgs
75 | sensor_msgs
76 | visualization_msgs
77 | kdl_parser
78 | urdf
79 | )
80 |
81 | ament_export_include_directories(
82 | include
83 | ${urdf_INCLUDE_DIRS}
84 | ${kdl_parser_INCLUDE_DIRS}
85 | ${sensor_msgs_INCLUDE_DIRS}
86 | ${visualization_msgs_INCLUDE_DIRS}
87 | ${std_msgs_INCLUDE_DIRS}
88 | ${EIGEN3_INCLUDE_DIR}
89 | )
90 |
91 | ament_export_libraries(self_collision_node)
92 |
93 | ament_package()
94 |
--------------------------------------------------------------------------------
/open_manipulator_description/launch/open_manipulator_x.launch.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | #
3 | # Copyright 2024 ROBOTIS CO., LTD.
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 | #
17 | # Author: Wonho Yun, Sungho Woo, Woojin Wie
18 |
19 |
20 | from launch import LaunchDescription
21 | from launch.actions import DeclareLaunchArgument
22 | from launch.conditions import IfCondition
23 | from launch.substitutions import Command
24 | from launch.substitutions import FindExecutable
25 | from launch.substitutions import LaunchConfiguration
26 | from launch.substitutions import PathJoinSubstitution
27 | from launch_ros.actions import Node
28 | from launch_ros.substitutions import FindPackageShare
29 |
30 |
31 | def generate_launch_description():
32 | prefix = LaunchConfiguration('prefix')
33 | use_gui = LaunchConfiguration('use_gui')
34 |
35 | urdf_file = Command([
36 | PathJoinSubstitution([FindExecutable(name='xacro')]),
37 | ' ',
38 | PathJoinSubstitution([
39 | FindPackageShare('open_manipulator_description'),
40 | 'urdf',
41 | 'open_manipulator_x',
42 | 'open_manipulator_x.urdf.xacro',
43 | ]),
44 | ' ',
45 | 'prefix:=',
46 | prefix,
47 | ' ',
48 | 'use_mock_hardware:=',
49 | 'True',
50 | ])
51 |
52 | rviz_config_file = PathJoinSubstitution([
53 | FindPackageShare('open_manipulator_description'),
54 | 'rviz',
55 | 'open_manipulator.rviz',
56 | ])
57 |
58 | return LaunchDescription([
59 | DeclareLaunchArgument(
60 | 'prefix',
61 | default_value='""',
62 | description='Prefix of the joint and link names',
63 | ),
64 | DeclareLaunchArgument(
65 | 'use_gui',
66 | default_value='true',
67 | description='Run joint state publisher gui node',
68 | ),
69 | Node(
70 | package='robot_state_publisher',
71 | executable='robot_state_publisher',
72 | parameters=[{'robot_description': urdf_file}],
73 | output='screen',
74 | ),
75 | Node(
76 | package='rviz2',
77 | executable='rviz2',
78 | arguments=['-d', rviz_config_file],
79 | output='screen',
80 | ),
81 | Node(
82 | package='joint_state_publisher_gui',
83 | executable='joint_state_publisher_gui',
84 | condition=IfCondition(use_gui),
85 | ),
86 | ])
87 |
--------------------------------------------------------------------------------
/open_manipulator_description/urdf/omy_f3m/omy_f3m.urdf.xacro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
64 |
65 |
69 |
70 |
71 |
72 | $(find open_manipulator_bringup)/config/$(arg config_type)/hardware_controller_manager.yaml
73 |
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/open_manipulator_playground/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | ################################################################################
2 | # Set minimum required version of cmake, project name and compile options
3 | ################################################################################
4 | cmake_minimum_required(VERSION 3.10)
5 | project(open_manipulator_playground)
6 |
7 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
8 | add_compile_options(-Wall -Wextra -Wpedantic)
9 | endif()
10 |
11 | ################################################################################
12 | # Find ament packages and libraries for ament and system dependencies
13 | ################################################################################
14 | find_package(ament_cmake REQUIRED)
15 | find_package(moveit_ros_planning_interface REQUIRED)
16 | find_package(rclcpp REQUIRED)
17 |
18 | ################################################################################
19 | # Build
20 | ################################################################################
21 | include_directories(
22 | include
23 | ${CMAKE_CURRENT_SOURCE_DIR}
24 | )
25 |
26 | add_executable(open_manipulator_x_hello_moveit src/open_manipulator_x_hello_moveit.cpp)
27 | target_include_directories(open_manipulator_x_hello_moveit PUBLIC
28 | $
29 | $
30 | )
31 | target_compile_features(open_manipulator_x_hello_moveit PUBLIC cxx_std_17)
32 | target_link_libraries(open_manipulator_x_hello_moveit PUBLIC
33 | moveit_ros_planning_interface::moveit_move_group_interface
34 | rclcpp::rclcpp
35 | )
36 |
37 | add_executable(omy_f3m_hello_moveit src/omy_f3m_hello_moveit.cpp)
38 | target_include_directories(omy_f3m_hello_moveit PUBLIC
39 | $
40 | $
41 | )
42 | target_compile_features(omy_f3m_hello_moveit PUBLIC cxx_std_17)
43 | target_link_libraries(omy_f3m_hello_moveit PUBLIC
44 | moveit_ros_planning_interface::moveit_move_group_interface
45 | rclcpp::rclcpp
46 | )
47 |
48 | add_executable(omy_3m_hello_moveit src/omy_3m_hello_moveit.cpp)
49 | target_include_directories(omy_3m_hello_moveit PUBLIC
50 | $
51 | $
52 | )
53 | target_compile_features(omy_3m_hello_moveit PUBLIC cxx_std_17)
54 | target_link_libraries(omy_3m_hello_moveit PUBLIC
55 | moveit_ros_planning_interface::moveit_move_group_interface
56 | rclcpp::rclcpp
57 | )
58 |
59 | ################################################################################
60 | # Install
61 | ################################################################################
62 | install(DIRECTORY include/
63 | DESTINATION include
64 | )
65 |
66 | install(TARGETS open_manipulator_x_hello_moveit omy_f3m_hello_moveit omy_3m_hello_moveit
67 | EXPORT export_${PROJECT_NAME}
68 | LIBRARY DESTINATION lib
69 | RUNTIME DESTINATION lib/${PROJECT_NAME}
70 | )
71 |
72 | ################################################################################
73 | # Macro for ament package
74 | ################################################################################
75 | ament_export_include_directories(include)
76 | ament_export_targets(export_${PROJECT_NAME})
77 | ament_package()
78 |
--------------------------------------------------------------------------------
/ros2_controller/om_gravity_compensation_controller/src/gravity_compensation_controller_parameters.yaml:
--------------------------------------------------------------------------------
1 | gravity_compensation_controller:
2 | joints: {
3 | type: string_array,
4 | default_value: [],
5 | description: "Joint names to control and listen to",
6 | read_only: true,
7 | validation: {
8 | unique<>: null,
9 | }
10 | }
11 | command_interfaces: {
12 | type: string_array,
13 | default_value: [],
14 | description: "Command interfaces provided by the hardware interface for all joints",
15 | read_only: true,
16 | }
17 | state_interfaces: {
18 | type: string_array,
19 | default_value: [],
20 | description: "State interfaces provided by the hardware for all joints.",
21 | read_only: true,
22 | }
23 | command_joints: {
24 | type: string_array,
25 | default_value: [],
26 | description: "Joint names to control. This parameters is used if JTC is used in a controller chain where command and state interfaces don't have same names.",
27 | read_only: true,
28 | validation: {
29 | unique<>: null,
30 | }
31 | }
32 | unloaded_effort_offsets: {
33 | type: double_array,
34 | default_value: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
35 | description: "Effort offsets added to actuator control commands when below threshold"
36 | }
37 | unloaded_effort_thresholds: {
38 | type: double_array,
39 | default_value: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
40 | description: "Threshold values below which unloaded_effort_offsets are added to control commands"
41 | }
42 | kinetic_friction_scalars: {
43 | type: double_array,
44 | default_value: [0.4, 0.8, 0.8, 0.1, 0.1, 0.1],
45 | description: "Scaling factors for kinetic friction"
46 | }
47 | static_friction_scalars: {
48 | type: double_array,
49 | default_value: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
50 | description: "Scaling factors for static friction compensation (dithering)"
51 | }
52 | static_friction_velocity_thresholds: {
53 | type: double_array,
54 | default_value: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
55 | description: "Velocity thresholds for static friction compensation"
56 | }
57 | torque_scaling_factors: {
58 | type: double_array,
59 | default_value: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
60 | description: "Scaling factors for calculated torques"
61 | }
62 | kinetic_friction_torque_scalars: {
63 | type: double_array,
64 | default_value: [3.0, 3.0, 3.0, 3.0, 3.0, 3.0],
65 | description: "Scaling factors for kinetic friction based on torque magnitude"
66 | }
67 | friction_compensation_velocity_thresholds: {
68 | type: double_array,
69 | default_value: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
70 | description: "Velocity thresholds for kinetic friction compensation"
71 | }
72 | input_velocity_scaling_factors: {
73 | type: double_array,
74 | default_value: [0.05, 0.05, 0.05, 0.05, 0.05, 0.05],
75 | description: "Scaling factors for input joint velocities"
76 | }
77 | input_acceleration_scaling_factors: {
78 | type: double_array,
79 | default_value: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
80 | description: "Scaling factors for input joint accelerations"
81 | }
82 | enable_spring_effect: {
83 | type: bool,
84 | default_value: false,
85 | description: "Enable additional spring effect on joint 2"
86 | }
87 |
--------------------------------------------------------------------------------
/.github/workflows/ros-ci.yml:
--------------------------------------------------------------------------------
1 | # The name of the workflow
2 | name: CI
3 |
4 | # Specifies the events that trigger the workflow
5 | on:
6 | push:
7 | branches: [ jazzy, main ]
8 | pull_request:
9 | branches: [ jazzy, main ]
10 |
11 | # Defines a set of jobs to be run as part of the workflow
12 | jobs:
13 | # The name of the job
14 | ROS_CI:
15 | runs-on: ubuntu-latest
16 | strategy:
17 | fail-fast: false
18 | matrix:
19 | ros_distribution:
20 | # - humble
21 | - jazzy
22 | - rolling
23 | include:
24 | # ROS 2 Humble Hawksbill
25 | # - docker_image: ubuntu:jammy
26 | # ros_distribution: humble
27 | # ros_version: 2
28 | # ROS 2 Jazzy Jalisco
29 | - docker_image: ubuntu:noble
30 | ros_distribution: jazzy
31 | ros_version: 2
32 | # ROS 2 Rolling Ridley
33 | - docker_image: ubuntu:noble
34 | ros_distribution: rolling
35 | ros_version: 2
36 | container:
37 | image: ${{ matrix.docker_image }}
38 | steps:
39 | - name: Setup workspace
40 | run: mkdir -p ros_ws/src
41 |
42 | - name: Checkout code
43 | uses: actions/checkout@v4
44 | with:
45 | path: ros_ws/src
46 |
47 | - name: Setup ROS environment
48 | uses: ros-tooling/setup-ros@v0.7
49 | with:
50 | required-ros-distributions: ${{ matrix.ros_distribution }}
51 |
52 | - name: Check and Install ROS dependencies
53 | shell: bash
54 | run: |
55 | set -e
56 | source /opt/ros/${{ matrix.ros_distribution }}/setup.bash
57 | echo "--- Updating rosdep definitions ---"
58 | rosdep update
59 | echo "--- Installing system dependencies for ROS 2 ${{ matrix.ros_distribution }} ---"
60 | rosdep install --from-paths ros_ws/src --ignore-src -y -r --rosdistro ${{ matrix.ros_distribution }} --skip-keys dynamixel_hardware_interface
61 | echo "--- Performing rosdep check for ROS 2 ${{ matrix.ros_distribution }} ---"
62 | if rosdep check --from-paths ros_ws/src --ignore-src --rosdistro ${{ matrix.ros_distribution }} --skip-keys dynamixel_hardware_interface; then
63 | echo "--- rosdep check passed ---"
64 | else
65 | echo "--- rosdep check failed: Missing system dependencies or unresolvable keys. ---"
66 | exit 1
67 | fi
68 |
69 | - name: Build and Test
70 | uses: ros-tooling/action-ros-ci@v0.3
71 |
72 | with:
73 | target-ros2-distro: ${{ matrix.ros_distribution }}
74 | vcs-repo-file-url: "https://raw.githubusercontent.com/ROBOTIS-GIT/open_manipulator/${{ github.event_name == 'pull_request' && github.head_ref || github.ref_name }}/open_manipulator_ci.repos"
75 | package-name: |
76 | open_manipulator
77 | open_manipulator_bringup
78 | open_manipulator_collision
79 | open_manipulator_description
80 | open_manipulator_gui
81 | open_manipulator_moveit_config
82 | open_manipulator_playground
83 | open_manipulator_teleop
84 | om_gravity_compensation_controller
85 | om_joint_trajectory_command_broadcaster
86 | om_spring_actuator_controller
87 |
--------------------------------------------------------------------------------