非标车型使用手册

来自MDCS wiki
跳到导航 跳到搜索

以非标差速底盘地牛说明MDCS的使用方法。

一、概述

图 1-1 车型开发架构图

MDCS由4个子系统构成,分别部署在上位机和下位机:

  • 上位机。用于管理车队的工控机或服务器,部署Simple(管控子系统)以管理车队、任务,通过开放接口向第三方系统开放自动化集成能力。
    • Simple。管控软件,实现车队管理、管控地图配置、任务路线规划、交通管制等功能。车型插件定义特定车型的功能与规格,支持管控软件规划路线与任务编译。
  • 下位机。用于实现移动机器人的运动功能,通过传感器感知环境,执行上位机下发的任务。由3个子系统构成,部署在车载工控机(或嵌入式主板)上。
    • Detour。定位软件,实现激光SLAM(2D/3D Lidar)、地纹SLAM、二维码定位。
    • Clumsy。自动驾驶软件,实现运动控制(行走、旋转、货叉控制等),避障区域(基于激光雷达输出点云)配置,目标识别(通过激光雷达/深度相机识别托盘/货架等),执行上位机下发的任务。车型插件定义移动机器人运动控制相关的信号,比如驱动轮速度、货叉升降控制与高度、SLAM定位置信度等。
    • Medulla。硬件驱动软件,实现与移动机器人硬件(电气模组)的通信能力,比如(电机)驱动器、激光雷达、底盘控制器等。车型插件定义电气模组相关的信号,实现与电气模组的通信功能。

新车型开发的主要任务就是开发车型插件,整定运动参数,配置管控线路。应用新车型的项目还有业务应用开发,即第三方系统部分。业务应用开发不属于本手册范围。

二、启动

2.1 下位机

顺序启动下位机软件。

备注:MDCS对下位机软件的启动顺序没有要求,调试时顺序启动可避免无谓的错误,比如medulla较晚启动,detour未收到点云而触发Clumsy的“盲目驾驶”警报。

2.1.1 Medulla

资源管理器打开L100的安装目录,双击"Medulla\Medulla.exe"。

图 2-1 Medulla运行界面

窗口左侧的"对象列表"有两个组件:cart是移动机器人的下位信号,frontlidar是导航雷达。这是调试时主要关注的对象。

2.1.2 Detour

资源管理器打开L100的安装目录,双击"Detour\Detour.exe"。

图 2-2 Detour 启动后界面

L100 仿真环境已建图。Detour 启动后自动加载地图,勾选 Detour 窗口右下角的"显示选项 \ 跟随小车",使 L100 在窗口中央,使用鼠标滚轮缩放激光地图。

备注:由于 Robopal 不会记录 L100 最后位置,因此 Detour 启动后可能会出现丢定位现象,使用 Detour 的"概览"标签的"全图重定位"可找回定位。

2.1.3 Clumsy

资源管理器打开L100的安装目录,双击"Clumsy\ClumsyConsole.exe"。

图 2-3 Clumsy 启动后界面

Clumsy 界面由 2 个标签构成。控制面板展示小车的运动状态,以及用于调试的功能列表。车辆配置用于整定运动参数。

2.2 上位机

2.2.1 Simple

资源管理器打开L100的安装目录,双击"Simple\SimpleComposer.exe"。

图 2-4 Simple 启动后界面

使用鼠标滚轮缩放地图,按下滚轮(中键)拖动地图,使 L100 模拟车和管控路线在地图上显示。

2.3 仿真环境

对于不具备物理调试环境的用户,比如缺调试场地、非标AGV尚未制造下线,可以使用仿真环境来调试。仿真环境由以下子系统构成:

  • 仿真环境。Robopal是仿真环境软件,实现移动机器人及其运行环境的仿真,模拟配置了2D雷达、安全触边的移动机器人,以及单舵轮、差速底盘,在设定环境中运行。可用于激光SLAM建图和定位,接触式和非接触式避障测试,运动参数整定等调试任务。
  • 设备模拟器。Mimics是自控设备模拟器,实现移动机器人的电机驱动器、点位开关的仿真。可用于运动参数整定等调试任务。
  • 配套应用软件。modbus slave模拟器、西门子S7模拟器等。用于模拟现场总线,与设备模拟器配套使用。

我们以代表车型来说明仿真环境使用方法。

2.3.1 L100地牛

L100地牛使用差速底盘,配有一个2D激光雷达,系统通信图如下。

图 2-5 L100仿真通信图

L00地牛的PLC负责控制电机驱动器和点位开关,通过串口与车载工控机通信;倍加福R2000激光雷达直连车载工控机网口。仿真L100地牛用Mimics模拟PLC,Mimics是MDCS工具链的设备模拟器,可模拟电气模组,并集成Web界面来修改设备运行参数。用Robopal的180度视野激光雷达代替R2000激光雷达,以便模拟货物遮挡雷达情况下的建图与定位。

Diagslave是Modbus TCP Slave模拟器,Mimics L100模拟器以Modbus TCP替换Modbus RTU,以简化仿真环境搭建。Medulla L100插件也切换为使用Modbus TCP通道。

按照以下步骤启动仿真环境:

  1. Windows资源管理器打开L100仿真版目录;
  2. 双击"modbus\diagslave.exe",启动Modbus TCP Slave模拟器,运行界面见图2-2;
  3. 双击"Mimic\Mimics.exe",启动L100模拟器,运行界面见图2-3;
  4. 浏览器输入"localhost:7200/index.html",打开Mimics监控页面,见图2-4;
  5. 登入Ubuntu,进入Robopal目录,在命令行下执行"./robopal"启动,见图2-5。

2.3.1.1 diagslave

图 2-6 diagslave的运行窗口

diagslavec.exe是命令行程序。可以在资源管理器双击启动,或者在cmd终端启动,启动后都会在cmd终端运行。

注意:如果鼠标左键点击命令行窗口的文字,会暂停命令行程序的运行,敲回车键可以解除选择文字并恢复运行。

2.3.1.2 Mimics

图 2-7 Mimics的运行窗口

Mimics.exe也是命令行程序。当日志停止输出时启动完毕。浏览器打开"localhost:7200/index.html",进入监控页面。

图 2-8 L100Mimic的监控页面

L100模拟器启动后,先要修改RemoteRalIp,这是Robopal所在Ubuntu的IP地址,L100模拟器使用UDP 4344端口向Robopal发送移动机器人的线速度/角速度。如果Robopal的移动机器人不会移动,基本上是这个参数配置错误。

其他属性值参考L100的下位信号说明使用。一般而言,主要是修改IsAutomatic、IsEmergencyStopPressed属性值,用于手/自切换和复位警报。

右侧拟态方法用于模拟升降货叉。

2.3.1.3 Robopal

首先修改L100模拟器的RemotePalIp值,指向运行Robopal的Ubuntu主机。

图2-9 修改RemotePalIp值

Ubuntu上进入Robopal目录,检查robopal.cfg配置(如果首次使用),确认lidarRemoteIp指向运行Medulla的主机(Robopal向目标主机的UDP 4343端口推送点云数据)。

bruce@u22:~/Robopal$ cat robopal.cfg 
lidarRemoteIp=192.168.3.102
lidarRemotePort=4343
listenPort=4344
world=./worlds/SmallWareHouse.world
robotsCount=1

命令行下输入"./Robopal"启动。Robopal是命令行程序,启动后在控制台输出日志,见图2-6,随后弹出仿真环境窗口,见图2-8。

图 2-10 Robopal的控制台输出

如果输出日志的speed & angle都是0,表示没收到L100模拟器的运控指令,RemotePalIp配置错误。下图是配置正确时的输出。

图 2-11 Robopal收到L100模拟器运控指令的输出

备注:例图是WindTerm SSH到Ubuntu的操作界面,因此左侧有时间戳和行号。

图 2-12 Robopal的仿真界面

Robopal启动后处于暂停状态(左下角的仿真计时器不动),顺序点击"Run"菜单的"One step"、"Pause"启动仿真(也可以在键盘顺序输入"."、"p"启动)。

启动后计时器跳动,移动机器人的激光雷达扫描线出现。使用鼠标滚轮缩放视图,左键按压拖动视图,左键拖拽移动机器人移动。

图 2-13 仿真环境启动后界面

L100仿真环境模拟了一个小型车间,外间是仓库,内间是生产区,配有一台L100地牛。

注意:Robopal 有个已知错误,在运行一段时间后雷达输出停止。在 4G 内存的 Ubuntu 上,约 52 分钟后出现。此时 Medulla 的 frontlidar 标红,同时弹出“雷达无数据”警告。

图 2-14 Robopal 的模拟雷达异常界面

重启 Robopal 可解决问题。Robopal 重启后,L100 位置会跳动到默认位置(靠近 2 根立柱),鼠标拖动 L100 到重启前位置,如果 Detour 上显示定位丢失,则使用“全局重定位”找回位置即可。

2.4 看门狗

MDCS 看门狗可监控下位机程序的运行状态,当程序意外退出时会自动拉起,适用于生产环境。从 https://dev.lessokaji.com/index.php?topic=258.0 下载看门狗程序。

三、使用

3.1 Medulla

下面分别说明 cart 和 frontlidar 的属性和功能。

3.1.1 cart对象

cart的信号包括下位信号(由Medulla车型插件定义)、上位信号(由Clumsy车型插件定义)。以"电量%"(BatteryPercent)为例,L100模拟器的默认值是75,Medulla通过Modbus TCP连接L100模拟器,读出75%电量。

L100的下位信号在"PelletTruck\PelletTruckMedulla\PalletTruckDefinition.cs"定义,说明如下。

下位信号的分类说明:

  • 状态机。正交的3种工作模式。
    • 自动模式(Automatic)。可执行上位机下发的任务,由Clumsy自主控制。
    • 手动模式(Manual)。可使用Medulla的遥控器控制机器人行走,用于SLAM建图、运动参数整定和故障处理。
    • 故障模式(Malfunction)。当电气模组工况异常、触发安全相关警报时进入,必须解除异常/报警源问题,按下复位键后切换到原来状态(自动/手动)。
  • 诊断。判断移动机器人是否在故障模式,以及故障模式的归因。
    • HasFault。电气模组的异常工况都会触发为True,比如电机驱动器报警、底盘控制心跳停止等。
    • FaultMessage。逗号分割的硬件故障提示。
  • 安全。低级安全包括接触式和非接触式安全响应,高级安全综合定位置信度、安全措施屏蔽和行走状态判定。
    • 接触式安全响应。拍下急停按钮、安全触边触发等需要人接触的安全信号。
    • 非接触式安全响应。避障激光雷达、货叉光电传感器等非接触安全信号。
    • 高级安全。鲁莽驾驶是屏蔽安全措施且在自动模式下行走,一般发生在处理故障后未接触屏蔽,然后切自动模式。盲目驾驶是detour返回的定位置信度(lstep)大于16(经验阈值),且自动模式下连续行走5秒以上。
  • 轮系。驱动轮的目标速度、反馈速度、状态和故障。
  • 货叉。升降状态及高度。
  • 电池。剩余电量。

L100 的上位信号在"PelletTruck\PelletTruckPilot\PelletTruckDefinition.cs"定义,说明如下。

上位信号由 Clumsy 控制,Medulla 读取,下位信号则相反。

Lstep 来自 Detour,表示定位置信度,回环线程锁定关键帧时 Lstep 等于 2,否则会单调递增,直到再次锁定关键帧为止。

SSC 是 Clumsy 的激光雷达避障区域,点云来自导航激光雷达。命名风格为"[fwd|rev|lt|rt]_[fast|slow]_[empty|loaded]",包括 3 部分(中括号),说明如下:

  • 行走方向:fwd 表示前进,rev 表示后退,lt 表示左转,rt 表示右转。
  • 行走速度:fast 表示高速,slow 表示低速。
  • 载货状态:empty 表示空载,loaded 表示带载。

以带载高速前进为例,SSC 名称就是"fwd_fast_loaded",该场景下应扩大缓行区域长度,使行人侵入缓行区域时可提早减速,停车区域和急停区域同理,保证减速及停车时货物不至于惯性过大而倾倒。再如,带载低速右转,SSC 名称就是"tr_slow_loaded",应适当扩大区域右侧面积,在右转方向及时发现行人。

3.1.2 frontlidar

L100 配置 1 个激光雷达,仿真环境使用 180 度视野的仿真雷达,视野较小的雷达有助于工程师理解SLAM 能力边界,比如建图时路线必须闭环,使激光雷达从不同角度看到相同的路标。

图 3-1 frontlidar

frontlidar 窗口主要看 scanC和 pointsN,前者是点云帧计数器,单调加一,连接雷达后会持续增大;后者是点云的测量点数量,本例配置雷达的角分辨率是 0.25,180° 视野,因此测量点数量 = 180 / 0.25 = 720。

frontlidar 窗口的另一个重要功能是"view"。点击右侧功能列表的"view",打开点云视窗。

图 3-2 点云视窗

对比右侧Robopal 的仿真窗口,激光雷达观测得到的点云在雷达的视野内。点云视窗使用雷达坐标系(右手坐标系),雷达 0 度(雷达正前方)是食指指向的正 X 轴,中指指向正 Y 轴。

备注:L100 仿真环境面向新手,配置的模拟雷达未开启噪音功能,因此点云是干净不含噪音的,不像 R2000 的点云有轻微跳动。由于没有噪音,Detour 中的位姿也是稳定的不会轻微波动。

3.1.3 MedullaConsole

如果 Medulla的驱动发生异常,比如 frontlidar 没收到点云,对象列表中相应的对象会标红提示。此时可切换到"ui"标签,点击"ShowConsole"打开 MedullaConsole 窗口,查看日志来分析异常。

点击"HideConsole"则隐藏 MedullaConsole 窗口。

注意:不要关闭 MedullaConsole 窗口,这会关闭 Medulla 进程。如果要隐藏 MedullaConsole 窗口,应使用"HideConsole"功能。如果要关闭 Medulla,可右键点击在 Windows 任务栏右侧的 Medulla 图标,选择"Exit"菜单退出。

"MessageLogs"功能弹出插件日志对话框,查看通过Medulla.Diagnosis 的 Post 或 Toast 方法输出的日志。Post与 Toast的区别在于后者只显示给定标签的最新消息,适合输出实时刷新的日志,比如 CAN 的调试信息(不会刷屏而挤走其他重要日志)。

3.1.4 startup.iocmd

位于 Medulla 目录下的 startup.iocmd 是 Medulla 的配置脚本,用于加载驱动,显示 MedullaConsole。L100 模拟器的配置脚本说明如下:

# startup.iocmd使用 JavaScript 语法,将"."替换为空格,方法参数亦然。
# 比如"frontlidar Start"就是"frontlidar.Start()",调用 frontlidar 的
# Start方法,无参数。
# 创建车型激活器
loader = io load plugins/CartActivator.dll
# 加载 plugins 子目录下的"Medulla 地牛插件库"
cart = loader load plugins/MedullaPelletTruck.dll
# 加载 plugins 子目录下的"通用雷达驱动库"
frontlidar = io load plugins/UniversalLidarDriver.dll
# frontlidar使用robopal驱动,雷达IP是192.168.3.101,UDP 端口是 4343,角分辨率 0.25°
frontlidar Setup robopal 192.168.3.101 4343 0.25
# frontlidar的盲区是10mm,最大测距20,000mm
frontlidar setMaskDist 10 20000
# 启动frontlidar
frontlidar Start
# 加载WinMedulla库(MedullaConsole 的 WinForm 实现)
ui=io load plugins\WinMedulla.dll  
# 显示WinMedulla 监视窗口
ui Show

3.1.5 监控硬件异常

移动机器人常见问题是硬件异常,导致不能执行任务。L100的状态机根据上下位信号实时监控硬件异常,当硬件故障或安全异常时,转入故障状态并告警。当L100出现异常时,应观察cart对象的HasFault和HasAlarm信号。

图 3-3 cart对象的故障与警告信号

  • HasFault:当电气模组出现故障时为True。FaultMessage显示故障硬件名称,如果有多个则以逗号分割。
  • HasAlarm:出现安全隐患时为True。AlarmMessage显示告警源,如果有多个则以逗号分割。

出现HasFault时,应先解决硬件故障。常见硬件故障如下:

  • 电机驱动器报警。一般是伴生故障,比如急停时可能引起驱动器过压报警,这种警告无须处理,复位后自动解除。
  • 安全触边报警。应移动地牛,将安全触边脱离障碍物。
  • 货叉探货传感器报警。应移动地牛(或障碍物),使光电传感器前没有障碍物。

出现HasAlarm时,应先判断安全风险,比如行人侵入急停区,则应拍下急停按钮,等行人离开后再松开。

注意:L100没有复位按钮,以急停按钮代替。拍下急停按钮,等待 1 秒以上松开,车型插件会创建复位按钮信号,持续 3 秒后消除。

当工作模式为手动(Manual)时,L100 也不会执行上位机下发的任务

3.2 Detour

关于 Detour 的操作请参考 https://wiki.lessokaji.com/index.php?title=%E9%A6%96%E9%A1%B5快速开始。新手建议使用 L100 地图熟悉定位相关操作,然后进阶学习建图。

备注:L100 模拟车的雷达位置是精确的,因此无须标定外参。实物车必须标定外参,Wiki 有详细说明。

开发机一般没有 Detour 授权证书,因此有 60 分钟时长限制,超时后重启 Detour 即可。

备注:Detour 试用超时后,状态栏的位姿不会更新,控制台窗口会持续输出错误提示。

3.3 Clumsy

我们以 L100 地牛来说明 Clumsy 的调试功能。

L100 的调试功能如下:

  • 测试前进行走。鼠标拖拽一条直线路径,让小车跟踪路径行走,用于整定运动参数。
  • 测试多段路线。鼠标拖拽多条直线路径,右键结束,让小车跟踪路径行走,用于整定与转向相关的运动参数。
  • 测试倒车行走。与前进行走操作类似,让小车倒走。
  • 测试自旋。输入小车应转到的角度,用于测试自旋功能。
  • 测试取货,测试放货。升降货叉。

仿真器未实现充电机,因此仿真环境内不要使用充电功能。

3.3.1 测试前进行走

点击 Clumsy 窗口(如果 Clumsy 不是当前活动窗口,点击功能菜单可能无效,要多点一次),点击“测试前进行走”,鼠标左键在左边视图的小车上按下,然后向前进方向拖出一个箭头线,随后松开左键。

图 3-4 鼠标拖拽出直线路径

黄色箭头线段是小车要跟随的轨迹,小车的红色箭头指向车头方向,黄绿色箭头线指向轨迹终点,白色箭头线指向预瞄点

Clumsy 的轨迹跟踪算法简要说明如下:

  1. 预瞄点。计算小车运动中心质点在跟踪路径上的垂足,从垂足延轨迹向前延伸预瞄距离,得到预瞄点。预瞄点作用与我们开车相似,开车时司机看的是前方,而不是车头,车速越快,向前看得越远,如此可以控制加减速以平顺驾驶。
  2. 首次转向。小车开始跟踪轨迹时,如果距离轨迹较远,先转向使车头指向轨迹(尽快开到轨迹上),然后向轨迹行走。
  3. 跟踪路径。当小车向轨迹行走时,会根据车头指向与直线轨迹的角度差调整车速,夹角越小速度越快。
  4. 下一段路径。当小车即将跟踪下一段路径时(测试多段路线),会计算下一段路径与车头指向的夹角,如果是小夹角则速度不减,否则减速。

3.3.2 车辆配置

运动参数整定是新车型适配的关键任务之一。L100 的运动参数已配好,使用即可。以下是 L100(差速底盘)相关的运动参数说明,供参考。

基础车体参数

变量名 数据类型 用途
vthBias double 车体参数:旋转补偿,用于补偿车辆旋转时的偏差
rotSync double 车体参数:角度同步阈值,当实际角度与目标角度差小于此值时开始同步
wAcc float 车体参数:角度同步加速度,控制角度调整的加速度大小
Stail_l double 运动学参数:定轮距离,用于计算差速转向模型

速度控制参数

变量名 数据类型 用途
thresAcc double 加速阈值,限制车辆加速度大小
thresDeAcc double 减速阈值,限制车辆减速度大小
thresRotAcc double 转弯加速阈值,限制转弯时的角加速度
maxWSpeed float 转弯最大速度,限制车辆旋转的最大角速度
finSpeed double 终点速度,到达终点时的目标速度

路径跟踪参数

变量名 数据类型 用途
distFin int 路径结束距离,判断路径是否结束的距离阈值
dthFac float 左右差速P,差速转向的比例系数,相当于PID控制中的P参数
lookAhead float 点跟踪方法点距,车辆跟踪路径点的前视距离
trackFinDist float 判断"已到达终点"的阈值,距离小于此值认为已到达目标点
predict float 前进预测量,根据当前速度预测未来位置的时间系数
thScale float 转弯预测量,转弯时的预测系数,影响转弯平滑度
nfFac float 转弯负反馈量,减少转弯抖动的阻尼系数
stoppingPow double 停止幂数,控制车辆接近终点时减速曲线的形状
wayPointFinSpeedFactor float 速度越大时,wayPointFinDist 增大的幅度,高速行驶时提前减速的系数

角度控制参数

变量名 数据类型 用途
speedDegThres double 角度优先调节的角度范围,当角度偏差大于此值时优先调整角度而非速度
firstThAccuracy float 行走指向精度,初始定向时的角度精度要求
stoppingLAFac double 接近终点时lookAhead的衰减系数,影响终点附近的路径跟踪平滑度

3.3.3 SSC

Clumsy 支持导航激光雷达用于避障(使用 Medulla 输出的点云,与 Detour 无关)。避障区域称为 SSC,绘制方法与点位输出型避障雷达相似。避障区间抽象为“行走方向” + “车速” + “带载”的组合,下面以绘制带载高速直行为例说明。

图 3-5 Clumsy 的车体编辑器

“车辆配置”标签页,点击“查看/编辑车体布局”打开布局编辑器。车体布局上有一个单线雷达,其名称(name)与 Medulla 的 frontlidar 一致。车体布局上已有 SSC(雷达触边),点选“frontlidarArea”来修改。

图 3-6 SSC 的重绘制功能

点选“动作”标签,双击“重绘制”。鼠标左键顺序点击绘制区域的顶点,如下图的红色框。

图 3-7 重新绘制 SSC 轮廓

SSC 轮廓是封闭多边形,带载直行时,轮廓宽度应大于托盘,长度应满足高速直行时的减速/停车要求。SSC 的命名风格如下(数据词典语法):

[ fwd | rev | lt | rt ]_[ fast | slow ]_[ empty | loaded ]_[ slowdown | stop | estop ]

SSC 名称由 4 部分构成:行驶方向、车速、带载、行为。以下划线连接。

  • 行驶方向:fwd(前进),rev(倒走)、lt(左转弯)、rt(右转弯)。
  • 车速:fast(高速),slow(低速)。
  • 带载:empty(空载),loaded(带载)。
  • 行为:slowdown(降速缓行),stop(停车),estop(急停)。

我们正在绘制的 SSC 是带载高速直行的缓行区域,那么 SSC 的 name 就是"fwd_fast_loaded_slowdown",如下图。

图 3-8 带载高速直行的缓行区间

SSC 可用布局编辑器菜单的“添加\雷达触边”增加,也可以用菜单删除。新增的雷达触边以“重绘制”功能编辑轮廓。

3.4 Simple

下图显示了 L100 在仿真环境、Detour 和 Simple 地图上的位置。可见 L100 的位置是一致的,这也是激光 SLAM 的目的:使移动机器人使用激光雷达在物理世界中精确定位。

图 3-9 L100 在仿真环境、Detour 和 Simple 地图中的位置

Simple的功能以 5 个标签组织:

  • 地图。配置激光地图。
  • 进程。配置任务插件
  • 车辆。配置车队
  • 脚本。查看小车执行的任务脚本
  • 场景。配置管控地图的站点、路径。

3.4.1 地图标签

图 3-10 地图标签界面

导入 Detour 的激光地图文件,作为管控路线配置的依据。

Detour 的激光地图又称为稠密地图,记录了环境信息,使移动机器人通过激光雷达获得实时位置。稠密地图记录的信息量相当大,这是定位所必须的。Simple 的管控地图也称为稀疏地图,仅记录由站点和路径构成的路网图,用于规划移动机器人从 A 点到 B 点的路线。

以公交车比喻,司机记忆的地图属于稠密地图,包括路标(医院、学校、超市等有明显特征的地点)、车道宽窄、红绿灯等,这个信息量丰富的地图有助于司机安全驾驶公交车执行客运任务。公交车终点站的调度员使用的地图则是稀疏地图,记录构成线路的站点、发车时刻表,协助调度员合理调度车辆和司机以执行客户计划。

虽然管控程序不会直接使用激光地图,但是激光地图包含的环境轮廓与坐标有助于配置管控路线。所以导入激光地图是 Simple 配置的第一个步骤。

3.4.2 进程标签

图 3-11 进程标签界面

Simple 通过插件机制扩展功能。CDM(链式搬运任务)是标配插件,调度小车执行“取/放”搬运任务。项目的定制功能可通过 Simple 插件实现自定义任务实现。

3.4.2.1 CDM

图 3-12 CDM 的动作列表

点选“CDM”,再切换到“动作”标签,可使用 CDM 的功能(以使用频率顺序说明):

  • 初始化所有车辆。Simple 启动后,所有小车处于“未初始化”状态(见图 3-11,小车上有个 X 图标),使用此功能初始化所有小车(详见“车队标签”)。
  • 取放货。双击“取放货”条目,然后鼠标顺序在管控地图上点击“取货”站点、“放货”站点。CDM 自动选择一台就近的空闲小车,然后规划出取放货路径,调度小车执行取放任务。
  • 取货。仅取货。
  • 放货。仅放货(小车上应有货)。
  • 查看任务。弹出任务列表对话框,可取消待执行/执行中的任务,查看已执行的任务。
  • 启动进程 / 关闭进程。启动 / 停止 CDM 任务。
  • 添加 Idle 标签。向小车贴上“空闲”标签(可调度执行任务)。

注意:CDM 要求管控地图上至少有一个“躲避”站点(待命点或库位),当小车挡住另一台小车的任务路线时,CDM 会调度堵路小车去躲避站点。如果没有“躲避”站点,CDM 在规划路线会失败,即便只配置一台小车也是如此。

3.4.3 车队标签

启动仿真环境后,L100在默认位置,Detour 可能会丢定位(Detour 持续记录当前位姿,如果位姿跳变则会丢定位)。

图 3-13 仿真环境启动后 L100 丢定位

参考上图,自上而下来看:

  1. Robopal 是 L100 的默认位姿。
  2. Detour 显示点云与地图有明显偏差(向右下方偏出)。
  3. Simple 上L100 位姿与 Detour 一致(位姿来自于 Detour),小车未初始化,且不在站点上。

在 Robopal 窗口,鼠标左键慢慢拖动 L100 到“待命点”站点。

图 3-14 把 L100 拖动到待命点

慢速拖动 L100 是让 Detour 能够修正定位误差(如果拖放后定位有错误,使用 Detour 的“全局重定位”修正),如上图所示,点云(绿色线)与地图轮廓已贴合,且小车附近的一个关键帧(红色实心点,右下方有点云配置分数 0.75)被锁定,说明 Detour 已修正定位偏差。

“地牛 1”的属性说明如下:

  • siteID:小车所在站点编号,由于未初始化,因此是-1。
  • speed:小车的默认速度(mm/s)是 0.4m/s(速度属性的数据类型是整数,因此使用 mm/s)。
  • address:小车的 IP 地址(Clumsy 所在主机的 IP)。
  • lstatus:小车的状态。
  • id:流水号。
  • name:小车名称。
  • group:小车所在组。有些场景需要分组执行任务,比如“分拣”与“产品下线”由不同组车队执行任务,不可交叉执行。默认填"default",用于不分组场景。

移动 L100 到待命点,且定位准确时,双击“动作”标签的“初始化”。

图 3-15 初始化后的 L100

L100 的“X”消失,初始化成功。

注意:小车在站点上才允许初始化。

切换到“状态”标签,看 L100 的状态。

图 3-16 L100 的状态

车辆状态反映了小车当前工况,当小车异常时,比如不执行任务,应根据其状态来分析故障源。

  • Clumsy 上传的状态。以“车体_”为前缀,实时更新。例图中的“车体_WorkMode”为“Manual”,表示L100 处于手动模式,不会执行 Simple 下发的任务。
  • 交通管制相关状态:
    • holdingLocks:小车当前所在站点编号。
    • pendingLocks:小车执行任务时,会锁定前进方向的 3 个站点(包含当前站点,3 点定 2 条线段,即当前行走的路线和下一段路线)。如果小车在行驶时停下且无报警,应检查 pendingLocks,如果小车在礼让另一辆有交叉路线的小车,pendingLocks 只有 1 个站点,表示锁点失败而停车
    • blockedBy:正在礼让的另一台小车编号。
    • TCStat:交通管制状态。

常用动作说明:

  • 立即强制结束。向 Clumsy 发送“强制结束”指令,Clumsy 自动重启并丢弃正在执行的任务,小车停下。
  • 现场检修并小车下线。小车停在路上检修故障,调度认为小车下线,不再调度。(现场检修的时间应短,否则小车会堵路)。
  • 返厂检修。下车下线且被移出管控地图(siteID=-1)。把小车移出车道(比如推到路边不会堵路)检修时使用。
  • 小车上线/下线。“状态”的“标记”是一种标签机制,可理解为向小车贴上便签,应用程序可利用标签实现定制功能。比如 CDM 使用“上下线”标签来标记小车能否使用。

一般而言,当小车执行任务时出现异常,比如硬件故障,任务不能执行时,可用“现场检修”、“返厂检修”来防止 CDM 向它下新任务,然后用“立即强制结束”清除小车任务,处理完毕后用“初始化”使小车上线。

鼠标左键点选 L100,双击“前往站点”动作,然后左键点击目标站点,Simple 会规划一条路线并下发给 L100。

图 3-17 L100 前往待命点的规划路线

彩色的规划路线是 L100 的包络线,表示 L100 在空载行走时需要占用的空间。Simple 的路线规划算法基于包络,当 2 台小车的包络有交叠时,则表示它们存在争用,Simple 会计算出通行顺序,使 2 台车安全通过。

备注:“前往站点”的快捷方式是鼠标右键点击目标站点。

3.4.4 脚本标签

Simple 将规划路线编译为任务脚本,下发给 Clumsy,后者将执行结果回传 Simple。

图 3-18 L100 执行的一个任务脚本的例子

选择脚本条目,双击“显示脚本”动作,可看到脚本内容。脚本使用 JavaScript 语法,Go 是行驶指令,指令小车跟踪直线轨迹行走。除此以外还有取货、放货、SSC 切换等指令,参见 Clumsy 的动作代码。

3.4.5 场景标签

场景用于编辑管控地图,主要是站点和路径。

图 3-19 场景标签界面

管控地图由站点和路径构成。使用“添加”菜单,逐个或连续将站点放入地图,然后用路径连接。

L100 是差速底盘,无须使用圆弧和贝塞尔路径。

Simple规划出路线后,模拟小车顺序走过规划路线的站点和路径,根据站点和路径的属性编译出相应的动作指令,比如行走、停车、旋转、取货等。

站点属性

属性名 数据类型 用途
angle float 车头指向
turn bool 自旋转向
pickup bool 可以取货
drop bool 可以放货
pdscene string 行人检测(Pedestrian Detection)场景名

路径属性

属性名 数据类型 用途
pdscene string 行人检测场景名称
speed int 行驶速度(mm/s),默认400mm/s
reverse bool 倒退行走,与revdst配合使用
revdst int 倒退行走的目标地标
turndst int 指向终点的turn=true时,在终点自旋到dstAngle
dstAngle int 终点的自旋角度
typeInfo int 与下段路径的关系: - 0 表示小角度转向,无须减速。 - 1表示根据下段路径夹角计算是否减速。 - 2 表示转到下段路径时必须停车。

我们以去取货站点的路线配置为例。

图 3-20 取货路线配置

我们希望地牛取货时按照规划路线精确行走,以保证货叉正对托盘,不至于跑偏而叉取失败。上图中选中的2条橙色路径是关键,要求地牛向 6 点方向直行到转弯处停下,然后自旋到 180 度,使货叉正对第 2 条路径,然后倒走进入取货库位。

图 3-21 取货路线的第一个路径

第一条路径:

  • typeInfo=2:到下条路径前停车。
  • speed=400:速度降到 0.4m/s。
  • turndst=28:到编号为 28 的(路径)终点时自旋。
  • dstAngle=180:自旋到 180 度。

图 3-21 取货路线的自旋站点

第一段路径的终点:

  • id=28:即路径 turndst 指向的自旋站点。
  • turn=true:自旋站点。

图 3-22 取货路线的第二个路径

第二条路径:

  • speed=200:降速到 0.2m/s。
  • reverse=true:倒走。
  • revdst=962:倒走的终点编号是 962。

提示:reverse + revdst、turndst + dstAngle 都是配套使用。当地牛从取货站点离开时,是正走,到自旋站点后转向 89 度。

图 3-23 取货路线的取货站点

取货站点:

  • group="default":使用默认分组。取货和放货站点必须有 group 字段,与小车的 group 配套使用。
  • shelf=true:这是库位。(shelf 表示货架)
  • angle=180:停下时的车头指向 180 度。