做机器人算法的相信大家对ROS和Gazebo都不陌生,可以说是我们的两大利器,ROS全称机器人操作系统,它为我们提供了软件操作平台,我们可以方便的在ROS的软件框架下编写我们自己的机器人算法。gazebo是一款功能强大的三维物理仿真平台,具备强大的物理引擎、高质量的图形渲染、方便的编程与图形接口,最重要的是其开源免费的特性。
那么下面我们一起来认识一下gazebo和ros到底是怎么搭配一起工作的?Gazebo和ros他们的功能完全不一样,内部的消息机制以及驱动也相去甚远,那么它们之间是怎么通信的呢?
这是官方给出的框架图 从图上我们可以看到,当ros的消息传递过来的时候,它并没有给gazebo,而是给了Controller Manager中的一个controller,经过controller中的控制器计算出来相应的值之后,数据流入了JointCommand接口中,然后由这个接口转交给gazebo模块;当gazebo计算数据完成之后,数据也是先流入一个叫做JointState的接口中,随后又流入了一个controller中,这个controller再将消息发布出去。
这个模块就是我们今天要介绍的主角ros_control功能包,它重写ros原有的pr2_mechanism包,使得它能够控制所有机器人,而并不仅止于PR2。下图是ros_control的工作流程,可以看到它将机器人执行器关节状态数据和期望状态作为输入。它使用一般的控制回路反馈机制(通常是PID控制器),来控制输出(通常为力矩)。
ros_control的架构
- Controller 控制器:读取硬件资源接口中的状态,发布控制指令。不直接接触硬件,从硬件抽象层请求资源;
- Controller Manager 控制器管理器:管理不同控制器的通用接口;
- RobotHW 机器人硬件抽象:直接和硬件资源交互,通过 write 和 read 方法完成硬件操作。管理硬件资源,处理硬件冲突;
- RobotHW 机器人硬件抽象:直接和硬件资源交互,通过 write 和 read 方法完成硬件操作。管理硬件资源,处理硬件冲突;
下面我们主要了解一下Controller 控制器和Controller Manager 控制器管理器。
控制器 Controller ros_control提供的controller的种类如下: 控制器管理器 Controller Manager 用于管理多个控制器,实现控制器的加载、运行、停止等操作。
1、命令行操作
- rosrun controller_manager controller_manager
包括:
load unload start stop spawn: load & start kill: stop & unload
- 查看某个控制器状态 rosrun controller_manager controller_manager
包括: list list-types reload-libraries reload-libraries –restore
2、launch
3、可视化工具 rosrun rqt_controller_manager rqt_controller_manager
以上就是gazebo和ros的通讯机制,希望小编有帮助到您更清晰的了解gazebo和ros。如果想深入了解某个部分可以查看 ros官网:http://wiki.ros.org/ros_control
- End -
技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。 阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!