## UR Robotiq

*This project provides tools and integration to manage a Universal Robotics UR3e robot arm with the Robotiq 2F 140 gripper.* 

## How to Download (with Submodules)

To download this repository and all of its included submodules, follow these steps:

1. **Prerequisites**
   * Make sure you have Git installed on your system ([https://git-scm.com/downloads](https://git-scm.com/downloads)).

2. **Gitea SSH Connection**
   * This is only usable in the University Network (the VPN hasn't worked so far either)
   * Follow this tutorial: https://www.techaddressed.com/tutorials/add-verify-ssh-keys-gitea/

3. **Cloning the Repository**
   * Open your terminal or command prompt.
   * Navigate to the directory where you want to download the project.
   * Run the following Git command:

   ```bash
   git clone git@git.cps.unileoben.ac.at:Niko/UR_Robotiq.git 
   ```
4. **Download necessary repos**
   ```bash
   vcs import src < UR_Robotiq.humble.repos
   ```
   The packages cartesian_controller_simulation and cartesian_controller_tests are excluded from colcon build by default.
   If you want to build them to be build delete the COLCON_IGNORE file!
## How to Start the Docker Compose

1. **Prerequisites**
   * Ensure you have Docker and Docker Compose installed on your system (Instructions can be found on the official Docker website: [https://www.docker.com/](https://www.docker.com/))

2. **Starting the Containers**
   * Navigate to the project directory in your terminal:
     ```bash
      cd <path/to/UR-Robotiq> 
     ```

   * Run the following command to start the Docker Compose:
       ```bash 
       docker compose up -d 
       ```
   * Give X11 permission to accept the stream of the container window:
     ```bash
     xhost +
     ```
   * Get the name of the container:
      ```bash
     docker ps
     ```
   * Access the terminal of the docker container
     ```bash
     docker exec -it <name of docker container> /bin/bash
     ```
     
## Working with UR + Robotiq
In general you need to start up the UR Robotiq Controller,
here the *robot_ip* has to be defined and if you want to start up the real robot or use fake hardware and if you want to launch rviz!
```bash
ros2 launch ur_robotiq_description ur_robotiq_control.launch.py robot_ip:=aaa.bbb.ccc.ddd use_fake_hardware:=<true/false(default)> launch_rviz:=<true/false(default)>
```

In addition you can start up the moveit interface:
```bash
ros2 launch ur_robotiq_moveit_config ur_robotiq_moveit.launch.py use_fake_hardware:=<true/false(default)>
```

### use_fake_hardware:=true
Terminal 1:
```bash
ros2 launch ur_robotiq_description ur_robotiq_control.launch.py robot_ip:=aaa.bbb.ccc.ddd use_fake_hardware:=true launch_rviz:=false initial_joint_controller:=joint_trajectory_controller
```
Terminal 2:
```bash
ros2 launch ur_robotiq_moveit_config ur_robotiq_moveit.launch.py use_fake_hardware:=true
```

### servoing
Terminal 3:\
**At the moment the servoing doesnt work with the collision checker (self collision still works).**
```bash
ros2 launch ur_robotiq_servo ps5_servo.launch.py
```

After launching you need to change the controller to enable the servo mode.\
Terminal 4:
```bash
ros2 control switch_controllers --deactivate joint_trajectory_controller
ros2 control switch_controllers --deactivate robotiq_gripper_joint_trajectory_controller
ros2 control switch_controllers --activate forward_position_controller
ros2 control switch_controllers --activate forward_gripper_position_controller
```