三、软、硬件描述
硬件描述:
该智能小车使用了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
导航实现
存在五点关键技术
1.全局地图 SLAM(simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 即时定位与地图构建,或并发建图与定位。SLAM问题可以描述为: 机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和地图进行自身定位,同时在自身定位的基础上建造增量式地图,以绘制出外部环境的完全地图
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设置目标点,机器人开始自主移动并建图了,并且实现了相互间的通信。
在试验中发现的问题,以及解决方法
- 执行程序前一定要先完成时间同步的操作。
- 在控制多机编队的主车时,角速度不宜过快。建议线速度 0.2m/s,角速度 0.3rad/s 以下。主车在做转弯动作时,距离主车越远的车需要的线速度越大,因为功能包中对线速度和角速度的限制,从车达不到需要的速度时,编队队形变乱。其次,过大的线速度容易损坏小车。
- 在从车数量为多个时,因 ROS 主机的板载 wifi 性能有限,带宽不足容易引起多机通信高延迟和掉线的问题,使用路由器可以很好地解决这个问题。