在完成对云实践平台的熟悉后,内测的第二部分实验是SLAM建图和导航。 首先在建立开发项目前,需要创建开发环境,由于内测用户每个账号可以创建两个开发环境,所以这时我新建了一个开发环境。完成创建,进入开发IDE后,我们可以在开发环境主文件夹下新建项目文件夹,每个项目应包含两个工作空间robot_ws和simulation_ws,工作空间下新建src文件夹。
完成项目文件的建立后,我们可以新建代码文件编写程序,也可以上传本地代码。内测资料中有编写好的代码,故只需上传至对应工作空间即可。
在完成代码文件的上传之后,跟前面helloworld实验的步骤一样,需进行编译和捆绑,只不过编译及捆绑的规则需要自行配置,配置界面如下。
我们可以看到四个功能的配置项: 1.Colcon build:⼯作空间编译配置项 2.Colcon bundle:⼯作空间镜像捆绑配置 3.Simultion:仿真环境配置 4.Workflow:设置⼀个⼯作流,可以包含⼀个或多个以上配置,相当于⼀件完成设置好的多项配置。 编译和捆绑项中我们都需要配置robot_ws和simulation_ws的名称和路径。完成后可以在运行菜单的编译和捆绑找到对应动作。
这时我们可以将两个工作空间的编译和捆绑四个步骤配置到一个工作流中,方便后续操作。
一键完成编译和捆绑后,robot_ws和simulation_ws两个工作空间中会生成捆绑的输出镜像文件。在得到这两个文件后,我们还需要一个模拟仿真任务来进行绑定。接下来则是配置仿真任务。 在配置页的simulation项中配置模拟作业的持续时长、仿真运行失败后的行为、不同权限的用户角色和日志输出的空间位置。完成后还需分别配置机器人应用和模拟应用的参数,主要是分别绑定捆绑好的输出镜像和设定启动仿真任务的launch文件。通过修改通过修改机器人应用配置中的launch启动文件,我依次运行了gmapping,hector和Rtabmap三种SLAM功能包。其中Rtabmap是三维SLAM功能包,需在仿真环境中启用深度相机建图,其余两种平面SLAM算法则是用激光仿真建图。每当配置完成模拟作业后,还可以在启动simulation任务前通过修改json文件来设置项目参数。全部配置完成后,就可以启动一个新的仿真任务,即模拟作业。
三种算法的SLAM建图效果如下图所示。 Gmapping:
Hector:
RtabMap:
在导航实验中,利用RViz直接在地图上给出指令进行导航的效果还可以。
在使用程序让机器人进行自主导航的实验中,我发现模拟应用程序工具中的terminal终端和机器人应用程序工具中的终端功能并不相同。模拟应用的终端读取的是simulation_ws工作空间下的功能包,而机器人应用的终端读取的是robot_ws下的功能包,这也是两个程序工具版块各有一个交互终端的原因。
这个任务中的导航程序执行时导航到第一个随机点的成功率偏低,多次超时无法完成。在进行多次尝试后最终实现了随机点导航的效果。
该任务的点位随机貌似是伪随机。不过在观察确认结果时,模拟作业达到设置时长自动终止了,终止后各个窗口会呈现无法连接的状态。所以我们在启动模拟作业前还需要评估作业时长,针对每次作业配置合适的持续时间。当然作业一旦完成,可以选择取消提前终止模拟作业。
在最后的Mbot机器人SLAM+自主导航任务中,实际已经知晓地图构造的我们,可以选择指向中心不可到达区域的点来让机器人自己绕圈SLAM,发现无法到达目标点的机器人会卡在建完地图边界时的位置。
最后,采用随机目标点自主导航SLAM的执行效果如下图。程序中的随机点位坐标是在已建完的图中选取的,实际在不知情的环境下则需要评估点位位置。
至此,本次内测的实验任务都已完成。总结一下就是收获颇丰。云实践平台给我们提供了很多新的设想,希望后续本平台能持续改进,优化功能、性能,尽快与大众见面。