This package is some additions to the official UR ROS2 driver that enables teleoperation (with Moveit Servo) and some more visualization. Developed at AI4CE Lab at NYU.
To use these packages, please first follow the official installation for the original ROS2 driver, and then place this repo in a folder in your ROS2 workspace.
Each folder of this repo is an independent ROS2 package.
ros2 launch ur_robotiq_description ur_bringup.launch.py ur_type:=ur10e robot_ip:=yyy.yyy.yyy.yyy
This is the same as the official ur_robot_driver ur_control.launch.py
, but with some modifications to fit our lab's need.
Some notable parameters:
fake_hardware
: whether to only run things on RViz and such. False if you are working with the real robot.launch_rviz
: whether to turn on RViz to see the robot model.tool_choice
: which EEF tools to use, if any.
ros2 launch ur_robotiq_moveit_config ur_robotiq_moveit.launch.py ur_type:=ur10e
Similar parameters choices as above.
ros2 launch ur_planning ur_planning_sys.launch.py ur_type:=ur10e
Again, similar parameters choices.
Here, I will just record some major modifications and additions I made to the official UR repos.
- Successfully implemented joint-space and twist teleoperation for fake hardware in RViz.
- Added
JoyToServoPub_ur10e.cpp
tour_moveit_servo/src
- All 6 joints can be controlled.
- For twist control, pressing Home on a PS joystick can switch between the base frame and the EEF frame.
- I don't understand why most online discussion revolves around
forwrd_position_controller
. By default, even in fake hardware, UR driver usesscaled_joint_trajectory_controller
, so directly publishing to the latter can make servoing work. Maybe I am missing something here. - In
ur_moveit_servo/config
, a servo config is provided to make sure that velocities are published to/scaled_joint_trajectory_controller/joint_trajectory
- To run the teleoperation in RViz (real-world testing incoming), first run
ros2 launch ur_robot_driver ur_control.launch.py ur_type:=ur10e robot_ip:=yyy.yyy.yyy.yyy use_fake_hardware:=true launch_rviz:=true
Then, in another terminal, run:ros2 launch ur_moveit_servo teleop_sys_launch.py
- Added
- Add speed multiplier as a launch parameter to the teleoperation system.
- The code requires that the gripper be connected to the robot through the wrist M8 connector or the tool I/O in the control box. In other words, it does not control an independent controller but rather runs through the UR robot.
- Another package may be written to independently control the gripper in the future if there is such a need.
- In the URDF, I turned on
use_fake_hardware
andfake_sensor_commands
, because we don't actually control it through ROS, but through the MBUS connector.- This may change if we need to write an independent driver.
- This is crucial for successfully configuring the gripper for the
robot_state_publisher
and smooth logging in MoveIt. Otherwise MoveIt will complain nonstop about missing the gripper, despite the fact that it can still control the robot fine.
- Added
ur_robotiq_description
package to integrate the mesh and urdf of the gripper. - Added
2f_85/collision
and2f_85/visual
tour_robotiq_description/mesh
- Added
2f_85/robotiq_2f_85_macro.urdf.xacro
tour_robotiq_description/urdf
- Modified
ur_robotiq_description/urdf/ur_macro.xacro
,ur_robotiq_description/urdf/ur.urdf.xacro
to include the macro for the gripper - Modified
ur_robotiq_description/launch/view_ur.launch.py)
to properly load the new urdf file and visualize the robot.