ROS控制机械臂【2】:ros_control与实现

这篇笔记主要记录ros_control机制及实现过程,对应下图绿框的部分。
在这里插入图片描述

ROS_Control

ros_control是一个功能包,它针对不同机器人类型提供了多种类型的控制器,并由一个conrol manager管理所有关节的控制器。用户通过ros_control可以实现ros上层应用与仿真环境或实际样机的连接。

contorller manager
提供通用接口来管理不同关节类型的控制器。controller manager的输入就是上层应用的输出。
controller
使用PID控制器完成对每个关节的位置/速度/力控制,并读取硬件资源接口的反馈状态,形成闭环控制。
Hardware resource interface
为上下两层提供硬件资源接口。gazebo仿真就用gazebo_ros_control插件,实机控制就通过以太网传输数据。
RobotHW
机器人硬件抽象层,通过读写方式直接与机器人硬件打交道。

控制器(由ros_controller提供)

机械臂用到的控制器包括:

  • effort_controllers:控制关节的力或力矩
    • joint_effort_controller:输入为力,根据PID转换为力/力矩
    • joint_position_controller:输入为位置,根据PID转换为力/力矩
    • joint_velocity_contorller:输入为速度,根据PID转换为力/力矩
  • joint_state_controller: 发布所有注册在RobotHW上的关节状态,相应话题为/joint_states,消息类型为sensor_msgs/JointState
  • position_controllers #直接控制joints的位置
  • velocity_vontrollers #直接控制joints的速度
  • joint_trajectory_controllers #控制joint的轨迹
    • position_contorller
    • velocity_controller
    • effort_controller
    • postion_velocity_controller
    • position_velocity_acceleration_controller

Hardware Interface接口(补充第一讲,放在这主要是为了跟控制器对应)

Hardware interface在硬件层面上与ros_controllers中的插件相对应,主要包含:

JointCommandInterface类
- EffortJointInterface类
- PositionJointInterface类
- VelocityJointInterface类
JointStateInterface类
ActuatorStateInterface类

控制器搭建

在搭建好gazebo仿真模型的基础上(具体看第一讲),首先在config文件夹创建yaml配置文件

touch myrobot.yaml

为机械臂的关节配置PID控制器:

mybot:
  joint_state_controller:
    type: joint_state_controller/JointStateController
    publish_rate: 50  
  # Position Controllers 
  joint1_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint1
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint2_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint2
    pid: {p: 100.0, i: 0.01, d: 10.0}
 <!-- 有几个关节就添加几个controller -->

然后在launch文件中添加:

<launch>
  <!-- Load joint controller configurations from YAML file to parameter server -->
  <rosparam file="$(find myrobot_gazebo )/config/myrobot.yaml" command="load"/>

  <!-- load the controllers -->
  <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
    output="screen" ns="myrobot" args="joint1_position_controller joint2_position_controller joint_state_controller"/>

  <!-- convert joint states to TF transforms for rviz, etc -->
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"
    respawn="false" output="screen">
    <remap from="/joint_states" to="/mybot/joint_states" />
  </node>
</launch>

注意

  • 命名空间要保持一致
  • launch文件最好同时加载你之前保存过的rviz文件
  • robot_state_publisher接收robot_state_controller发来的话题/joint_states,并发布话题/tf,最终体现为rviz根据gazebo中机械臂的状态随动

测试

cd ~/catkin_ws
catkin_make
roslaunch myrobot_gazebo myrobot_gazebo_world.launch
  • 5
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值