robot移动控制的6个层次
来源:互联网 发布:新页进销存软件怎么样 编辑:程序博客网 时间:2024/04/28 12:59
robot从软件控制的层面,从直接控制电机转动的低级层面到路径规划乃至定位壁障的高级层面,这中间需要经过几层的软件封装。庆幸的是,ROS已经为我们提供了这些软件包。下面我就一一列出这些软件的层次:
第一层次:通过在电机或者轮子上安装编码器,就可以将轮子滚动的圈数转化为距离。在ROS中,这种编码器就是我们常说的 odometry(里程计);
第二层次:电机控制器和驱动。电机驱动是驱动硬件工作的非常重要的模块。ROS官方不直接提供驱动,因为硬件规格不同,驱动就不同,无法提供一个通用的驱动。但是第三方的ROS包提供了一些类型的驱动。比如 Arduino Turtlebot 等。
第三层次:robot基础控制器。机器人一旦有了这个控制器,机器人就可以很好的控制自己的速度和角速度了。通常情况下,电机驱动和PID算法都放在一个ROS节点里,这个节点的名字是 base controller。需要注意的是:base controller这个节点必须运行在有电机控制器的电脑上,而且必须是第一个被启动的节点。简单的说,base controller必须运行在robot自己的电脑上。另外,base controller还要做两件事情,第一件事情是:在/odom 话题上发布里程计数据并发布 /odom frame 到 /base_link或者/base_footprint frame的坐标转换。第二件事情是:在/cmd_vel话题上发布控制命令,线速度和角速度的大小。总的来说,在这个层次的软件上,我们不再需要关注硬件的差异,只需要根据ROS提供的接口写自己的程序。即使换一台跑ROS的robot,我们写的程序依然可以运行。
第四层次:move_base软件包。我们可以在地图上指定一个目标地点以及robot的位姿。机器人根据里程计的数据依靠move_base同时结合local和global代价地图去做路径规划,最终到达目标地点。在机器人运动过程中,可以做到避障。在避障过程中,会自动调整robot的移动速度,当然,速度的最小值和最大值,都需要在配置文件里设置好。在这一层次中,机器人还无法进行自身的定位,这是下一个层次的任务。
第五层次:gmapping软件包。通过这个软件包可以为robot建立当下环境的地图,可以依靠laser或者kinect来完成地图的构建。一旦有了环境的地图,那么通过amcl(蒙特卡洛定位)软件包就可以实现robot的自主定位。这个时候就可以实现在地图上随便指定一个位置,机器人都可以通过自主规划路径到达。
第六层次:语音控制。这是最高级的控制方式。通过语音控制机器人,比如,帮我拿一杯咖啡,帮我拿一本书等等。这些软件包ROS也提供了,比如smach, behavior_trees等。这个层次的控制,我并没有尝试过。
总的来说,robot的控制从最上层到最下层,可以用一张图来表示:
至此,ROS的软件体系框架就讨论完了。从上面的分析可以看出,ROS系统是依托于linux的一套软件框架。从底层的驱动到上层的应用,全部依赖于linux,并在此基础上做了一些优化设计。ROS的架构模型吸收了其它各个领域的软件模型的优点,可以说,ROS让软件设计和开发变得更简单方便了。
- robot移动控制的6个层次
- 【ROS】移动机器人运动控制的层次
- Robot II 移动的机器人
- 男人的15个层次
- 程序员的10个层次
- 程序员的10个层次
- 程序员的10个层次
- 学习的4个层次
- 我的第一个robot脚本
- 6个层次以及计划
- 控制飞机的移动
- 移动控制的使用
- java的包和访问控制层次
- 层次聚类的时间控制
- 【Robot】移动机器人的几种视觉算法
- Java.awt.Robot 控制鼠标移动、键盘按键等输入操作
- Unity3D第一个项目【控制模型移动】
- Java中用Robot类控制鼠标和键盘的方法
- What is the cause of long acne on the nose?
- ECSHOP PHP 交通银行
- Indent C语言代码格式化工具
- Android长连接--网络框架之mina框架的解析
- Hibernate 与mybatis的区别
- robot移动控制的6个层次
- ClassBreaksRenderer和ClassBreak用法
- Sting 类
- 6 python 类的初始化,方法,继承以及多态
- 单点登录: 从一个页面跳转到zabbix的主页面
- 十二周项目5--迷宫问题之图深度优先遍历解法
- Android Studio将本地HTML加载到WebView
- 服务器端解决跨域问题的三种方法
- 最好的代码开发工具------>IntelliJ IDEA