一种面向机器人自主智能导航低代码设计与仿真的实现方法(机器人导航方案)
一种面向机器人自主智能导航低代码设计与仿真的实现方法(机器人导航方案)
任江 阮志成 淡雅静
中电长城网际系统应用有限公司
摘 要:文章主要探讨了在机器人应用行为树自主导航技术时如何设置连接仿真环境,并采用可视化编程技术以便于调试。文章介绍了所使用的各项技术的背景和意义,从技术特点、应用场景、实现原理等不同角度探讨了选择技术的优势和局限性,提出了改进和优化方案,讨论了这些方案的可行性和局限性,并对这些技术进行总结性分析和讨论,并提出了展望和建议。
关键词:机器人;ROS;仿真;人工智能;教育;
作者简介:任江(1973—),男,硕士,正高级工程师,研究方向:数字化转型实践、企业架构咨询、信息安全、分布式计算、机器学习。;
0 引言
伴随着人工智能、机器人、无人驾驶等技术的蓬勃发展,相关智能产品更多地出现在我们的生产生活中。同步定位和智能导航作为这些应用的关键基础,在开发和使用阶段如何更便捷、有效地进行定义、调试或者满足客户自定义需求成为重要命题。仿真技术已经成为不可或缺的工具,通过仿真,研究人员可以快速地验证和测试新的机器人控制算法和导航策略,降低机器人实验的成本和风险。随着计算机硬件的飞速发展,机器人仿真技术的应用范围也变得越来越广。该文根据工作实际,对一些特定场景下解决机器人导航智能设计的仿真方法进行了一些探索尝试。
1 问题的提出
服务型机器人,特别是一些特种作业机器人,往往需要根据作业类型和地形特点,进行针对性的导航智能或策略设计,这有可能是开发中行为,也可能是使用时的自定义场景。满足这类需求一般会面对以下几个问题:
(1)直观有效的定义方式;准确还原业务逻辑。
(2)低成本的上载和调试。
(3)最好可以满足非技术人员使用。
(4)通用性和可移植性。
2 解决问题的思路
大多时候的地形场景和导航,可以简单抽象为在一个封闭空间的自主行为,或者说是一个迷宫的寻路问题,然后在迷宫的路径节点加以行为限制,如图1所示。
图1 行为场景示意图 下载原图
第一,我们在自主导航逻辑上采用了行为树技术来定义。
Behavior Tree,又称行为树,是一种构建在机器人、电子游戏虚拟实体等自主智能体中不同任务(假设某单个活动以指定的方式分解为可以重用的子活动,这些子活动称为任务,也称为动作或者控制模式)中间切换的方法,是一种创建具有“模块化(Modular)和反应性(reactive)复杂系统的有效的方式”[1]。BT是一个有向的根树,根节点就是Root节点,作为行为树的入口,节点类型为Root,每个行为树有且只有一个Root类型节点;内部节点称为控制流节点,叶节点称为执行节点,所有的叶子节点的类型一定是Action,同时Action类型的节点一定不能作为非叶子节点来使用。非叶子节点也称为组合节点(Composition),可以有一个或多个子节点,与之不同的是根节点(Root)只有一个子节点而没有父节点,其余节点都有一个父节点和子节点,具体结构如图2所示。
行为树由多种不同类型的节点组成,这些节点都会返回三种状态中的一种作为节点的运行结果。三种状态分别是成功状态、运行中状态和失败状态。
行为树概念的出现实际已经有很多年了,总的来说,就是使用不同的经典控制节点与行为节点进行组合,从而实现复杂的人工智能体。从图2可以看出,相比于有限状态机,行为树更加地接近人类自然的理解,同时又能更容易地定义复杂的AI逻辑。
图2 行为树逻辑示意图 下载原图
行为树的核心思想是将机器人的决策和行动分解为若干个节点,每个节点负责一个特定的任务。行为树中的节点分为行为节点和控制节点两类。行为节点负责执行具体的行为任务,比如移动、转向、寻找目标等;控制节点负责控制行为节点的执行顺序和条件,比如序列节点、选择节点、条件节点等[2]。
机器人自主导航中的行为树通常包含三个层次:高层次行为、中层次行为和低层次行为。高层次行为是指机器人需要完成的任务,比如到达目标点、避开障碍物等;中层次行为是指将高层次行为分解为若干个子任务,比如转向和移动等;低层次行为是指机器人执行具体的运动控制命令,比如沿着一定的轨迹前进。
行为树的执行方式是自下而上的,即从低层次行为开始执行,然后向上执行中层次行为和高层次行为。在执行过程中,机器人会根据传感器获得的环境信息进行实时决策和调整。如果出现某些异常情况,比如障碍物突然出现,机器人会根据控制节点的逻辑相应地调整和反应。
第二,系统选用早期采用了比较流行的ROS,现在在往ROS2迁移中,最大化地实现系统的通用性。考虑成本因素,特别引入了ROS的仿真系统Gazebo。Gazebo是一款当下业界较为主流的开源物理仿真环境,具备以下特点[3]:
(1)动力学仿真:Gazebo支持多种高性能物理引擎,包括Bullet、Sim Body、DART等。
(2)三维环境可视化:支持显示光线、纹理、影子等三维环境。
(3)传感器仿真:支持传感器仿真,同时也支持传感器噪声的仿真。
(4)插件可扩展:使用者可自由定制开发插件,通过插件扩展Gazebo的功能,满足用户的个性化需求。
(5)支持多种机器人模型:Gazebo官方提供对PR2、Pioneer2 DX、Turtle Bot等机器人模型的支持,同时用户也可以使用自己创建的机器人模型。
(6)支持TCP/IP传输:Gazebo可以通过网络通信实现远程仿真。
(7)云仿真:Gazebo可以在Amazon、Softlayer等云计算环境下运行,也可以在用户自行搭建的云服务器上运行。
(8)终端工具:用户可以使用Gazebo官方提供的命令行工具,从而通过终端命令行的形式,实现对仿真的自主控制。
第三,从逻辑定义便捷化和客制化需求出发,我们采用了Scratch3.0作为低代码平台,最终实现了如下逻辑,如图3所示。选择Scratch,部分缘于我们之前面向机器人编程教育项目的工作积累,但实践中发现它也是很方便的一个逻辑定义工具,其应用不只限于儿童编程,在国外也有大量的应用扩展案例。
图3 系统各模块逻辑关系图 下载原图
3 探索实践过程
3.1 搭建ROS环境
3.1.1 添加ROS软件源
将以下命令输入到ubuntu终端中并执行:
sudo sh-c'./etc/lsb-release&echo"deb http://mirrors.ustc.edu.cn/ros/ubuntu/$DISTRIB_CODENAME main">/etc/apt/sources.list.d/ros-latest.list'
3.1.2 添加密钥
将以下命令输入到ubuntu终端中并执行:
sudo apt-key adv–keyserver'hkp://keyserver.ubuntu.com:80'–recv-key C1CF6E31E6BADE8868B172
3.1.3 更新软件源
将以下命令复制到ubuntu的终端执行:
sudo apt update
3.1.4 配置及更换最佳软件源
选择合适的软件源会在很大程度上提高下载速度
sudo apt-key adv–keyserver keyserver.ubuntu.com–recv-keys F42ED6FBAB17C654
3.1.5 执行安装
将以下命令复制到ubuntu的终端执行:
sudo apt install ros-noetic-desktop-full
3.1.6 配置ROS环境到系统
要先初始化rosdep(rosdep让你能够轻松地安装被想要编译的源代码,或被某些ROS核心组件需要的系统依赖),在终端依次输入下面指令。
sudo rosdep init
rosdep update
然后初始化环境变量:
echo"source/opt/ros/kinetic/setup.bash">>~/.bashrc
source~/.bashrc
3.2 安装Gazebo
Gazebo是一款开源的三维物理仿真平台,其具备完善的编程接口、便捷的图形接口、强大的物理引擎与高质量的图形渲染功能。尽管Gazebo中使用的机器人模型与Rviz中使用的模型相同,但仍需使用者在模型中添加机器人和环境的物理属性,如质量、摩擦系数、弹性系数等,也可通过插件的形式将机器人的传感器信息加入仿真环境中,从而实现以可视化的方式进行显示。
3.2.1 Gazebo安装
sudo apt-get install ros-noetic-gazebo-ros-pkgs rosnoetic-gazebo-ros-control
3.2.2 Gazebo界面
输入以下指令打开gazebo:
roscore
rosrun gazebo_ros gazebo
3.2.3 验证
为了验证Gazebo是否与ROS系统成功连接,可以查看ROS的话题列表,如果连接成功,可以看到Gazebo发布/订阅的话题列表。
3.3 搭建Scratch3.0二次开发环境
Scratch是麻省理工学院团队开发的图形化编程工具,使用者可以不认识英文单词,也可以不会使用键盘。其构成程序的命令和参数是积木形状的模块,不用书写代码语句,只需按照一定的逻辑用鼠标拖动模块把它们拼在一起就可以。其他编程语言,例如:Python,java,C等。
3.3.1 Scratch3.0下载项目
项目基于js ES6语法、react框架实现Scratch3.0需安装Node环境验证node npm命令能正常使用
扩展积木块使用到scratch-gui和Scratch-vm两个项目
https://github.com/Affonso-Gui/scratch3-ros
https://github.com/Affonso-Gui/scratch3-ros-vm
3.3.2 安装运行
执行以下命令运行gui项目
cd scratch-gui-develop
npm install
npm start
访问地址locolhost:8601查看项目
3.3.3 扩展积木块流程
(1)运行vm项目。cd scratch-vm-develop
npm link(根据需求,无依赖建议直接执行npm link)
npm run watch(运行备gui使用)
(2)运行gui项目。新建命令行窗口
cd scratch-gui-develop
npm link scratch-vm(依赖vm虚拟机内容)
npm start(运行项目)
(3)扩展积木块vm项目配置。在vm项目scratchvm-develop/src/extensions路径下新建扩展文件夹、文件夹下新建index.js
(4)在左下角添加扩展中选择ROS Extension,并输入localhost的IP。(127.0.0.1或192.168.x.x)。
(5)选择ROS,在Scratch3.0中选择ROS扩展积木,如图4所示。
图4 在Scratch3.0扩张积木块中选取ROS的操作界面 下载原图
3.4构建行为树模型
Behavior Tree.CPP是一个开源的C 行为树库。在游戏领域,行为树已经比较流行了,主要用于维护游戏角色的各种动作和状态,但在机器人领域还很少使用的。Navigation2中引入了行为树来组织机器人的工作流程和动作执行。
行为树是树状的结构,它的逻辑流程是由XML文件描述的。我们该次一个重点工作就是通过Scratch3.0可视化生成行为树定义。行为树本身并不具体实现机器人的执行内容,它只负责将执行内容进行编排。以Navigation2为例,具体的执行内容实现是放在各个server中的。行为树上的节点与server进行通信,请求具体的执行内容,然后获得反馈,根据反馈结果又可以请求另外的执行内容。这些不同执行内容间的跳转就是由行为树控制的。
4 结论
行为树作为一种重要的机器人自主导航框架,在未来的研究中也有着广阔的应用前景。随着人工智能体技术的不断发展,行为树可以结合深度学习、强化学习等技术,进一步提高机器人自主决策和行动的能力。同时,行为树还可以应用于多机器人协同和分布式控制等领域,为机器人应用带来更多的可能性。在机器人仿真和行为树应用方面,未来的研究还需要解决一些挑战和问题。比如,在仿真中如何更加准确地模拟真实环境和传感器数据,如何设计更加复杂和灵活的行为树结构,提高机器人的自主决策和行动能力,如何在多机器人系统中进行协同和合作,实现更高效和稳定的控制等[4]。这些问题的解决需要研究人员从不同的角度进行探索和尝试,不断推动机器人技术的发展。
该方法目标是建立机器人自主智能导航规划的便捷可视化方法,甚至能集成到客户环境当中,基于以前基于游戏项目对行为树应用经验和教育项目的积累,选择的一条相对容易实现的路径。目前还在进一步从ROS1往ROS2迁移,由于通讯协议部分有较大的改变,只完成了初步原型论证。该研究旨在抛砖引玉,希望得到更多探索启发。
参考文献
[1] Cao,Y.&Y.Yue.,K.Li.,H.Zhang..An Overview of Recent Progress in the Study of Behavior Trees for Robotics[J].IEEE Transactions on Intelligent Transportation Systems,2015(5):2393-2403.
[2] Colas,F.&R.Siegwart..Simulating and Evaluating the Behavior of Autonomous Robots Using Behavior Trees[J].Robotics and Autonomous Systems,2017,88:141-152.
[3] Milliez,G.&L.Fabresse.,T.Raimbault..BTRobots:A Behavior Tree-based framework for Simulating Robot teams[J].Journal of Intelligent&Robotic Systems,2017(1):1-18.
[4] A,Silva.&Santos.A.,Lau.N..Behavior Trees for Decision Making in Autonomous Agents[J]:A survey.Journal of Autonomous Agents and Multi-Agent Systems,2018(3):357-408.
声明:我们尊重原创,也注重分享。有部分内容来自互联网,版权归原作者所有,仅供学习参考之用,禁止用于商业用途,如无意中侵犯了哪个媒体、公司、企业或个人等的知识产权,请联系删除(邮箱:glyhzx@126.com),另本头条号推送内容仅代表作者观点,与头条号运营方无关,内容真伪请读者自行鉴别,本头条号不承担任何责任。