Open_Manipulator_X

Environment

This project was developed with the following environment and platform:
  • Ubuntu 22.04

  • ROS2 humble

  • ignition gazebo 6.16.0

  • ignition service 11.4.1

  • python 3.10.12

  • openmanipulatorx emanual

  • Intel Realsense D435

Hardware

custom planning in moveit

Installation

To use open manipulator x, first install relevant libraries by:

$ sudo apt install ros-humble-moveit*
$ sudo apt-get install ros-humble-control*
$ sudo apt-get install ros-humble-ros2-control*
$ sudo apt-get install ros-humble-ros-ign
$ sudo apt-get install ros-humble-ign-ros2-control
$ sudo apt-get install ros-humble-kinematics-interface-kdl
$ sudo apt-get install ros-humble-rqt-joint-trajectory-controller
$ sudo apt-get install python3-colcon*
$ sudo apt-get install ros-humble-ur-moveit-config

Then goto the directory containing src folder and run rosdep

$ rosdep install --from-paths src --ignore-src -r -y
Then change the specific directory of mx_controllers.yaml on your computer for the two files in package manipulatorx_ign
  • manipulator_camera.urdf.xacro

Line22  <parameters>[your full directory]/mx_controllers.yaml</parameters>
  • manipulator_camera.urdf

Line350  <parameters>[your full directory]/mx_controllers.yaml</parameters>
And one file in package manipulatorx_moveit
  • open_manipulator_x.urdf.xacro

Line18  <parameters>[your full directory]/mx_controllers.yaml</parameters>

Open_Manipulator_X status

$ source install/setup.bash
# start the controller for the arm
$ ros2 launch open_manipulator_x_controller open_manipulator_x_controller.launch.py
$ ros2 run arm_subscriber test_armsubcriber
# view the kinematic pose, joint positions and arm status

Open_Manipulator_X service

$ source install/setup.bash
# start the controller for the arm
$ ros2 launch open_manipulator_x_controller open_manipulator_x_controller.launch.py
# use the tele-op to control the joint positions
$ ros2 run arm_service test_movejoint
# <------------or--------------->
# use the tele-op to control the gripper open or close
$ ros2 run arm_service test_movetool
# <------------or--------------->
# use the tele-op to control the move in x y or z in cartesian space
$ ros2 run arm_service test_movecart
# <------------or--------------->
# run a pick-n-place program in fixed positions
$ ros2 run arm_service test_pnp

Open_Manipulator_X moveit

$ source install/setup.bash
# launch the moveit package
$ ros2 launch manipulatorx_moveit manipulator_moveit.launch.py
The moveit package demostrate the trajectory planning with several famous algorithm like PRM, RRT etc

you can test your own planning algorithm by switch to custom planning pipeline manipulator_moveit.launch.py:

$ >>> Planning Configuration
# planning_pipeline_config = {
#     "move_group": {
#         "planning_plugin": "ompl_interface/OMPLPlanner",
#         "request_adapters": """default_planner_request_adapters/AddTimeOptimalParameterization default_planner_request_adapters/FixWorkspaceBounds default_planner_request_adapters/FixStartStateBounds default_planner_request_adapters/FixStartStateCollision default_planner_request_adapters/FixStartStatePathConstraints""",
#         "start_state_max_bounds_error": 0.1,
#     }
# }
# ompl_planning_yaml = load_yaml("manipulatorx_moveit", "config/ompl_planning.yaml")
# planning_pipeline_config["move_group"].update(ompl_planning_yaml)

$ >>> custom planning configuration
planning_pipeline_config = {
  "move_group": {
      "planning_plugin": "manipulatorx_moveit/ASBRPlanner",
      "start_state_max_bounds_error": 0.1,
   }
}
asbr_planning_yaml = load_yaml("manipulatorx_moveit", "config/custom_planning.yaml")
planning_pipeline_config["move_group"].update(asbr_planning_yaml)

custom planning in moveit

Open_Manipulator_X gazebo

$ source install/setup.bash
# launch the moveit package
$ ros2 launch manipulatorx_ign manipulatorx_ign.launch.py
# you can run the node to see the arm move and view changes
$ ros2 run manipulatorx_ign test_manipulatorx_ign_node
gazebo_gif

Open_Manipulator_X ArUco

$ source install/setup.bash
# launch the pick aruco package
$ ros2 launch manipulatorx_handeye manipulatorx_handeye.launch.py
# you can run the node to see the arm move and pick up the aruco object in workspace automatically
$ ros2 run manipulatorx_handeye search_aruco
grasp_aruco_gif
The handeye calibration matrix is written into urdf, can be retrieved from:
$ ros2 run tf2_ros tf2_echo camera_color_optiocal_frame end_effector_link