多机协同操作系统

简介: ROS(机器人操作系统)是一种开源的机器人软件平台,它提供了一系列工具和库,用于构建复杂的机器人应用程序。ROS支持分布式计算和协同工作,使得多台机器人可以协同完成任务。多机协同的目的是为了让每台设备都能和全体设备或者周边设备进行信息交互来实现相互感知相互控制的结果,通过算法收敛到一个最佳的轨迹,来实现协同工作从而可以提高运输效率和优化生产节拍,提高生产中的安全性和可靠性。在自动化工厂、仓储分拣、自动化货物超市等诸多场景,小车协同机械臂可以为物料的自动搬运、物品的上下料,以及物料的分拣提供自动化、柔性化的作业支持。

三、软、硬件描述
硬件描述:
该智能小车使用了32位微处理器STM32F407作为主控芯片,该芯片具有高速运算能力和较大的存储空间。与其他芯片相比具有更高的性能和更多的外设,并且还有更好的可拓展性。它提供了Cortex-M4内核(具有浮点单元)的性能,运行频率为168MHz 。其它硬件 组成包括:
麦克纳母轮[4]:麦克纳姆轮是一种全向轮,由轮毂和围绕轮毂的辊子组成,辊子的外廓线与轮子的理论圆周相重合,这样确保了轮子与地面接触的连续性,并且辊子能自由地旋转,辊子的轴线与轮子轴线通常成45°。麦克纳姆轮可以实现ROS小车在平面内做出任意方向平移同时自转的动作。
电机驱动模块:用于控制小车轮子的转动,从而控制小车行驶。
传感器模块:单线激光雷达是一种高同频脉冲激光测距仪,加上一个一维旋转扫描。它只有一路发射和一路接收,结构相对简单,使用方便;扫描速度高、角度分辨率高;体积、重量和功耗低;可靠性更高;成本低。用于获取小车周围环境信息,如距离。
通信模块:用于实现小车与远程控制设备之间的通信。
电源管理模块:它是所有电子产品和设备的电能供应中枢和纽带,负责所需电能的变换、分配、检测等管控功能,是电子产品和设备不可或缺的关键器件,用于管理小车的电源供应和电池状态。
软件描述:
该智能小车使用ROS作为软件平台,ROS(Robot Operating System)是一种用于构建机器人软件的开源框架,提供了一组通用工具和库,以简化机器人软件开发。在ROS中,机器人被视为由多个节点组成的分布式系统。每个节点都是一个进程,可以运行在不同的计算机上,通过ROS消息传递机制进行通信。节点之间通过话题(Topic)或服务(Service)进行通信。话题是一种发布/订阅模式,其中一个节点发布消息,而其他节点订阅该消息。服务是一种请求/响应模式,其中一个节点请求服务,而另一个节点提供服务并返回响应。ROS机协同的基本原理是将任务分解为多个子任务,并将每个子任务分配给不同的机器人。每个机器人都是一个ROS节点,可以独立地执行指定的任务。当所有机器人完成其子任务时,它们将合并其结果以完成整个任务。 该小车的软件功能包括:

底层控制模块:负责接收控制信号,控制电机驱动模块,从而实现小车的运动控制。
传感器数据采集模块:负责读取传感器模块获取的数据,并将其转换为可用的信息,如距离、光线等。ROS与STM32通信可以通过串口进行通信,主要有两种方式:一是将STM32作为一个节点,二是制作一个上位机节点,负责与STM32进行串口通信。第一种方式需要专门的硬件,所以我选择第二种方式。ROS与STM32通信需要使用到rosserial库,它提供了一种在嵌入式系统中使用ROS的方法,可以在STM32上运行ROS节点。
rosserial是一个ROS(机器人操作系统)的软件包,它可以让ROS与微控制器(如STM32)之间通过串口通信。通过使用rosserial,将STM32与ROS系统连接起来,实现双向通信,从而实现机器人的控制和数据传输。使用rosserial库需要在STM32上运行ROS节点,这个节点可以通过串口与ROS系统进行通信。在ROS系统中,我们可以使用rostopic、rosmsg、rosservice等工具来与STM32进行通信
高层决策模块:根据传感器数据进行决策,实现小车的智能行驶,如避障、路径规划等。
远程控制模块:实现小车与远程设备之间的通信,从而实现远程控制小车的运动和功能。

四、课题过程
建立机器人模型




























URDF集成Gazebo,添加激光雷达插件





0 0 0 0 0 0
true
5.5



360
1
-3
3



0.10
30.0
0.01


gaussian
0.0
0.01



/scan
laser




2.png

导航实现
存在五点关键技术
1.全局地图 SLAM(simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 即时定位与地图构建,或并发建图与定位。SLAM问题可以描述为: 机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和地图进行自身定位,同时在自身定位的基础上建造增量式地图,以绘制出外部环境的完全地图







































2.png

2.自身定位 导航伊始和导航过程中,机器人都需要确定当前自身的位置,如果在室外,那么 GPS 是一个不错的选择,而如果室内、隧道、地下或一些特殊的屏蔽 GPS 信号的区域,由于 GPS 信号弱化甚至完全不可用,那么就必须另辟蹊径了,比如前面的 SLAM 就可以实现自身定位,除此之外,ROS 中还提供了一个用于定位的功能包: amcl(adaptiveMonteCarloLocalization)自适应的蒙特卡洛定位,是用于2D移动机器人的概率定位系统。它实现了自适应(或KLD采样)蒙特卡洛定位方法,该方法使用粒子过滤器根据已知地图跟踪机器人的姿态。
3.路径规划
• 全局路径规划(gloable_planner) 根据给定的目标点和全局地图实现总体的路径规划,使用 Dijkstra 或 A※算法进行全局路径规划,计算最优路线,作为全局路线
• 本地时时规划(local_planner) 在实际导航过程中,机器人可能无法按照给定的全局最优路线运行,比如:机器人在运行中,可能会随时出现一定的障碍物... 本地规划的作用就是使用一定算法(Dynamic Window Approaches) 来实现障碍物的规避,并选取当前最优路径以尽量符合全局最优路径
4.运动控制 导航功能包集假定它可以通过话题"cmd_vel"发布ometry_msgs/Twist类型的消息,这个消息基于机器人的基座坐标系,它传递的是运动命令。这意味着必须有一个节点订阅"cmd_vel"话题, 将该话题上的速度命令转换为电机命令并发送。
5.环境感知 采用激光雷达感知周围环境信息,编码器感知电机的转速信息,进而可以获取速度信息并生成里程计信息.在导航功能包集中,环境感知也很重要,为其他模块提供了支持,例如SLAM,amcl,move_base都依赖于环境感知.

• 多机编队算法 编队控制算法是指控制多个机器人组成特定的某种队形来执行任务的算法,协作是指多个机器人之间利用某种约束关系合作来完成一项任务,以多机器人编队问题为例,协作就是指多个机器人共同组成期望的队形,其本质为各机器人的位置之间满足某种数学关系。编队方法主要分为集中式队控制与分布式编队控制两种,集中式编队控制方法中主要有虚拟结构法、图论法和模型预测控制分布式编队方法主要有跟随领航者法、 基于行为法和虚拟结构法。
• 避障算法 先利用编队算法求出 Slave 跟随者的线速度与角速度,然后根据避障需求,对其进行增减变化,从而达到避障要求。当 Slave 跟随者与障碍物距离越近,障碍物对 Slave 跟随者斥力越大,线速度与角速度增减量变化的越大。当障碍物越靠近 Slave 跟随者的前方时,障碍物对Slave 跟随者斥力越大(正前方斥力最大,正侧方斥力最小),线速度与角速度增减量变化的越大。通过改进人工势场法,优化改进了人工势场法对于障碍物在机器人正前方,机器人会停止不动的缺点,从而更好了达到避障的目的。
• ROS 多机通信设置 多机通信是完成多机器人编队的关键步骤,对于多个机器人之间成员的相对位姿未知的情况下,机器人之间需要通过通信分享彼此的信息,方便建立联系。ROS 分布式架构和网络通信很强大,它不仅仅在进程间通信方便,就连不同设备间通信也很方便,通过网络通信,所有的节点都可以运行在任意一台电脑上。在主机端完成处理数据等主要工作,从机们负责接收各种传感器采集的环境数据,这里的主机就是 ROS 中要运行 Master 节点的管理器,目前的多机通信框架是通过一个节点管理器和参数管理器来处理多个机器人之间的通信交流。
o 将 ROS 主控处于同一个网络 由主机的主控发射 wifi 提供网络。在主控中运行 Master 节点的管理器。由其中一台车作为主机发出 wifi,其他车或者虚拟机作为从机连接到这个 wifi。也可以是由第三方路由器提供网络作为信息中转,所有车辆连接同一路由器。该路由器不联网也可以使用。选择其中一辆车作为主机,在主机中运行 Master节点的管理器。
o 设置主从机的环境变量 ROS 主控都处于同一个网络之后,设置多机通信的环境变量。环境变量的设置在主目录下的.bashrc 文件,运行 gedit ~/.bashrc 命令打开,这里要注意多机通信中主机和从机的.bashrc 文件都需要设置,需要更改的是文件中末尾的两行 ip 地址,分别是 ROS_MASTER_URI 和ROS_HOSTNAME,ROS 主机的 ROS_MASTER_URI 和 ROS_HOSTNAME 都是它本地的 ip地址;而 ROS 从机.bashrc 文件中 ROS_MASTER_URI 需要改为主机的 ip 地址,ROS_HOSTNAME 是本地的 ip 地址。设置方式如下.
export ROS_MASTER_URI=http://192.168.1.150:11311
export ROS_HOSTNAME=192.168.1.151

五、结果及分析
在Gazebo运行的仿真环境中执行导航launch文件,在rviz中通过2D Nav Goal设置目标点,机器人开始自主移动并建图了,并且实现了相互间的通信。
在试验中发现的问题,以及解决方法

  1. 执行程序前一定要先完成时间同步的操作。
  2. 在控制多机编队的主车时,角速度不宜过快。建议线速度 0.2m/s,角速度 0.3rad/s 以下。主车在做转弯动作时,距离主车越远的车需要的线速度越大,因为功能包中对线速度和角速度的限制,从车达不到需要的速度时,编队队形变乱。其次,过大的线速度容易损坏小车。
  3. 在从车数量为多个时,因 ROS 主机的板载 wifi 性能有限,带宽不足容易引起多机通信高延迟和掉线的问题,使用路由器可以很好地解决这个问题。

3.png

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
23天前
|
移动开发 Android开发 开发者
移动应用与系统:探索移动开发与操作系统的协同进化###
本文深入探讨了移动应用开发与移动操作系统之间错综复杂的关系,揭示了技术进步如何推动用户体验的飞跃。通过案例分析和技术解析,本文阐述了开发者在适应不断变化的操作系统环境中面临的挑战与机遇,以及这种互动如何塑造了我们的数字生活。 ###
|
2月前
|
XML 搜索推荐 Android开发
移动应用开发之旅:探索操作系统与用户界面的协同
【9月更文挑战第27天】在数字时代的浪潮中,移动应用成为连接用户与数字世界的桥梁。本文将深入探讨移动应用开发的核心——移动操作系统,并展示如何通过代码示例实现一个简单但功能完整的用户界面。从理解不同操作系统的特性到设计直观的用户交互,我们将一步步构建起移动应用的基石,揭示技术细节背后的哲学和创新精神。
|
3天前
|
人工智能 物联网 Android开发
移动应用与系统:探索开发趋势与操作系统的协同进化####
本文深入探讨了移动应用开发的当前趋势,以及这些趋势如何与移动操作系统的发展相互影响、协同进化。通过分析最新的技术动态、市场数据及用户行为变化,本文旨在为开发者提供关于未来移动应用开发方向的洞察,并讨论操作系统层面的创新如何促进或制约应用的发展。 ####
|
4天前
|
安全 Android开发 iOS开发
移动应用与系统:探索移动应用开发与操作系统的协同进化###
【10月更文挑战第29天】 本文深入探讨了移动应用开发与移动操作系统之间的紧密联系与相互促进作用,分析了当前主流移动操作系统(如iOS、Android)的最新特性及其对应用开发的影响,并展望了未来移动应用与系统协同发展的新趋势。通过具体案例分析,揭示了开发者如何利用系统特性优化应用性能,提升用户体验,同时指出了跨平台开发工具的兴起如何进一步模糊了应用与系统间的界限,推动了整个移动互联网生态系统的繁荣发展。 ###
26 2
|
13天前
|
人工智能 前端开发 Android开发
移动应用与系统:探索移动应用开发与操作系统的协同进化
本文深入探讨了移动应用开发与移动操作系统之间的紧密关系,以及它们如何相互影响、共同推动移动技术的发展。文章从移动应用开发的基础知识出发,逐步深入到移动操作系统的核心特性,分析了两者在技术层面的交互作用,并展望了未来的发展趋势。通过具体案例和数据分析,本文揭示了移动应用开发与移动操作系统协同进化的重要性,为开发者提供了宝贵的参考和启示。
|
16天前
|
机器学习/深度学习 搜索推荐 安全
构建未来:移动应用开发与操作系统的协同进化
【10月更文挑战第20天】在数字化时代的浪潮中,移动应用和操作系统作为科技进步的双引擎,正驱动着人类社会向更高效、互联的方向迈进。本文深入探讨了移动应用开发的最新趋势、移动操作系统的创新特性,并分析了它们如何相互影响,共同塑造我们的数字生活。通过具体案例分析,我们揭示了技术革新如何激发新的应用场景,以及开发者如何利用这些进步来创造更加智能、个性化的应用体验。文章还讨论了面临的挑战和未来的机遇,为读者提供了对这一不断演进领域的深刻洞察。
|
10天前
|
人工智能 前端开发 物联网
移动应用与系统:探索开发与操作系统的协同进化####
【10月更文挑战第26天】 本文探讨了移动应用开发和移动操作系统之间的紧密关系,揭示了它们是如何相互影响和促进彼此发展的。从早期的功能手机到现今的智能手机,移动操作系统经历了巨大的变革,而移动应用作为其生态系统中的重要组成部分,也随着技术的演进不断创新。文章将深入分析这一过程中的关键节点和技术突破,以及未来的发展趋势。 ####
17 0
|
1月前
|
机器学习/深度学习 Android开发 开发者
构建未来:移动应用开发与操作系统的协同进化
【10月更文挑战第1天】构建未来:移动应用开发与操作系统的协同进化
32 3
|
1月前
|
人工智能 Android开发 开发者
移动应用开发与操作系统的协同进化##
本文探讨了移动应用开发与移动操作系统之间的紧密关系,分析了它们如何相互影响、共同进步。文章首先概述了移动应用开发的基本概念和流程,然后深入剖析了主流移动操作系统(如iOS和Android)的特点及其对应用开发的影响。接着,通过具体案例展示了开发者如何针对不同平台优化应用性能和用户体验,并讨论了跨平台开发框架的兴起及其优势。最后,文章展望了5G、人工智能等新技术将如何推动移动应用与操作系统的进一步融合与发展。 ##
30 1
|
2月前
|
vr&ar Android开发 iOS开发
移动应用开发与操作系统的协同进化
本文旨在深入探讨移动应用开发与移动操作系统之间的紧密联系及其相互影响。随着智能手机和平板电脑的普及,移动应用已成为我们日常生活中不可或缺的一部分。这些应用程序的高效运行离不开强大而稳定的操作系统支持。我们将从移动应用开发的角度出发,分析不同操作系统平台(如iOS、Android等)对应用开发的影响,并探讨如何利用操作系统的特性来优化应用性能、提升用户体验。同时,我们也将关注移动操作系统的发展趋势以及它们如何推动移动应用创新。
下一篇
无影云桌面