ROS和Gazebo进行机器人仿真(二)
一.在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进行机器人仿真(二)的更多相关文章
- ROS和Gazebo进行机器人仿真(一)
Gazebo是一种多机器人仿真器,可用于室内外机器人仿真.Gazebo在ROS中有良好的接口,包含ROS和Gazebo的所有控制. 若要实现ROS到Gazebo的通信,我们必须安装ROS-Gazebo ...
- ROS中的3D机器人建模(二)
一,创建我们的第一个URDF模型 我们设计的第一个机器人模型是pan-and-tilt机械结构,代码如下 pan_tilt.urdf: 1 <?xml version="1.0&quo ...
- ROS(indigo)swarm_robot 群机器人示例Gazebo
ROS(indigo)swarm_robot 群机器人示例Gazebo 参考网址:https://github.com/yangliu28/swarm_robot_ros_sim 安装提示:catki ...
- ROS_Kinetic_x 基於ROS和Gazebo的RoboCup中型組仿真系統(多機器人協作)
國防科學技術大學發布了RoboCup中型組仿真平臺,基於ROS和Gazebo設計. 該平臺可以用於多機器人協作研究.參考資料如下: ROS新聞:1 http://www.ros.org/news ...
- 机器人与机器人仿真技术(zz)
http://www.viblue.com/archives/5587.htm 一.机器人简介: 机器人(Robot)是自动执行工作的机器装置.它既可以接受人类指挥,又可以运行预先编排的程序,也可以根 ...
- 基于 Mathematica 的机器人仿真环境(机械臂篇)[转]
完美的教程,没有之一,收藏学习. 目的 本文手把手教你在 Mathematica 软件中搭建机器人的仿真环境,具体包括以下内容(所使用的版本是 Mathematica 11.1,更早的版本可能缺少某些 ...
- Emotiv脑电设备与RDS机器人仿真初步测试
Emotiv脑电设备与RDS机器人仿真初步测试 在脑电设备相关算法进行真实机器人测试前,有必要进行大量仿真验证算法,节约开发时间. 这里给我启发的Emotiv使用所参考的一些网址. 官网:https: ...
- 在ROS Kinetic中使用Gazebo 8进行机器人仿真
在ROS Kinetic中使用Gazebo 8比在ROS Indigo中使用Gazebo 3-8要容易一些. 目前最新稳定版本的Gazebo8为8.1.1. 安装流程如下: $ sudo apt-g ...
- ROS探索总结(四)——简单的机器人仿真
前边我们已经介绍了ROS的基本情况,以及新手入门ROS的初级教程,现在就要真正的使用ROS进入机器人世界了.接下来我们涉及到的很多例程都是<ROS by Example>这本书的内容,我是 ...
随机推荐
- ECShop二次开发指南(一)
ECSHOP是一套完整的网络商店解决方案,包括前台的商品展示.购物流程和强大易用的后台管理.由于 ecshop简单易用,使用者几乎可以在3几分钟简单的设置一下就可以拥有一个网上商店系统,所以很多的B2 ...
- linux MySQL 5.7.20安装教程
安装MySQL 5.7.20shell> cd /usr/localshell> groupadd mysqlshell> useradd -g mysql mysqlshell&g ...
- 「JOISC 2014 Day1」历史研究 --- 回滚莫队
题目又臭又长,但其实题意很简单. 给出一个长度为\(N\)的序列与\(Q\)个询问,每个询问都对应原序列中的一个区间.对于每个查询的区间,设数\(X_{i}\)在此区间出现的次数为\(Sum_{X_{ ...
- 分布式唯一ID:雪花ID Snowflake .Net版
先抄个雪花ID介绍,雪花算法: 雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等. 自增ID:对于数据敏感场景不宜使用,且不适合于分布式场景.GUID:采用无意义字 ...
- [AI开发]零代码分析视频结构化类应用结构设计
视频结构化类应用涉及到的技术栈比较多,而且每种技术入门门槛都较高,比如视频接入存储.编解码.深度学习推理.rtmp流媒体等等.每个环节的水都非常深,单独拿出来可以写好几篇文章,如果没有个几年经验基本很 ...
- 【已解决】CentOS7使用yum安装Docker显示错误:cannot find a valid baseurl for repo: base/7/x86_64
不得不说,Docker 要求 CentOS 系统的内核版本高于 3.10,这就让有些人开始头疼了,而要查看具体的版本可以用以下命令 uname -r 当然,CentOS 6.8版本也能安装Docker ...
- [ASP.NET Core 3框架揭秘] Options[2]: 配置选项的正确使用方式[下篇]
四.直接初始化Options对象 前面演示的几个实例具有一个共同的特征,即都采用配置系统来提供绑定Options对象的原始数据,实际上,Options框架具有一个完全独立的模型,可以称为Options ...
- Atom + Texlive 配置 Latex 环境
Atom + Texlive 配置 Latex 环境 步骤1: 安装TexliveTexlive点击 "Download" 下载,然后安装,等待安装完成即可 步骤2: 安装Atom ...
- BFS小记
题目:求从S走到G点所需步数 #S######.#......#..#.#.##.##.#.#........##.##.####....#....#.#######.#....#......#### ...
- ArcEngine 创建要素,删除要素,生成网格,渲染图层(VB)
示例代码:https://github.com/yu969890202/ArcEngine/tree/master/WinFrom_ArcEngine_PointDistribution博客后面有两张 ...