查看: 14|回复: 14

案例五 AGV检测碰撞和避碰方式的选择

[复制链接]

主题

0

回帖

214

积分

注册会员

积分
214
发表于 2018-4-28 09:20:09 | 显示全部楼层 |阅读模式
[align=left][font="]这个模型可以解决AGV系统中的避碰方式的选择问题,当AGV在路径中检测到碰撞,会采取什么样的逻辑来避开碰撞。[/font][/align][align=left][font="]
[/font][/align][align=left][color=red][font="][size=14.0pt]1[/size][/font][/color][color=red][font="][size=14.0pt]、模型描述[/size][/font][/color][/align][align=left][color=red][font="][size=14.0pt]
[/size][/font][/color][/align][align=left][font="]避碰方式有很多种,这里分享一个解决巷道式车间里AGV碰撞时选择偏移避让的案例:巷道内只有一条AGV路径,当两台AGV在巷道内发生对向碰撞时,其中一台AGV向路径一侧偏移一定距离,待另一台AGV离开之后再回到路径上继续行进。(控制区域可以很好的解决交叉路径的避碰控制,但是一条路径上的对向碰撞使用控制区域将会造成死锁)[/font][/align][align=left][font="]
[/font][/align][align=left][color=red][font="][size=14.0pt]2[/size][/font][/color][color=red][font="][size=14.0pt]、模型布置[/size][/font][/color][/align][align=left][color=red][font="][size=14.0pt]
[/size][/font][/color][/align][align=left][/align][align=left][color=red][font="][size=14.0pt] [/size][/font][/color][/align][align=left][color=red][font="][size=14.0pt]3[/size][/font][/color][color=red][font="][size=14.0pt]、实现过程[/size][/font][/color][/align][align=left][color=red][font="][size=14.0pt]
[/size][/font][/color][/align][align=left][color=blue][font="][size=12.0pt]碰撞下拉列表[/size][/font][/color][/align][align=left][color=blue][font="][size=12.0pt]
[/size][/font][/color][/align][align=left][/align]
[align=left][font="]勾选检测碰撞并且设置碰撞检测时间间隔,在AGV两端绘制半径为0.5m的碰撞球,选择模型中检测避碰的另一台AGV,最后编辑避碰逻辑。[/font][/align][align=left][color=blue][font="][size=12.0pt]
[/size][/font][/color][/align][align=left][color=blue][font="][size=12.0pt]碰撞逻辑[/size][/font][/color][/align][align=left][color=blue][font="][size=12.0pt]
[/size][/font][/color][/align][align=left][font="]这个案例里需要AGV每0.1秒检测一次碰撞,容易出现在一次避碰过程中出现多次检测,从而一次避碰中执行多次避碰逻辑。我们先给AGV添加一个test-times的标签赋初始值为0。[/font][/align][align=left][/align]
[align=left][font="]在碰撞处理触发器写入避碰逻辑[/font][/align][align=left][font="]/**[/font][font="]避碰逻辑*/[/font][/align][align=left][font="]Object thisobject = ownerobject(c);//[/font][color=#70AD47][font="]声明当前实体[/font][/color][/align][align=left][font="]Object otherobject = param(1);//[/font][color=#70AD47][font="]声明检测到碰撞的实体[/font][/color][/align][align=left][font="]treenode thissphere = param(2);//[/font][color=#70AD47][font="]声明当前碰撞球[/font][/color][/align][align=left][font="]treenode othersphere = param(3);[/font][color=#70AD47][font="]声明检测到的碰撞球[/font][/color][/align][align=left][font="] [/font][/align][align=left][font="]int collisionsphere = getrank(thissphere);//[/font][color=#70AD47][font="]判断AGV是前端触碰还是后端触碰[/font][/color][/align][align=left][font="]if(collisionsphere ==1&&getlabel(thisobject,"test times")==0)//[/font][color=#70AD47][font="]满足前端碰撞且碰撞检测次数为0[/font][/color][/align][align=left][font="]{[/font][/align][align=left][font="]       setlabel(thisobject,"testtimes",1);//[/font][color=#70AD47][font="]检测次数设置为1,这里的设置是避免两AGV在一次碰撞中被检测多次,出现多次避碰任务[/font][/color][/align][align=left][font="]       treenodets = createemptytasksequence(thisobject,0,1);//[/font][color=#70AD47][font="]若是前端碰撞,创建避碰任务序列[/font][/color][/align][align=left][font="]       inserttask(ts,TASKTYPE_TRAVELRELATIVE,NULL,NULL,0,2,0,0);//[/font][color=#70AD47][font="]上移2米[/font][/color][/align][align=left][font="]       inserttask(ts,TASKTYPE_DELAY,NULL,NULL,5,STATE_BLOCKED);//[/font][color=#70AD47][font="]等待5秒[/font][/color][/align][align=left][font="]       inserttask(ts,TASKTYPE_TRAVELRELATIVE,NULL,NULL,0,-2,0,0);//[/font][color=#70AD47][font="]下移2米回归路线[/font][/color][/align][align=left][font="]       dispatchtasksequence(ts);[/font][/align][align=left][font="]}[/font][/align][align=left][font="]else if(collisionsphere ==2&&getlabel(thisobject,"test times")==0)//[/font][color=#70AD47][font="]满足后端碰撞且碰撞检测次数为0[/font][/color][/align][align=left][font="]{[/font][/align][align=left][font="]       setlabel(thisobject,"testtimes",1);//[/font][color=#70AD47][font="]检测次数设置为1,这里的设置是避免两AGV在一次碰撞中被检测多次,出现多次避碰任务[/font][/color][/align][align=left][font="]       treenodets = createemptytasksequence(thisobject,0,1);//[/font][color=#70AD47][font="]若是后端碰撞,创建避碰任务序列[/font][/color][/align][align=left][font="]       inserttask(ts,TASKTYPE_DELAY,NULL, NULL, 2, STATE_BLOCKED);//[/font][color=#70AD47][font="]等待2秒[/font][/color][/align][align=left][font="]       dispatchtasksequence(ts);[/font][/align][align=left][font="]}[/font][/align][align=left][font="]senddelayedmessage(thisobject,2,thisobject,1);//[/font][color=#70AD47][font="]避碰结束后的消息触发,检测次数的标签值回归为0[/font][/color][/align][align=left][font="] [/font][/align][align=left][color=#70AD47][font="]避碰结束后在AGV 的消息触发中使test_times的标签值回复为0,等待下一次避碰。[/font][/color][/align][align=left][color=#70AD47][font="]/**[/font][/color][color=#70AD47][font="]避碰结束后检测次数调为0*/[/font][/color][/align][align=left][font="]Object current = ownerobject(c);[/font][/align][align=left][font="] [/font][/align][align=left][font="] [/font][/align][align=left][font="]if(msgparam(1)==1)//[/font][color=#70AD47][font="]避碰结束后检测次数调为0[/font][/color][/align][align=left][font="]{[/font][/align][align=left][font="]       setlabel(current,"testtimes",0);[/font][/align][align=left][font="]}[/font][/align][font="][size=10.5pt]另一台AGV进行相同的编辑。这个模型演示了任务执行器设置避碰的一般逻辑,更多的避碰方式需要在避碰处理中设置相应的逻辑。[/size][/font]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

主题

0

回帖

634

积分

中级会员

积分
634
发表于 2018-4-28 10:50:13 | 显示全部楼层
谢谢分享啊

主题

0

回帖

63

积分

注册会员

积分
63
发表于 2018-4-30 09:01:25 | 显示全部楼层
這個很實用:)超讚

主题

0

回帖

214

积分

注册会员

积分
214
 楼主| 发表于 2018-5-2 09:19:03 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=24793&ptid=7289][color=#999999]cmc 发表于 2018-4-30 09:01[/color][/url][/size]
這個很實用超讚[/quote]

:lol

主题

0

回帖

250

积分

注册会员

积分
250
发表于 2019-2-22 10:06:22 | 显示全部楼层
给力!谢谢

主题

0

回帖

939

积分

中级会员

积分
939
发表于 2019-2-22 17:25:04 | 显示全部楼层
很好的学习资料,果断拿走

主题

0

回帖

33

积分

新手上路

积分
33
发表于 2019-3-5 14:41:58 | 显示全部楼层
厉害了

主题

0

回帖

39

积分

新手上路

积分
39
发表于 2019-4-12 08:58:37 | 显示全部楼层
谢谢分享

主题

0

回帖

205

积分

注册会员

积分
205
发表于 2019-12-24 15:02:53 | 显示全部楼层
这段代码复制进去一直报错,未声明

主题

0

回帖

17

积分

新手上路

积分
17
发表于 2020-4-24 11:54:31 | 显示全部楼层
刚照着楼主的帖子,做了一遍,当小车跑了2个来回后就乱掉了,是为什么呢?请高人指点

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|京ICP备14043114号-2

在本版发帖
关注公众号
QQ客服返回顶部