MDCS-Walkthrough:修订间差异

来自MDCS wiki
跳到导航 跳到搜索
无编辑摘要
无编辑摘要
 
第1行: 第1行:
pdf版本:[[:文件:The MDCS cookbook v0.9.3.pdf]]
pdf版本:[[:文件:The MDCS cookbook v0.9.3.pdf]] / [[:文件:The MDCS cookbook.pdf|文件:The MDCS cookbook.pdf - MDCS wiki (lessokaji.com)]]


== 初识MDCS ==
== 初识MDCS ==

2023年12月8日 (五) 23:30的最新版本

pdf版本:文件:The MDCS cookbook v0.9.3.pdf / 文件:The MDCS cookbook.pdf - MDCS wiki (lessokaji.com)

初识MDCS

MDCS架构图

MDCS(Medulla,Detour,Clumsy,Simple)是一套完整的AGV(Automated Guided Vehicle)小车自动驾驶算法与控制架构,它由以下4个软件组成:

  • Medulla:硬件适配软件,提供通信抽象,通过插件对接各类硬件;
  • Detour:定位软件,包含成熟的SLAM导航、二维码导航、地面纹理导航算法,通过调整参数即可进行部署,得到车体运行环境和车的位姿;
  • Clumsy:自动驾驶软件,定义AGV的运动模型抽象形式,如差速轮、单舵轮、万向轮等;定义可用动作,如前进行走、后退行走、自动检测并行驶至工位或托盘等;
  • Simple:AGV调度软件,完备的静态路线调度系统,全自动交管,并支持动态路线、包络等功能。

Medulla、Detour和Clumsy为车载程序,支持Windows/Linux;RCS调度系统外壳SimpleComposer主要支持Windows部署,Linux下需要用安装mono等环境。

需要注意:在Windows上Medulla、Detour、Clumsy、Simple均需以管理员权限运行;在Linux上,Medulla、Detour、Clumsy均需以root运行。本cookbook中所有操作均默认以Windows管理员或Linux root用户进行。

Windows下的使用方法

目录结构和环境配置

车载:

/MDCS
    /Medulla
        /plugins        #各个插件都应放到这里
            CartActivator.dll       #车体开发库
            LidarController.dll     #雷达驱动
            LessokajiDemo_m.dll     # *这个是针对小车的硬件控制程序,开发这个插件
        Medulla.exe     #硬件控制核心程序
        NetRemote.exe   #遥控程序,也可以放到任意电脑上远程控制
        startup.iocmd   #Medulla的启动脚本
    /Detour
        Detour.exe      #定位核心程序
        detour.json     #定位程序的配置文件
        mainmap.2dlm    #地图文件,2dlm为激光SLAM地图,也可以有其它地图,如mainmap.groundtex为地纹理地图等
    /Clumsy
        ClumsyConsole.exe       #运动控制核心程序
        LessokajiDemo_c.dll     # *这个是针对小车的动作控制程序,开发这个插件
        clumsy.json             #参数等配置文件

调度服务器:

/Simple
    /plugins            #针对场景的插件应放到这里
        LessokajiDemo_Scene.dll
    SimpleComposer.exe  #核心程序
    scene.json          #站点路径等

在上述文件目录结构中,MDCS文件夹包括了部署在车端的3个软件,Simple一般部署于场景中另外一台与所有小车在同一局域网内的调度电脑或服务器上,故单独放在Simple/文件夹中进行说明。

在Windows系统下,无需安装额外的运行时环境。

Medulla开发

双击MDCS/Medulla/Medulla.exe即可启动。

插件加载器

Medulla本质上是一个插件加载器。通常来说,车体会作为单独的一个插件进行加载,车上的各个传感器分别作为插件进行加载。每一个插件为一个DLL(动态链接库),规定所有的DLL均放在Medulla/plugins/中。

Medulla本身使用类似命令行的方式,在运行时构建各插件的对象。一般来说,将Medulla需要运行的命令写在文本文件startup.iocmd中,Medulla在启动时将自动加载运行该脚本并调用相关的插件。示例如下:

// CartActivator.dll为车体插件的加载器
loader = io load plugins\CartActivator.dll

// 下面这一步是可选的,对插件中支持的一些初始化参数进行赋值,这里以给最大速度MaxSpeed赋值为例。这一步必须放在车体插件被加载之前进行
loader setp MaxSpeed 3000

// 用该加载器实例loader加载车体插件ProjName_m.dll,得到车体类实例cart
cart = loader load plugins\ProjName_m.dll

// 使用WLR716Lidar.dll插件实例化万集716雷达作为导航雷达frontlidar3d
frontlidar = io load plugins\WLR716Lidar.dll
// 调用插件的start方法,在IP地址192.168.137.180进行连接
frontlidar start 192.168.137.180

// 加载WinMedulla.dll插件并调用Show方法,显示Medulla的用户界面
ui = io load plugins\WinMedulla.dll
ui Show

Medulla启动之后,在Medulla的用户界面中,选择“命令执行”标签页,即可在运行时输入新的指令。所有的单线激光雷达有一组通用的操作命令,示例中的start为通用的启动命令。其余通用命令详见附录A。

需要注意:雷达倒置安装时,需要设置镜像:frontlidar setMirror true

用户界面

在startup.iocmd中加载WinMedulla.dll插件并使用Show方法后,Medulla的用户界面如上图所示。区域1中显示所有已加载的插件的实例化对象。选择某一对象后,区域2中将显示其属性和相应的值。区域3中为当前选择对象支持的功能,例如:cart对象的remote按钮会调出Medulla自带的简易遥控器;单线雷达对象的view按钮会调出雷达点云的可视化页面。


2.2.3 遥控器

Windows下Medulla常用2种形式的遥控器。

需要注意:各种遥控器与自动驾驶(Clumsy)对车体信号的控制有优先级顺序:简易遥控器优先级为0,http连接的遥控器(包括NetRemote.exe和3.X中提到的Web页面遥控器)优先级为1,蓝牙遥控器优先级为2,Clumsy自动驾驶优先级为4。优先级数字越小,代表优先程度越高,高优先级的控制方式将屏蔽低优先级的控制方式。例如开启遥控器时,Clumsy下发的命令无效。

第一种是Medulla内置的简易遥控器,通过cart对象的remote按钮可直接打开该遥控器。该简易遥控器勾选后有效。使用时自动绑定键盘↑、↓、←、→控制车体前后左右移动。下方速度滑钮控制速度大小。


第二种是NetRemote.exe遥控器应用程序。如下图所示。在左上方输入小车IP后,点击“确认”进行连接。“点击激活遥控”选中后遥控器生效。默认加载同目录下remoteconf.json配置文件。当没有配置文件时,打开NetRemote.exe会使用默认布局,点击“编辑”后可对小组件进行编辑:鼠标左键按住拖动位置;右键可修改名称、删除组件或设定键位绑定;点击“插入”可增加新的组件;点击“保存” 会覆盖掉同目录下的配置文件。绑定名称见4使用规则和约定。


第三种是网页访问的遥控器。如下图所示。目前该遥控器只能通过Clumsy的页面跳转进行访问。具体访问方法见2.3。使用时需将遥控器配置文件放在Medulla/htdocs/remoteconf.json。界面操作方法与NetRemote.exe相同。

第四种是在安卓设备上安装NetRemote.apk。可通过WiFi或蓝牙连接小车进行遥控。操作界面操作方法与NetRemote.exe相同。

需要注意:遥控器对车体控制具有最高优先级的控制权限。开启遥控器时,Clumsy下发的自动驾驶控制信号将被屏蔽。


可以选择Medulla UI上的cart组件,查看currentPriority判断目前遥控器控制来源:

  • currentPriority==-1表示无控制。
  • currentPriority==0表示Clumsy自动驾驶控制。
  • currentPriority==1表示Medulla内置简易遥控器控制。
  • currentPriority==2表示Web遥控器或NetRemote。
  • currentPriority==3表示蓝牙遥控器。
  • currentPriority==4表示特殊种类遥控器,如实体遥控器(若有)。

currentPriority数值越大的选项表示优先级越高,即,如果数值更大的控制源存在,其他控制源将被Medulla屏蔽。