viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法

这篇具有很好参考价值的文章主要介绍了viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

名字解读

两距离:指的是左侧距离和右侧距离

局部最优:对当前状态来说最好的选择,至于整体能不能达到最优,是无法确定的。

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

从节点1到节点5,一共有3条路

第1条路线:1→2→4→5,对应的花销是:2+3+4=9;

第2条路线:1→3→4→5,对应的花销是:1+5+4=10;

第3条路线:1→3→5,对应的花销是:1+6=7;

所以,可以看出,花销最少的是第3条路线,对应的花销是7,即:该路线是最佳路线,开销最小。

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化
最佳路径(花销最小)

如果采用的是贪心策略来实现从顶点1到顶点5。当站在顶点1的时候,看到前面有两条路,分别是去顶点2和去顶点3,对应的开销分别是2和1,此时,认为去3开销小,于是选择下一步走到顶点3。

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

同样的道理,当来到顶点3后,面前也有两条路,去顶点4和顶点5,分别对应的开销是5和6,此时会认为去顶点4开销小,所以下一个顶点去顶点4

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

由于顶点4到顶点5,只有一条路,所以就直接选择该条路径即可。

所以最终选择的路线是:1→3→4→5对应的开销是1+5+4=10

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化
贪心策略路径(可能和最佳路径一致,也可以不一致)

从该案例中可以看出,贪心策略是一种局部最优,也就是说,每一步的选择,都是根据当前拥有的资源选择对自己来说最好的选择,至于整体是否最优,有可能是,有可能不是。

综上所述,两距离局部最优迷宫算法,也就是一种贪心策略,可能最终也会走出迷宫(要根据迷宫的形状才能确定是否能走出迷宫),走的路径按照原理给定的策略进行选择,整体路径不一定是最短的路径。所以调整参数的时候,能使得机器人使用该策略走出迷宫且行走路径不要出现转圈等增加行走路径的值则为比较恰当的参数。

观察现象

两距离局部最优迷宫算法

注意:右转完成后,进行了测量。然后本视频中显示的是右转180度,应该是左转180度,制作PPT的能力有待提高,后期有时间进行更新。

总结出原理

  1. 初始化为直行状态,当前侧检测到前方有障碍物时,机器人右转90度;
  2. 右转完成后,进行测量。测量出来的值赋值给变量,用来保存右侧距离;
  3. 测量结束后,左转180度,再次进行测量,此时,测量出来的值对应的是左侧距离;
  4. 如果左侧距离大于等于右侧距离,则表示左侧更加宽敞,应该往左侧走,由于车头此时已经在左侧,所以只需要直行即可;
  5. 如果左侧距离小于右侧距离,则表示右侧更加宽敞,应该往右侧走,由于车头此时在左侧,所以需要右转180度,使得车头朝右,再直行。

有限状态机

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

回答几个问题再考虑如何写程序

1、为什么刚开始运行是直行前进?

答:使用前方的距离传感器进行测量,测量值大于等于设定的危险值,此时机器人认为前方有路,所以直行。

2、 为什么机器人会右转90度?

答:使用前方的距离传感器进行测量,测量值小于设定的危险值,此时机器人认为前方无路,所以进行转弯,此时,机器人想要测右侧距离,由于只有前方才有距离传感器,所以,将机器人朝向先调整到右侧,再进行测量,所以右转90度。【右转90度,就是为了使用前方的距离传感器测量右侧距离,所以才会右转90度】

3、为什么右转90度后,测量完右侧距离,然后左转180度?

答:机器人想要测左侧距离,但是由于上一步骤后,机器人朝向是右侧,所以,需要先将朝向调整到左侧,再进行测量,由于从朝右改为朝左,可以左转180,也可以右转180度,所以没有特别要求非要从那边,建议选择左转180度。

4、两边都测量完了后,再进行比较,判断哪边更宽敞,就往那边走。情况就有两种:

1)如果左边≥右边,接下来直行(这是因为第三步过后,机器人已经朝左,此时选择直行,实际上就是往左边走了)

2)如果左边<右边,接下来右转180度,然后再直行(这里因为第三步选择左转180度,现在想要把机器人的朝向改到右边,就右转180度进行恢复。第三步“建议选择左转180度”,实际上的目的就是想要在恢复的时候,选择右转180度,机器人看起来有点探测路的感觉)

总结:该算法策略,只使用了一个传感器,是前方的距离传感器。

算法实现

unity线控模拟中,已经发现一个规律,想要机器人运行,使用的是移动动力控制和转动角度控制。现在加入算法后,模拟器环境没有改变,所以,主机配置应该和线控模拟是一致的,其次,想要让机器人动起来,还得是移动动力控制和转动角度控制。

接下来进行一种参考程序编写方法

前进自定义活动:做两件事,分别是:机器人前进以及前进状态的记录(由于没有设置定时器,先记录状态还是先运动,都可以,如果希望并行,还可以设置为两条工作流也行)

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

右转90度自定义活动:做一件事,右转,由于右转需要时间,所以不仅要右转,还要给一定的时长viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

左转180度自定义活动:主要做左转工作,和右转一样,都需要一定的时间,需要注意的是:左转是逆时针运动,所以,角度的符号为负数。

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

右转180度和左转180度相似,只需要将参数值符号改为正数即可,暂停和前进类似,只需要将驱动功率值设置为0即可。

Main程序

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

第一个条件,表达的是直行过程中,发现前方无路,进行右转;第二个条件,表达的是右转完成后,进行测距,此时测出来的距离是右侧距离,然后进行左转180度。第三个条件表达的是左转完成后,进行测距,此时测出来的是左侧距离,只需要判断左侧距离和右侧距离的关系,即可做出后续往那边走的动作即可。

效果展示

后记:理解原理,对整个运行过程很熟悉,编程实现,并进行参数调整,观察运行效果是否正确即可,当然,如果非常用心做,应该把参数调整到接近于整体最优的效果最佳。

unity模拟器实验两距离局部最优迷宫算法效果

注意:需要对状态进行锁定,状态改变,要及时更新新状态,再做动作。

可能出现的问题:

1、没有进行状态锁定,导致转弯的时候,还在判断前方是否有障碍物

2、设置的时间不合理,例如:右转90度还没有完成动作,就进行测量右侧距离;同样的道理,左转180度还没有完成,就开始测量左边的距离,这也是不对的。其次,右转180度进行恢复的时候,还没有恢复到右侧,就开始前进,也是不合理的,这些问题都是因为设置完成动作的时间不合理造成的。

3、机器人刚运行的时候就开始右转90度,说明符合了右转90度的条件,状态是直行测量值小于设定值,如果想要机器人刚开始能够直行,就要破坏右转条件,状态是无法改变了,那就只剩下测量值小于设定值,测量值来自传感器,传感器中的值只能读取,不能修改,所以,只能修改设定值,此时,应该将设定值改小一些,从而来使得测量值大于等于设定值,认为前方有路,才能直行,就防止了右转。

4、value乱用问题。【技巧:如果自己写的程序,不清楚value代表的时候,就打印出来看看】

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

value无需创建,直接使用,本案例中,只有一个变量i,用户创建的,value表示前面i对应的值,由于i的值是张三,所以打印结果是张三。

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

同样的道理,value也是无需创建,那value现在的值和前面的数据活动的值是一致的。

根据前两个案例,再进行更改

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

此时,value的值和警示对话框的警示内容是一致的

可以猜测,value无需创建,它的值和前面最近的活动的值是一致的。此时value值和定时器前面的数据活动是一致的。

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

如果把定时器删了,再进行测试

viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法,viple,viple可视化

发现,value的值,距离最近的是j的值,所以打印的是李四。

所以,得出一个结论:value无需创建,它的值取决于它前面距离最近的数据值,如果将简单的对话改为传感器,也是一样的道理。

技巧:将传感器中的值打印出来,看着测量值进行设定参数,就更容易找到比较合适的参数。文章来源地址https://www.toymoban.com/news/detail-755645.html

到了这里,关于viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity3D:设备模拟器

    推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 设备模拟器是一项 Unity 编辑器功能,可模拟应用程序在移动设备上的显示和行为。 设备模拟器包括: 模拟器视图:在模拟移动设备上查看应用程序。 模拟类:测试响应特定于设备的行为的代码。 设备定

    2024年02月10日
    浏览(46)
  • unity 判断当前设备是否是模拟器(安卓)

    最近有个需求,需要判断当前设备是否是模拟器,网上查了一下,发现基本上都是使用特征字符串进行检索,类似这种: 发现都是不行的,因为现在的模拟器都会伪装== 还有一种方法是使用 AndroidJavaClass 来调用安卓相关的方法:参考林新发大佬 例如这种: ps:由于没用安卓

    2024年02月14日
    浏览(56)
  • Unity3D:模拟器视图

    推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 “模拟器”视图在模拟的移动设备上显示应用程序。使用它来查看应用程序与该设备的屏幕形状、分辨率和方向的显示方式。 模拟器视图的屏幕截图 若要打开模拟器视图,请执行下列操作之一: 在“游

    2023年04月26日
    浏览(50)
  • Unity制作虚拟主机装机模拟器(课程设计)

    1.设计阶段 1.1需求分析 本虚拟装机系统是为了帮助用户学习计算机的组装过程,提供动手组装、教学模式和零件介绍三种模式。在零件介绍中,用户可以通过语音和文字介绍了解不同电脑零件的功能和名称。在教学模式中,用户可以观看动画短片,了解计算机的发展和组装计

    2024年01月21日
    浏览(44)
  • [游戏开发][Unity] 打包Xcode工程模拟器+真机调试

    Xcode版本:Xcode14 苹果开发者账号、相关设备cer证书、开发者证书、发布证书 账号分三类,个人,公司,企业,价格99/99/299美金 新注册账号的基本设置按网上的教程来就行 我们公司是企业账号,我的苹果开发者账号是公司一个User,这个和个人开发者不同。 账号还是非常重要

    2024年02月15日
    浏览(63)
  • 关于 Unity 连接 MuMu 模拟器上的 Unity Remote 5 的方法

    在使用 Unity 开发 Android 的过程中,可以通过使用 Unity Remote 这个 app 来和真机连接,进而在真实环境下进行测试性能等工作,而本次则是由于其他问题引出的一个小坑,记录以备后续查询。 这次是由于在自学过程中遇到的一个工程,虽然是面向安卓开发的,问题是在 Unity 的

    2024年02月03日
    浏览(47)
  • unity调试手机游戏(Android)【模拟器+真机】+设置运行时游戏横屏

    注:我使用的unity版本为2021.3.2f1c1 1、将平台调整为Android 点击“文件“ —— ”生成设置“ 在平台选择Android,点击右下方的切换平台 (如果没有下载Android平台包需要先下载,我的下载好后自动配置了SDK/JDK/NDK,在下载时可选。若没有选择下载SDK/NDK/JDK,需要自行配置) 检查

    2024年02月08日
    浏览(52)
  • Unity Timeline在编辑器下正常,真机(模拟器、手机)不正常播放问题

    出现这个问题很大可能是因为设置了 Managed Stripping Level = Low 只需要改成 Managed Stripping Level = Medium就可以正常播 或者改Assets/link.xml没有就新建 如果还是不能播放,可以考虑下是不是资源打包出问题了。 上面的代码裁剪掉的明显特征是,真机运行log会出现: The referenced script (U

    2024年03月13日
    浏览(97)
  • mac使用Simulator打开IOS模拟器(不使用Xcode打开IOS模拟器)

    提示:打开模拟器的前提必须是安装了Xcode。 在mac电脑上有Xcode可以用来模拟不同类型的手机进行来解决ios兼容问题,这里记录一下不使用Xcode打开ios模拟器的方法 快捷键:command+空格。搜索simulator,第一个就是模拟器 使用以下命令打开模拟器 结果如下图

    2024年02月15日
    浏览(53)
  • unity-VRTK学习日记1(VRTK4|无头盔开发模拟器SpatialSimulator)

    目录 前言 前期准备 1.配置VRTK4: 2.把几个插件给安装好 查看自己安装了哪些VRTK插件  3.添加模拟器 操作方法 操作方法:人话 VRTK的较早版本不适用于Unity的新版本,原因好像是Unity将VR开发功能并入到自家的XR下了。就是之前更新的那些XR interaction tookit。 本人版本:2021.3.

    2024年02月01日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包