├── 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 | --------------------------------------------------------------------------------