编程语言有很多,算法应用场景也很丰富,通过机器人学习编程的优势在哪里?
- 仿真:零成本测试算法
- 真机:实际环境中直观展示算法
机器人编程
深度优先搜索Depth First Search (DFS)
伪代码形式Pseudocode:
DFS-iterative (G, s): //Where G is graph and s is source vertex
let S be stack
S.push( s ) //Inserting s in stack
mark s as visited.
while ( S is not empty):
//Pop a vertex from stack to visit next
v = S.top( )
S.pop( )
//Push all the neighbours of v in stack that are not visited
for all neighbours w of v in Graph G:
if w is not visited :
S.push( w )
mark w as visited
DFS-recursive(G, s):
mark s as visited
for all neighbours w of s in Graph G:
if w is not visited:
DFS-recursive(G, w)
很抽象,对不对。其大概意思是:
DFS的这种递归性质可以使用堆栈来实现。基本思想如下:
选择一个起始节点并将其所有相邻节点推入堆栈。
从堆栈中弹出一个节点选择下一个要访问的节点,并将其所有相邻节点推入堆栈。
重复此过程,直到堆栈为空。但是,请确保已标记访问的节点。这将防止多次访问同一节点。如果未标记访问的节点,并且多次访问同一节点,则可能会陷入无限循环。
还是很抽象?
DFS的工作方式图示好像能看懂这个算法了,但是依然不清楚这个算法有啥用啊……为啥要学这个???
路径规划(Path Planning)
但是如果通过机器人导航中路径规划案例切入这类算法,就会非常清晰的了解这些算法的背景。
路径规划示意图当想机器人沿着每条路径到达终点并在终点找到“目标”时,深度优先搜索是一个不错的选择。由于算法没有均匀地覆盖每条路径,因此效果可能不太理想,但是,如果目标在列的中间,可以找到它而无需搜索每条路径,因此效率更高。发现“目标”的速度比使用BFS(Breadth First Search,广度优先搜索,)更快,在计算上也将更加容易。如果只有一个目标,可能会很好,但是如果有多个目标/路径,可能会错过较短的“最佳”路径。
如下所示:
目标点导航什么情况更类似广度优先搜索BFS呢?建立环境地图或者区域覆盖的时候:
全区域覆盖通俗而言,地图范围内目标单一且明确,直奔目标而去,深度更合适;而对于环境未知,需要探索,或者目标较多,那就广度优先,把地图好好利用起来,机器人在里面漫游一圈。
对于互联网和移动互联网时代,计算机主要处理的是信息数据检索和排序等,例如搜索引擎的使用,就是信息的快速查找,深度优先和广度优先算法用于信息查找;
当进入物联网和移动物联网时代后,计算机虚拟世界和现实世界依靠强大的传感器和执行器深度融合,这时候信息的快速查找就更为具体,比如从家到公司的路径,选用何种交通方式等,这时候的深度优先和广度优先算法用于对真实世界建模后数字化地图数据的信息处理。
机器人是最佳的综合性移动物联网节点,可“甜”可“咸”,既可以通过自身传感器完成对真实世界的建模理解,又可以将决策应用到环境中执行任务。最典型的案例为室内扫地机器人和自动驾驶汽车。
扫地机器人算法测试 自动驾驶汽车算法测试这时所学习的算法需要处理的不再是单纯的虚拟信息或数据,而是我们的真实世界的数字模型。
更多内容参考,博客相关介绍文章。
项目实践
那么如何才能更好的掌握机器人编程?
- 纸上得来终觉浅
- 项目实践最重要
这里推荐的研习路径,就是最热门的机器人开源项目,参与其中必然成长收获非常大。
最后,回顾一下这5年,每年10月自己觉得还不错的博文:
- 2015年10月:原创 机器人操作系统ROS(indigo)与三维仿真软件V-Rep(3.2.1)通信接口使用笔记
- 2016年10月:原创 ROS(indigo)RRT路径规划
- 2017年10月:原创 ROS(1和2)机器人操作系统相关书籍、资料和学习路径
- 2018年10月:原创 在Windows10安装和使用机器人操作系统ROS补充说明
- 2019年10月:原创 物联网IoT Arduino 机器人ROS 人工智能OpenAI融合课程(幼儿园到大学)
祝大家2020.10.24节日快乐,感谢CSDN让我们相遇^_^