ROS中的AGV与ROS_CONTROL学习

最近在使用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的大概框架给摸清楚了。

  • 8
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值