全球FlexSim系统仿真中文论坛

搜索
查看: 15145|回复: 15
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
Yumaotuo 发表于 2018-4-28 09:20:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个模型可以解决AGV系统中的避碰方式的选择问题,当AGV在路径中检测到碰撞,会采取什么样的逻辑来避开碰撞。

1、模型描述

避碰方式有很多种,这里分享一个解决巷道式车间里AGV碰撞时选择偏移避让的案例:巷道内只有一条AGV路径,当两台AGV在巷道内发生对向碰撞时,其中一台AGV向路径一侧偏移一定距离,待另一台AGV离开之后再回到路径上继续行进。(控制区域可以很好的解决交叉路径的避碰控制,但是一条路径上的对向碰撞使用控制区域将会造成死锁)

2、模型布置

3、实现过程

碰撞下拉列表


勾选检测碰撞并且设置碰撞检测时间间隔,在AGV两端绘制半径为0.5m的碰撞球,选择模型中检测避碰的另一台AGV,最后编辑避碰逻辑。

碰撞逻辑

这个案例里需要AGV每0.1秒检测一次碰撞,容易出现在一次避碰过程中出现多次检测,从而一次避碰中执行多次避碰逻辑。我们先给AGV添加一个test-times的标签赋初始值为0。

在碰撞处理触发器写入避碰逻辑
/**避碰逻辑*/
Object thisobject = ownerobject(c);//声明当前实体
Object otherobject = param(1);//声明检测到碰撞的实体
treenode thissphere = param(2);//声明当前碰撞球
treenode othersphere = param(3);声明检测到的碰撞球
int collisionsphere = getrank(thissphere);//判断AGV是前端触碰还是后端触碰
if(collisionsphere ==1&&getlabel(thisobject,"test times")==0)//满足前端碰撞且碰撞检测次数为0
{
       setlabel(thisobject,"testtimes",1);//检测次数设置为1,这里的设置是避免两AGV在一次碰撞中被检测多次,出现多次避碰任务
       treenodets = createemptytasksequence(thisobject,0,1);//若是前端碰撞,创建避碰任务序列
       inserttask(ts,TASKTYPE_TRAVELRELATIVE,NULL,NULL,0,2,0,0);//上移2米
       inserttask(ts,TASKTYPE_DELAY,NULL,NULL,5,STATE_BLOCKED);//等待5秒
       inserttask(ts,TASKTYPE_TRAVELRELATIVE,NULL,NULL,0,-2,0,0);//下移2米回归路线
       dispatchtasksequence(ts);
}
else if(collisionsphere ==2&&getlabel(thisobject,"test times")==0)//满足后端碰撞且碰撞检测次数为0
{
       setlabel(thisobject,"testtimes",1);//检测次数设置为1,这里的设置是避免两AGV在一次碰撞中被检测多次,出现多次避碰任务
       treenodets = createemptytasksequence(thisobject,0,1);//若是后端碰撞,创建避碰任务序列
       inserttask(ts,TASKTYPE_DELAY,NULL, NULL, 2, STATE_BLOCKED);//等待2秒
       dispatchtasksequence(ts);
}
senddelayedmessage(thisobject,2,thisobject,1);//避碰结束后的消息触发,检测次数的标签值回归为0
避碰结束后在AGV 的消息触发中使test_times的标签值回复为0,等待下一次避碰。
/**避碰结束后检测次数调为0*/
Object current = ownerobject(c);
if(msgparam(1)==1)//避碰结束后检测次数调为0
{
       setlabel(current,"testtimes",0);
}
另一台AGV进行相同的编辑。这个模型演示了任务执行器设置避碰的一般逻辑,更多的避碰方式需要在避碰处理中设置相应的逻辑。

本帖子中包含更多资源

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

x

评分

参与人数 1威望 +10 收起 理由
非凡 + 10 很给力!

查看全部评分

2#
非凡 发表于 2018-4-28 10:50:13 | 只看该作者
谢谢分享啊
3#
cmc 发表于 2018-4-30 09:01:25 | 只看该作者
這個很實用超讚
4#
 楼主| Yumaotuo 发表于 2018-5-2 09:19:03 | 只看该作者
cmc 发表于 2018-4-30 09:01
這個很實用超讚

点评

厉害了  发表于 2018-5-7 10:40
6#
zjj0605 发表于 2019-2-22 17:25:04 | 只看该作者
很好的学习资料,果断拿走
9#
lnspriation 发表于 2019-12-24 15:02:53 | 只看该作者
这段代码复制进去一直报错,未声明
10#
飞飞 发表于 2020-4-24 11:54:31 | 只看该作者
刚照着楼主的帖子,做了一遍,当小车跑了2个来回后就乱掉了,是为什么呢?请高人指点

本帖子中包含更多资源

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

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

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2024-5-3 16:39 , Processed in 0.076500 second(s), 18 queries .

Powered by Discuz! X3.3© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表