最近在使用ros stdio的时候发现左侧边栏有一些开源的包可以下载,然后就发现了有一個包叫做agv sim。

如圖所示,這個包提供了一個簡易的AGV模型,并且提供了相应的agv控制与建图的功能包,通过官网提供的github地址用git clone就可以下载,将功能包下载至工作区catkin内的src文件夹后,使用catkin_make就可以开始使用这个功能包了。

按照官方的教程,我们可以知道要让agv动起来只需要三条指令:

这三条指令分别启动了三个lanuch文件, 从字面上很容易理解,第一句就是启动AGV在gazebo中的仿真模型,第二个就是运行AGV的控制文件,第三个是ps3 joystick,就是PS3的手柄,由于我没有PS3的手柄,因此似乎官方提供的移动AGV的方法就此失败了。

之前学习过古月老师的ros机器人实践书籍,隐约记得机器人的控制好像只需要发布一个/cmd_vel主题就可以运动了,于是我尝试去以这种方法启动机器人。

首先在终端输入 ,启动gazebo软件,此时一辆AGV出现在地图中。

roslaunch agvs_gazebo agvs.launch

然后在终端输入rostopic list命令,很遗憾,发现主题里面并不存在/cmd_vel。

没办法,那只能去查看代码了,那么就从agvs.launch文件开始查看好了,博主用我蹩脚的基础开始翻看这些源代码。

打开agvs.launch文件

可以看到在25行有一句命令,意思是将xacro文件转换成urdf文件,而转换的文件文件名叫做agvs.urdf.xacro,在agvs_description文件夹下面,但是发现在功能包下面并没有这个文件夹,于是便全局搜索,最终发现在/opt/ros/kinetic/share/agvs_description/urdf这下面,OK,既然找到了这个文件,那么就打开它看看里面是什么东西:

发现这个描述文件里有很多东西,作为一个蹩脚的新手,当然是挑重点来看了,第五行,在开始的时候包含了一个头文件,名字叫做agvs.gazebo,从文件名后缀来看,这应该是个描述gazebo仿真属性的文件,打开它看下里面有什么东西:

看到里面都是一些gazebo标签,我们重点关注第五行,第五行在这里添加了一个ros control的插件,之前在书上看到的插件是

libgazebo_ros_diff_drive.so,而这次变成libgazebo_ros_control.so,实在让我有点蒙,没办法,继续看下去,从这个插件的名字可以看出来,这是一个ros_control的插件,在机器人的仿真系统中,常常需要对机器人进行控制,这时候就需要ros_control这个包,在这里先说一个大的框架,按我的理解,ros_control提供的是控制接口,这个接口主要用来订阅用户发布的命令主题,然后转换成对机器人某个运动部件发出的控制指令(控制方式则是包括了速度控制、位置控制和转矩控制),有了控制指令,那自然还要有硬件,比如电机、舵机这样的东西。

根据这个思路,我们知道控制插件已经设置好了,那我们就要去寻找硬件的配置在什么地方,打开回agvs.urdf.xacro文件,找到任意一个transmission标签

这里我找的是joint_front_motor_wheel,这个关节具体是干嘛的,暂时还不知道,细心的读者不知是否有所发现, joint_front_motor_wheel这个名字是不是有点熟悉?没错了,刚刚我们在rostopic list那里看到了这个单词,

这样一来思路就清晰多了,根据主题的名字进行猜测,后面带/command命令的就是用于控制的主题,使用rostopic info  就可以查看该命令的具体格式

得知这个信息后,博主已经迫不及待地想验证自己的想法,于是在终端输入手动发布主题信息

rostopic pub -r 100 /agvs/joint_front_motor_wheel_controller/command std_msgs/Float64 "data: 10.0" 

在切换到gazebo界面,发现舵轮的方向转动了!有了一个成功的开始!

好的,基本上到这里对agv的控制已经不是问题了,只需要根据不同位置的主题进行手动发布小车就可以动起来,但是,这些主题又是怎么跟这些运动部件联系起来的呢?换句话说,/agvs/joint_front_motor_wheel_controller/command 他为什么叫/agvs/joint_front_motor_wheel_controller/command,而不叫/agvs/joint_front_motor_wheel_controller123/command ?他们之间在哪里进行了关联?与joint_front_motor_wheel是怎么联系起来的?

带着这个问题,我又开始翻看源代码,回到一开始的agvs.launch文件,发现在文件末尾运行了agvs_control.launch,于是打开这个launch文件发现第18行读取了一个配置文件,这个配置文件是干嘛用的呢?打开来看看

发现熟悉的主题信息出现在眼前,大喜,继续往下看,发现它还打开了一个配置文件,点击打开配置文件:

至此,就已经很清楚了,原来他们之间的对应关系是包含在了这个文件夹里,OK,实践出真知,我要手动修改一下才知道是不是真的是这样。

在原来的配置文件中,对于侧面两个黄色的轮子是没有设置ros-control信息的,那我们来手动为它添加,试一下行不行。

在配置文件里加入如下代码

表示使用速度控制的方法,并将其与joint_side_wheel_right关联起来,主题的名字叫做joint_swr_controller

然后回到agvs_control.launch文件,将它加入进去

这时候可以退出刚刚的gazebo,然后再重新打开一次,发现有红色字体提示报错,仔细一看,原来是说没有找到该关节上的速度接口,打开agvs,urdf.xacro文件,找到joint_side_wheel_right的配置,如图344-356,发现原来的配置是力矩控制方式,而我们自己设置的是速度控制方式,那自然是不符合,注释掉,改为速度控制模式。

至此,应该已经修改成功,重新运行gazebo,然后使用rostopic list查看主题

发现 /agvs/joint_swr_controller/command 主题毅然在目,在终端输入

rostopic pub -r 100 /agvs/joint_swr_controller/command std_msgs/Float64 "data: 10.0" 

后,发现AGV小车已经开始原地打转了,表示修改成功,至此,通过这个例子,讲ros_control的大概框架给摸清楚了。

ROS中的AGV与ROS_CONTROL学习相关推荐

  1. ros中的电机速度控制_ROS 学习系列-- 四轮机器人线性速率、角速度和电机PWM线性关系的定量分析...

    ROS中的机器人导航需要底层轮子驱动十分精确的对行进的速率和角速度进行控制.本文根据大量的实验数据进行图形化分析,找出线性速率.角速度和电机PWM线性关系,并得出计算公式. 1. ROS导航机器人驱动 ...

  2. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters

    ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters 上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameter ...

  3. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

  4. ROS中的roslaunch命令和launch文件(ROS入门学习笔记四)

    ROS中的基本对象和概念学习笔记(ROS入门学习笔记一) ROS中创建工作区和包(ROS入门学习笔记二) ROS功能包中CMakeLists.txt的说明(ROS入门学习笔记三) 1.roslaunc ...

  5. 【RK3399Pro学习笔记】十三、ROS中的坐标系管理系统

    目录 TF功能包能干什么? TF坐标变换如何实现? 例程 view_frames tf_echo rviz 平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本:Tinker ...

  6. ros中四元数与欧拉角学习笔记

    看了很多关于四元数的理论,但都没有一个人讲到了为什么在ros中引入四元数的概念,后面结合ros wiki上相关资料,有了以下理解. 1 物体自身绕着XYZ三轴转动,有时在外部轴看来只是引入了两个转动轴 ...

  7. 如何给定两个gps坐标 算出航向角_机器人开发如何配置ROS中的TF变换关系?

    当我们进行机器人开发时,常常需要面对TF坐标转换,本文以 Autolabor Pro1 与思岚激光雷达为例,介绍ROS TF的使用. Autolabor Pro1是什么? Autolabor Pro1 ...

  8. ROS中阶笔记(九):Movelt!机械臂控制

    ROS中阶笔记(九):Movelt!机械臂控制 文章目录 1 Movelt!系统架构 1.1 Movelt!是什么 1.2 系统架构 1.3 Movelt!使用步骤 2 创建机械臂模型与配置文件 2. ...

  9. ROS中阶笔记(四):机器人仿真—Gazebo物理仿真环境搭建(重点)

    ROS中阶笔记(四):机器人仿真-Gazebo物理仿真环境搭建(重点) 文章目录 1 ros_control 1.1 ros_control安装 2 Gazebo仿真步骤(重点) 2.1 配置物理仿真 ...

  10. ROS中对URDF文件检查时出现的问题及解决方式

    ROS中对URDF文件检查时出现的问题及解决方式 最近在学习ROS,遇到了一个小问题,顺便记录一下加深印象,同时也为出现同样问题的伙伴们提供一些参考.由于是第一次写博客,所以显得有些简单,我相信只要有 ...

最新文章

  1. 智慧电梯物联网 未来电梯将更智能
  2. 省选专练之后缀自动机SPOJ1811LCS - Longest Common Substring
  3. centos下cmake安装
  4. C#LeetCode刷题之#191-位1的个数(Number of 1 Bits)
  5. Python凭啥这么受欢迎?
  6. 五子棋项目结束总结_五子棋编程思想小结
  7. 储存profiles是什么意思_Powershell Profiles配置文件的存放位置介绍
  8. 暑假周进度总结报告3
  9. 在centos6.5中安装github的客户端git
  10. hadoop/hbase/hive单机扩增slave
  11. Sutherland-Hodgeman多边形裁剪
  12. node 简繁体转换_简体繁体转换
  13. 导线电感、走线电感、过孔电感计算公式
  14. dble 不支持的关键字 mysql_分布式 | DBLE Release Notes 详细解读 2.19.11.0
  15. 苹果CMS v10模板:大橙子vfed完美版视频网站模板
  16. android编程异常解决 FATAL EXCEPTION: main android.view.InflateException: Binary XML file line #195: Erro
  17. 广受青睐的题材---蒸汽朋克[Steampunk](转)
  18. 软件测试面试题全网独家没有之一的资深测试工程师面试题集锦
  19. Threes.js入门篇之2 - Hello World
  20. matlab 肤色识别,MATLAB肤色检测.doc

热门文章

  1. easypoi 批量导出_浅谈easypoi快速实现excel批量导入
  2. Vue2.0源码解析 - 知其然知其所以然之keep-alive原理分析(一)
  3. 知其然就够了——大数据时代的思考之一
  4. python编程软件开发_Python编程-绑定方法、软件开发
  5. 内存管理API之get_unmapped_area
  6. win7高级搜索计算机,使用win7系统高级搜索功能的方法介绍
  7. 魔方心得-20180227
  8. 推荐5个免费的项目管理工具
  9. 20182319彭淼迪第一周学习总结
  10. Android 中的转场动画及兼容处理