Operating the Robot
August 26, 2024 ยท View on GitHub
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.
Operating the Robot
Bringup
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.
MoveIt Manual Planning
ros2 launch ur_robotiq_moveit_config ur_robotiq_moveit.launch.py ur_type:=ur10e
Similar parameters choices as above.
ur_planning
ros2 launch ur_planning ur_planning_sys.launch.py ur_type:=ur10e
Again, similar parameters choices.
Major Modifications/Additions
Here, I will just record some major modifications and additions I made to the official UR repos.
Teleoperation
- Successfully implemented joint-space and twist teleoperation for fake hardware in RViz.
- Added
JoyToServoPub_ur10e.cpptour_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:=trueThen, 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.
EFF Integration
Robotiq 2F-85
Program
- 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_hardwareandfake_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_publisherand smooth logging in MoveIt. Otherwise MoveIt will complain nonstop about missing the gripper, despite the fact that it can still control the robot fine.
Visualization
- Added
ur_robotiq_descriptionpackage to integrate the mesh and urdf of the gripper. - Added
2f_85/collisionand2f_85/visualtour_robotiq_description/mesh - Added
2f_85/robotiq_2f_85_macro.urdf.xacrotour_robotiq_description/urdf - Modified
ur_robotiq_description/urdf/ur_macro.xacro,ur_robotiq_description/urdf/ur.urdf.xacroto 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.