# the RoboCLuedo URDF model -- User Manual
---
```{toctree}
---
caption: Contents
---
./robocluedo-urdf-user-manual.md
```
---
## Model file structure
inside the folder `robocluedo_urdf_model` there are these files:
- `generate_model.sh` is a script to tect the correctness of the model; it also generates a `.pdf` schematic of the model
- `robocluedo_xacro.xacro` is (as the name suggests) the XACRO model of a robot labeled **robocluedo_robot**. the model is split into three files:
- `robocluedo_gazebo_materials` : graphical appearance of the robot
- `robocluedo_chassis` : the moving platform of the robot
- `robocluedo_arm` : the robotics arm
- `robocluedo_arm_gripper` : the gripper of the robotic arm; it includes the link labeled *cluedo_link*
- `robocluedo_gazebo_sensing` : definition of the Gazebo pluging related to the sensing; vision, laser, everything inside this file
- `robocluedo_sensing` : this file contains the sensors mounted on the robot
- `robocluedo_gazebo_plugins` : definition of the Gazebo plugins, without the sensing part
- `robocluedo_transmission` : Gazebo controllers
---
## HOW TO generate the model
execute the file `generate_model.sh`; the URDF and its schematic will be located into the folder `model` with names
- `robocluedo_urdf.urdf` for the URDF model,
- and `robocluedo_urdf.pdf` for the schematic
the output should be like the following:
```text
robot name is: robocluedo_robot
---------- Successfully Parsed XML ---------------
root Link: base_link has 4 child(ren)
child(1): arm_base_link
child(1): arm_link_01
child(1): arm_link_02
child(1): arm_link_03
child(1): cluedo_link
child(1): left_grip_link
child(2): right_grip_link
child(2): laser
child(3): link_left_wheel
child(4): link_right_wheel
Created file robocluedo_robot.gv
Created file robocluedo_robot.pdf
```
## HOW TO generate the package with Moveit
first of all, use the setup assistant to generate the package. Inside the project, `robocluedo_robot`.
```bash
roslaunch moveit_setup_assistant setup.assistant.launch
```
the code generated by the setup assistant won't work at the beginning. Here are the fixes:
- In trajectory_execution.launch.xml, we need to comment line 21
- In config/ros_controllers.yaml, let's modify the gain of the proportional controllers
- In config/joint_limits.yaml let's set to 1 the scaling factor.
### file ros_controllers.yaml
```yaml
# Simulation settings for using moveit_sim_controllers
moveit_sim_hw_interface:
joint_model_group: arm_group
joint_model_group_pose: extended
# Settings for ros_control_boilerplate control loop
generic_hw_control_loop:
loop_hz: 300
cycle_time_error_threshold: 0.01
# Settings for ros_control hardware interface
hardware_interface:
joints:
- arm_joint_01
- arm_joint_02
- arm_joint_03
- arm_joint_04
- joint_a_left_wheel
- joint_a_right_wheel
- joint_left_wheel
- joint_right_wheel
sim_control_mode: 1 # 0: position, 1: velocity
# Publish all joint states
# Creates the /joint_states topic necessary in ROS
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
controller_list:
- name: arm_group_controller
action_ns: follow_joint_trajectory
default: True
type: FollowJointTrajectory
joints:
- arm_joint_01
- arm_joint_02
- arm_joint_03
- arm_joint_04
- name: end_effector_group_controller
action_ns: follow_joint_trajectory
default: True
type: FollowJointTrajectory
joints:
arm_joint_04
arm_group_controller:
type: effort_controllers/JointTrajectoryController
joints:
- arm_joint_01
- arm_joint_02
- arm_joint_03
- arm_joint_04
gains:
arm_joint_01:
p: 10
d: 0
i: 0
i_clamp: 0
arm_joint_02:
p: 10
d: 0
i: 0
i_clamp: 0
arm_joint_03:
p: 10
d: 0
i: 0
i_clamp: 0
arm_joint_04:
p: 10
d: 0
i: 0
i_clamp: 0
```
### file joint_limits.yaml
```yaml
# joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed
# For beginners, we downscale velocity and acceleration limits.
# 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.
default_velocity_scaling_factor: 1.0
default_acceleration_scaling_factor: 1.0
# Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration]
# Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits]
joint_limits:
arm_joint_01:
has_velocity_limits: true
max_velocity: 0.2
has_acceleration_limits: false
max_acceleration: 0
arm_joint_02:
has_velocity_limits: true
max_velocity: 0.2
has_acceleration_limits: false
max_acceleration: 0
arm_joint_03:
has_velocity_limits: true
max_velocity: 0.2
has_acceleration_limits: false
max_acceleration: 0
arm_joint_04:
has_velocity_limits: true
max_velocity: 0.5
has_acceleration_limits: false
max_acceleration: 0
```
### Gazebo world files fix
apply this code into the file **gazebo.launch** :
```xml
```
and apply this fix in the **demo_gazebo.launch** :
```xml
```
## HOW TO test the model with Gazebo
launch this:
```bash
roslaunch robocluedo_robot gazebo.launch
```
it should appear the robot, similar to this:


### HOW TO Launch the simulation with other worlds file
the package takes the world files from the package *worlds* located into the *robocluedo_depedencied* folder. The default world file is *square_room.world*.
here's the syntax of the command:
```bash
roslaunch robocluedo_robot gazebo.launch world_name:=indoor.world
```
### HOW TO launch a world *outside the package worlds*
in case the world file is not included in the *worlds* package, you have two possibilities.
the first one is to specify both path and name in this way:
```bash
roslaunch robocluedo_robot demo_gazebo.launch world_name:=indoor.world world_file:=/root/ros_ws/src/erl2-new/robocluedo_dependencies/worlds
```
the second one is to directly specify the path with the variable `world_file_path`:
```bash
roslaunch robocluedo_robot demo_gazebo.launch world_file_path:=/root/ros_ws/src/erl2-new/robocluedo_dependencies/worlds/indoor.world
```