Gazebo - Méthode Actionneurs
Une autre méthode pour contrôler tous les modules est d'utiliser des plugins intégrés à Gazebo qui agiront comme des moteurs attachés aux liaisons.
Pour la barrière, en plus de la liaison de type revolute on appliquera le plugin gazebo_ros_control:
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/barrier1</robotNamespace>
</plugin>
</gazebo>
<transmission name="barrier1_transmission">
<type>transmission_interface/SimpleTransmission</type>
<actuator name="motor1">
<mechanicalReduction>1</mechanicalReduction>
</actuator>
<joint name="base_to_barrier">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
</transmission>
Ensuite, il faut ajouter une configuration qui permettra à Gazebo d'interpréter ce moteur:
config.yaml
barrier_1:
joint_1_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
gear_to_barrier_1_position_controller:
type: effort_controllers/JointEffortController
joint: gear_to_barrier_1
Enfin, on pourra publier sur le topic généré par le plugin:
pub = rospy.Publisher('/barrier1/gear_to_barrier_1_position_controller/command', Float64, queue_size=10)