Uso de Controladores no ROS
Walter Fetter Lages
Universidade Federal do Rio Grande do Sul Escola de Engenharia
Departamento de Sistemas Elétricos de Automação e Energia ENG10026 Robótica A
Introdução
•
Pacote para descrever e implementar
controladores no ROS
•
A definição de controlador do ROS não é a
clássica de Sistemas de Controle
•
Módulo que é carregado pelo gerenciador de
controladores
•
Não necessariamente implementa um
controlador
•
Existem alguns controladores já
implementados no ROS (PID)
Estrutura do Pacote
mob_controllers/
CMakeLists.txt
launch/
bypass.launch
joint_velocity.launch
config/
bypass.yaml
joint_velocity.yaml
package.xml
Dependências
•ros_control
•control_toolbox
•controller_interface
•controller_manager
•hardware_interface
•joint_limits_interface
•transmission_interface
•realtime_tools
sudo apt−get install ros−indigo−ros−control
Dependências
•ros_controllers
•effort_controllers
•joint_effort_controller
•joint_position_controller
•joint_velocity_controller
•position_controllers
•joint_position_controller
•velocity_controllers
•joint_velocity_controller:
•joint_state_controller
Dependências
•robot_model
•
kdl_parser
•
robot_state_publisher
•Já instalado no ROS desktop
•
orocos_kdl
•
Já instalado no ROS desktop
Dependências
•gazebo_ros_pkgs
•
gazebo_ros_control
sudo apt−get install ros−indigo−gazebo−ros−pkgs ros−indigo− gazebo−ros−control
Criação do Pacote
source /opt/ros/indigo/setup.bash
source $HOME/catkin_ws/devel/setup.bash cd ~/catkin_ws/src
catkin_create_pkg mob_controllers
package.xml
•Editar o arquivo
mob_controllers/package.xml
•Descrição
•Mantenedor
•Licença
•Autor
•Dependências
•build_depend
•run_depend
package.xml
<buildtool_depend>catkin</buildtool_depend>
<build_depend>controller_interface</build_depend> <build_depend>effort_controllers</build_depend> <run_depend>controller_interface</run_depend> <run_depend>controller_manager</run_depend> <run_depend>effort_controllers</run_depend>
<run_depend>joint_state_controller</run_depend>
Reconfigurar o Ambiente
cd ~/catkin_ws catkin_make
Gráfico de Computação
•Com controlador
Simulação em Malha aberta
•
mob_controllers/launch/bypass.
launch
<launch>
<arg name="paused" default="true"/>
<include file="$(find mob_description)/launch/gazebo.launch"> <arg name="paused" value="$(arg paused)"/>
</include>
Simulação em Malha aberta
<node name="controller_spawner" pkg="controller_manager" type
="spawner" respawn="false"
output="screen" ns="/mob" args=" left_wheel_joint_effort_controller
right_wheel_joint_effort_controller joint_state_controller"/> </launch>
bypass.yaml
•mob_controllers/config/bypass.
yaml
mob: joint_state_controller: type: joint_state_controller/JointStateController publish_rate: 100bypass.yaml
left_wheel_joint_effort_controller: type: effort_controllers/JointEffortController joint: left_wheel_joint right_wheel_joint_effort_controller: type: effort_controllers/JointEffortController joint: right_wheel_jointSimulação com PID de Velocidade
•mob_controllers/launch/joint_
velocity.launch
<launch>
<arg name="paused" default="true"/>
<include file="$(find mob_description)/launch/gazebo.launch"> <arg name="paused" value="$(arg paused)"/>
</include>
Simulação com PID de Velocidade
<launch>
<arg name="paused" default="true"/>
<include file="$(find mob_description)/launch/gazebo.launch"> <arg name="paused" value="$(arg paused)"/>
</include>
<rosparam file="$(find mob_controllers)/config/joint_velocity.yaml"
command="load"/>
<node name="controller_spawner" pkg="controller_manager" type
="spawner" respawn="false"