一.在Gazebo中使用ROS控制器

在本节中,我们将讨论如何在Gazebo中让机器人的每个关节运动。

为了让关节动起来,我们需要分配一个ROS控制器,尤其是,我们需要为每个关节连上一个与transmission标签内指定的硬件接口兼容的控制器。

ROS控制器主要由一套反馈机构组成,可以接受某一设定点,并用执行机构的反馈控制输出。

ROS控制器使用硬件接口与硬件交互,硬件接口的主要功能是充当ROS控制器与真实或仿真硬件之间的中介,根据ROS控制器生成的数据来分配

资源控制它。

在本机器人,我们定义了位置控制器,速度控制器,力控制器等,这些ROS控制器是由名为ros_control的一组软件包提供的。

为了正确理解如何为机械臂配置ROS控制器,我们需要理解它的概念。我们将进一步讨论ros_control软件包,不同类型的ROS

控制器以及ROS控制器如何与Gazebo仿真交互。

1.认识ros_control软件包

ros_control软件包实现了机器人控制器、控制管理器、硬件接口、不同的传输接口和控制工具箱。

ros_control软件包由以下各独立的软件包组成:
*control_toolbox : 这个软件包包含通用模块(PID 和 Sine),可供所有控制器使用。

*controller_interface : 这个软件包包含了控制器的接口(interface)基类。

*controller_manager : 这个软件包提供了加载(load)、卸载(unload)、启动(start) 和停止(stop)等控制器的基础架构。

*controller_manager_msgs : 这个软件包提供了控制管理器的消息和服务定义。

*hardware_interface : 这个软件包包含了硬件接口的基类。

*transmission_interface : 这个软件包包含了传动(transmission)接口的接口类(差速、四杆联动、关节状态、位置和速度)。

2.不同类型的ROS控制器和硬件接口

包含标准ROS控制器的ROS软件包列表:

*joint_position_controller : 这是关节位置控制器的简单实现。

*joint_state_controller : 这是一个发布关节状态的控制器。

*joint_effort_controller : 这是关节力(强度)控制器的实现。

以下是ROS中常用的一些硬件接口:

*Joint Command Interface : 将命令发送到硬件。

*Effort Joint Interface : 发送effort命令。

*Velocity Joint Interface : 发送velocity命令。

*Position Joint Interface : 发送position命令。

*Joint State Interface : 从执行器编码器检索关节状态。

3.ROS控制器如何与Gazebo交互

如图可以看到ROS控制器是如何与Gazebo进行交互的,显示了ROS控制器,机器人硬件接口、仿真器/真实硬件的连接:

ROS控制器与Gazebo的接口图

我们可以看到第三方工具navigation和MoveIt软件包。这些软件包可以为移动机器人控制器和机械臂控制器提供目标位置(即设定点 )。这些控制器可以将位置、速度或驱动力发送到机器人的硬件接口上。

硬件接口将每个资源分配给控制器,并将值发送给每个资源,机器人控制器与机器人硬件接口之间的通信如图所示:

ROS控制器和硬件接口的示意图

硬件接口与实际硬件和仿真分离,来自硬件接口的值可以馈送到Gazebo进行仿真或馈送到实际硬件本身。

硬件接口是机器人及其抽象硬件的软件表示,硬件接口的资源是执行机构、关节和传感器。

有些资源是只读的,比如关节状态、IMU、力-扭矩传感器等,有些资源是可读可写的,比如位置、速度和关节驱动力。

4.将关节状态控制器和关节位置控制器连接到手臂

将机器人控制器连接到每个关节是一项简单的任务,第一项任务就是 为两个控制器编写配置文件。

关节状态控制器将发布手臂的关节状态,而且关节位置控制器可以接收每个关节的目标位置并可以让每个关节运动。

我们将在seven_dof_arm_gazebo/config文件夹下找到控制器的配置文件seven_dof_arm_gazebo_control.yaml

以下是配置文件的定义:

 1 seven_dof_arm:
2 # Publish all joint states -----------------------------------
3 joint_state_controller:
4 type: joint_state_controller/JointStateController
5 publish_rate: 50
6
7 # Position Controllers ---------------------------------------
8 joint1_position_controller:
9 type: position_controllers/JointPositionController
10 joint: shoulder_pan_joint
11 pid: {p: 100.0, i: 0.01, d: 10.0}
12 joint2_position_controller:
13 type: position_controllers/JointPositionController
14 joint: shoulder_pitch_joint
15 pid: {p: 100.0, i: 0.01, d: 10.0}
16 joint3_position_controller:
17 type: position_controllers/JointPositionController
18 joint: elbow_roll_joint
19 pid: {p: 100.0, i: 0.01, d: 10.0}
20 joint4_position_controller:
21 type: position_controllers/JointPositionController
22 joint: elbow_pitch_joint
23 pid: {p: 100.0, i: 0.01, d: 10.0}
24 joint5_position_controller:
25 type: position_controllers/JointPositionController
26 joint: wrist_roll_joint
27 pid: {p: 100.0, i: 0.01, d: 10.0}
28 joint6_position_controller:
29 type: position_controllers/JointPositionController
30 joint: wrist_pitch_joint
31 pid: {p: 100.0, i: 0.01, d: 10.0}
32 joint7_position_controller:
33 type: position_controllers/JointPositionController
34 joint: gripper_roll_joint
35 pid: {p: 100.0, i: 0.01, d: 10.0}

我们可以看到所有的控制器都位于命名空间seven_dof_arm中,第一 行代表关节状态控制器,他将以50hz的频率发布机器人的关节状态。

其他的控制器是关节位置控制器,它被分配给前七个关节,而且还定义了PID增益。

5.在Gaazebo中启动ROS控制器

如果控制器配置准备就绪,我们就可以创建一个启动文件,该文件将启动所有控制器并进行Gazebo仿真.

进入seven_dof_arm_gazebo/launch文件夹并打开seven_dof_arm_gazebo_control.launch文件:

 1 <launch>
2 <!-- Launch Gazebo -->
3 <include file="$(find seven_dof_arm_gazebo)/launch/seven_dof_arm_world.launch" />
4
5
6 <!-- Load joint controller configurations from YAML file to parameter server -->
7 <rosparam file="$(find seven_dof_arm_gazebo)/config/seven_dof_arm_gazebo_control. yaml" command="load"/>
8
9
10 <!-- load the controllers -->
11 <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn=" false"
12 output="screen" ns="/seven_dof_arm" args="joint_state_controller
13 joint1_position_controller
14 joint2_position_controller
15 joint3_position_controller
16 joint4_position_controller
17 joint5_position_controller
18 joint6_position_controller
19 joint7_position_controller"/>
20
21
22 <!-- convert joint states to TF transforms for rviz, etc -->
23 <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_ publisher"
24 respawn="false" output="screen">
25 <remap from="/joint_states" to="/seven_dof_arm/joint_states" />
26 </node>
27
28 </launch>

该启动文件可以启动手臂的Gazebo仿真,加载控制器配置信息、关节状态控制器和关节位置控制器,最后运行机器人状态发布者(负责发布关节状态和tf)

检查运行此启动文件后生成的控制器话题:

$ roslaunch seven_dof_arm_gazebo seven_dof_arm_gazebo_control.launch

如果命令执行成功,我们可以在终端看到如图所示的消息:

运行该启动文件时从控制器中生成的话题如下:

6.控制机器人的关节运动

完成以上步骤后,我们就可以开始对每个关节进行控制了。

要在Gazebo中控制机器人关节运动,我们需要使用std_msgs/Float64类型的消息将所需的关节值发布到关节位置控制器命令话题上。

如下是控制第四个关节运动到1.0度的位置:

$ rostopic pub /seven_dof_arm/joint4_position_controller/command std_msgs/Float64 1.0

还可以用以下命令查看机器人的关节状态

$rostopic echo /seven_dof_arm/joint_states

ROS和Gazebo进行机器人仿真(二)的更多相关文章

  1. ROS和Gazebo进行机器人仿真(一)

    Gazebo是一种多机器人仿真器,可用于室内外机器人仿真.Gazebo在ROS中有良好的接口,包含ROS和Gazebo的所有控制. 若要实现ROS到Gazebo的通信,我们必须安装ROS-Gazebo ...

  2. ROS中的3D机器人建模(二)

    一,创建我们的第一个URDF模型 我们设计的第一个机器人模型是pan-and-tilt机械结构,代码如下 pan_tilt.urdf: 1 <?xml version="1.0&quo ...

  3. ROS(indigo)swarm_robot 群机器人示例Gazebo

    ROS(indigo)swarm_robot 群机器人示例Gazebo 参考网址:https://github.com/yangliu28/swarm_robot_ros_sim 安装提示:catki ...

  4. ROS_Kinetic_x 基於ROS和Gazebo的RoboCup中型組仿真系統(多機器人協作)

    國防科學技術大學發布了RoboCup中型組仿真平臺,基於ROS和Gazebo設計. 該平臺可以用於多機器人協作研究.參考資料如下: ROS新聞:1    http://www.ros.org/news ...

  5. 机器人与机器人仿真技术(zz)

    http://www.viblue.com/archives/5587.htm 一.机器人简介: 机器人(Robot)是自动执行工作的机器装置.它既可以接受人类指挥,又可以运行预先编排的程序,也可以根 ...

  6. 基于 Mathematica 的机器人仿真环境(机械臂篇)[转]

    完美的教程,没有之一,收藏学习. 目的 本文手把手教你在 Mathematica 软件中搭建机器人的仿真环境,具体包括以下内容(所使用的版本是 Mathematica 11.1,更早的版本可能缺少某些 ...

  7. Emotiv脑电设备与RDS机器人仿真初步测试

    Emotiv脑电设备与RDS机器人仿真初步测试 在脑电设备相关算法进行真实机器人测试前,有必要进行大量仿真验证算法,节约开发时间. 这里给我启发的Emotiv使用所参考的一些网址. 官网:https: ...

  8. 在ROS Kinetic中使用Gazebo 8进行机器人仿真

    在ROS Kinetic中使用Gazebo 8比在ROS Indigo中使用Gazebo 3-8要容易一些. 目前最新稳定版本的Gazebo8为8.1.1. 安装流程如下: $  sudo apt-g ...

  9. ROS探索总结(四)——简单的机器人仿真

    前边我们已经介绍了ROS的基本情况,以及新手入门ROS的初级教程,现在就要真正的使用ROS进入机器人世界了.接下来我们涉及到的很多例程都是<ROS by Example>这本书的内容,我是 ...

随机推荐

  1. FPGA之IO信号类型深入理解

    在FPGA设计开发中,很多场合会遇到同一根信号既可以是输入信号,又可以是输出信号,即IO类型(Verilog定义成inout). 对于inout型的信号,我们既可以使用FPGA原语来实现,也可以使用V ...

  2. 基础之Lamada和Stream的邂逅

    show me the code and take to me,做的出来更要说的明白 GitHub项目JavaHouse同步收录 喜欢就点个赞呗! 你的支持是我分享的动力! 引入 是否有遇到看不懂身边 ...

  3. DRF 08

    目录 三大认证 流程 认证组件 权限组件 频率组件 自定义token的签发 三大认证 流程 由于DRF中, 所有的视图类都要直接和间接继承APIView类, 也只有APIView类中才有dispatc ...

  4. win10纯净版安装及其常用软件集锦(2020新年湘岳阳万江波整理)

    win10纯净版安装及其常用软件集锦 1.安装win10纯净版:链接:https://pan.baidu.com/s/1L9yl-LNxxDQbEN_TGswzcA 提取码:u0pt 2.安装WPS2 ...

  5. 「学习笔记」 FHQ Treap

    FHQ Treap FHQ Treap (%%%发明者范浩强年年NOI金牌)是一种神奇的数据结构,也叫非旋Treap,它不像Treap zig zag搞不清楚(所以叫非旋嘛),也不像Splay完全看不 ...

  6. 「UVA1328」「POJ1961」 Period 解题报告

    UVA1328 Period 其他链接:luogu UVA1328 POJ1961 For each prefix of a given string S with N characters (eac ...

  7. 1092 最好吃的月饼 (20分)C语言

    月饼是久负盛名的中国传统糕点之一,自唐朝以来,已经发展出几百品种. 若想评比出一种"最好吃"的月饼,那势必在吃货界引发一场腥风血雨-- 在这里我们用数字说话,给出全国各地各种月饼的 ...

  8. 记: Spring Data Jpa @OneToMany 级联查询被动触发的问题

    I have encountered a bug in using Spring Data Jpa. Specifically,when @OneToMany was used to maintain ...

  9. 细说javascript typeof操作符

    细说javascript typeof操作符 typeof定义 typeof是一元运算符,用来返回操作数类型的字符串.下面是ECAMScript5.1关于typeof的标准定义: NOTE:上面表格标 ...

  10. Oracle数据库连接工具的使用(三)

    一.PL/SQL Developer介绍 1.简介 PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用.PL/SQL也是一种程序语言,叫做过程化SQL语言(Pro ...