2024-12-27 15:18:10
勇哥注:机器人反向动力学,可以取坐标空间中的某个点位,而让机器人的每个关节反向求解出要动多少个单位。这样你的机器人就不用为了到达某个位置,而依次运动每个关节。之前我们只能使用关节动画来模拟机器人的动作,或者使用unity的约束来模拟。现在game4automation的机器人反向动力学就可以做到完全真实的模拟点位运动(PTP运动)。下图演示了反向动力学走点位的效果:演示模型和预制件使用我们的专用演...
2024-12-19 14:08:59
勇哥注:modbus通讯协议本身是可靠的,不然也不会发明起至今快50年了,还在自动化行业中广泛使用。然而当应用各种第三方modbus组件编程的时候,由于组件的实现者、组件的应用者没有遵循标准来实现和应用,就会造成各种通讯异常。这就有点像一台pc机,硬件厂商能保证自己的硬件没有问题,然而架不住使用者乱装软件,最终还是可能会死机蓝屏。使用modbus组件的使用者想怎么用就怎么用,没有章法,这是此问题的...
2024-12-18 21:15:55
勇哥注:下面是一个综合的例子,通过一个杜撰的设备,演示了gam4automation的能力。为了完成这个例子,还需要配合一些自定义脚本,以及做为上位机的C#程序。完整的设备见下图:设备是一个分拣设备。上下料的轴有x, z轴。分拣的轴是u轴。这个例子勇哥只是弄了个简单的示意场景,并没有导入cad图纸。仿真这边实现了下面的功能:(1)传送带(2)x, z, u轴(3)工位上的双控气缸(4)吸嘴上的真空...
2024-12-18 09:06:22
勇哥注:让设备回到播放前的状态,这个需求很重要。不然我们想从头来进行测试,就只能重新播放了。我们从下面几个方面来进行:(一)删除所有的mu目的是把物料全部清空,就像我们从设备里人工取走一样。Source组件中有两个属性:Generate MU, Delete All MU。前者在每创建一个mu的复制品的时候,就会给个信号。后者勾选后则可以删除所有mu的复制品。(二)重新加载场景如果记录场景状态,...
2024-12-17 15:13:38
一般来说,我们都是使用Drive组件的 Jog Forward和Jog Backward来做Jog运动。我们会使用Drive_Destination Motor组件来做ptp点位运动。但是这两都同时有效的时候,你会发现手工打勾Jog Forward和Jog Backward就没有效果了。这是因为此时运动被Drive_Destination Motor组件接管了。怎么让这两者(ptp和jog)可以共...
2024-12-17 11:46:55
Drive_Destination Motor组件是我们实现ptp运动的主要方式。现在有一个需求是必须运动中响应停止,以及继续。然而你是不是发现Drive_Destination Motor组件没有停止?如果你想通过Start Drive为false来停止,这个是不行的。如果你想通过Drive组件的Stop Drive来停止,会发现也根本停不下来。怎么办呢?正确的方式是先Drive_Destina...
2024-12-13 09:24:57
一般来说,当你在unity中编辑模式下点,在内部赋值与外部赋值状态之间的切换,这个设置会记录下来。但是有时候会发现,在播放的时候状态又自动切换为下图的状态(内部赋值状态),结果就是外部通讯无法控制这个通讯变量了。怎么办呢?解决的办法很简单!复制一个正常的通讯变量,改下名字设置好参数就行了。这种情况应该是game4automation的一个bug。...
2024-12-09 16:50:58
SensorBeam是由一个3D游戏对象加感应器组件构成的组合对象。Sensor则只是一个感应器组件。SensorBeam如果有效,像下图所示的Status会在碰到mu对象后有反应。这个对象有个问题,就是只对mu对象有反应。如果我们用它来构建原点和限位感应器,就不适合。换成game4automation的场景中,你得把MU对象放到g4a MU层,而SensorBeam放在g4a Sensor层。这...
2024-12-09 08:33:20
勇哥注:unity中的2d物理效果基于开源的Box2D引擎,3d物理效果基于Nvidia PhysX,包括几个关键组件:Rigidbody(刚体),Collider(碰撞器),关节(Joints)我们只对3d物理效果有兴趣。见图1:场景中4个对象(先不算斜面上的cube)。球体添加了RigidbodyCube有一个BoxCollider。两个平面都添加了Mesh Collider。播放后我们见到下...
2024-12-06 16:49:12
game4automation的层级面板中,通讯接口相关有丰富的控制功能。下面讨论一下它们的控制图标的意义。(一)图1的疑问(图1)(1)为啥有些值的显示写着False,而有些显示的是(False)。False这种没括号的,注意它的属性中,关联到了一个流对象上面,因此Behavior列表中有内容。(False) 这一种则Behavior列表中没有关联游戏对象。(2)为啥有项目显示是蓝色的并且后面有...
2024-12-05 15:18:29
目前,市面上对非标自动化设备制造的需求有相关性的,并且有流行度的软件主要是下面几款。(一)IOA数字孪生软件此国产软件主要采用拼积木方式构建实验场景。主要用于学习实验性质。 它虽然可以导入solidworks的模型,但是模型的准备工作操作复杂,只适合单独机构零件的模拟动作,不适合整机运动模拟。 只能配合plc进行仿真。 官网: www.ioaol.com参考视频 :https://www.b...
2024-12-04 16:52:27
今天unity播放时看到出现了这个提示。它不是错误,仅是个提示,但是不停的刷消息,比较烦。网上查了一下,意思如下:当前场景中有4个音频监听器(Audio Listener),而Unity引擎要求每个场景中只能有一个音频监听器。在相机属性中,果然有个Audio Listener。关闭,只留下一个即可。...
2024-12-04 14:28:20
Drive IO's的这几个参数,勇哥发现其实有妙用。(1)Jog Forward/Jog Backward 前后运动这两个我们在播放时,可以用于测试轴向前、向后运动。但其实,它可以用来做jog运动的!那个Target Speed 正好做为jog运动的速度参数。使用的时候,我们弄几个PLC Output对应Jog Forward和Jog Backward,在代码中收到信号后就对Jog F...
2024-12-03 21:47:35
讨论下面几个问题:(一)为啥在编辑模式下灯也会闪烁 即使不播放,在场景编辑模式下,灯也会闪烁。 这个原因见下的贴子: unity中不播放,仅在编辑模式下也能执行脚本的方法 http://www.skcircle.com/?id=2589 如果想让灯被外部控制,不要自己闪烁,需要关闭Flashing(自动闪烁)和Lamp On。(二)为啥黄灯缺省是这种绿色,这样黄灯没点亮时,...
2024-12-03 11:20:22
讨论几个问题:(一)Sensor到底要不要配Sensor_Standard?Sensor自己也有一个Sensor Occupied,可以指定一个PLC Input。Sensor_Standard也有一个Occupied,用以指定一个PLC Input。勇哥经过实现,发现两个地方都有效果。也就是说,你可以不用Sensor_Standard。(二)为啥Sensor感应到变红了,但是PLC Input看...
2024-12-03 09:48:13
勇哥注:在game4automation中,创建modbus接口时,会出现下图所示蓝色标记的预设体内容。如果你想把蓝色的项止移动到一个空对象的下面,会有个报错那么我们怎么取消预制体与空对象的关联呢?在Hierarchy视图下,选择预制体的根对象,鼠标右键,Prefab-->Unpack Completely。注意如果你选择子对象,则Prefab下面不会出现Unpack Completely已...
2024-12-02 15:25:23
勇哥注:这节说下输入按钮的组件Interact 3D,以及丝印文字怎么弄。下面是4个常见的按钮:启动、停止、复位、急停按下后(需要去Game窗口按),Mouse Down和On会打勾。松开鼠标后,它们取消打勾。默认就是不勾选Switch属性,这个时候就是点动按钮状态。下面是Interact 3D的属性。Switch 如果不勾则是点动按钮,如果勾了就是开关按钮(状态保持按钮)Mouse Down...
2024-11-29 21:27:13
勇哥注:game4automatic的Lamp灯,居然不在播放的时候,也会有一闪一闪的效果。显示,它在编辑器的状态也在执行中。这是怎么做到的?在Unity中,有几种方法可以让脚本在未播放场景时运行:(1)使用ExecuteInEditMode属性:在脚本的类定义前添加[ExecuteInEditMode]属性,可以使脚本在Unity编辑器中运行,而不需要播放场景。例如:using Unity...
2024-11-29 11:14:42
下图中的cube的轴心默认是在mesh的中心的。而我们希望它在底边的中心位置。直接改是没办法的。但是可以变通一下,方法是,先创建一个空对象,把这个空对象的轴心放到我们希望的位置。然后把cube做为它的子对象。接下来我们控制这个空对象就可以了。现在我们我们就可以旋转这个空对象,其轴心就是我们想要的。...
2024-11-29 07:54:09
在unity中,我们知道项目名字,也知道它保存在哪里。但是如果你想知道你当前的场景scene保存在assert的哪个目录,可能就麻烦了吧。你从标题栏是不可能知道这个信息的。我们一般习惯在asserts的根目录中创建场景目录。这样asserts下就好多的目录了。解决办法:首先你把当前场景保存。然后在菜单“Open Recent Scene”的历史列表中,第一行就可以看到你场景的文件名,及目录名。(下...
2024-11-28 21:28:42
勇哥注:Drive_Speed就是以恒定的速度持续运动。如果想停止,需要把Target Speed改为0。如果想改变运动方向,需要把Target Speed改为负值。Drive_Speed运动方式,就是我们调机时用的jog运动。在触摸屏上,jog运动的按钮按住不放就持续运动,松开就停止。jog运动适合轴位置的粗调,然后精调就是使用ptp运动了。下面是Drive_Speed运动的参数。由于比较简单,...
2024-11-28 21:16:34
勇哥注:Drive_Gear字面上叫齿轮运动。其实你可以认为它就是龙门运动,一个主驱动器运动时,另一个驱动器做同步跟随运动。axis4做为副驱动器,添加了drive和drive_Gear。axis3做为主驱动器,只用添加drive。当然你也可以添加其它的运动方式。不管是什么方式,副驱动器都会同步进行。运行的时候,让主驱动器动起来就可以了。如果你让副驱动器运动起来,结果就是两个都不会动。...
2024-11-28 17:12:43
勇哥注:Drive_DestinationMotor直译就是“目标运动”,其实其效果就是运动卡的ptp(点到点运动)而且是走的绝对位置的ptp运动。参数解释:Speed 是起始速度Target Speed 是最高速度,就是均匀段的速度。Acceleration 是加速度,没有减速度,但是估计减速度等于加速度。Is At Positon 实时位置,可以理解为编码器反馈值Is At S...
2024-11-28 16:08:38
勇哥注:Drive_Continous Destination有点像随时可以改变目标位置、速度的运动方式。你一但修改Destination(目标位置)就会立刻动起来,如果中途你重新修改Destination也可以,立刻向新目标运动。Acceleration(加速度)和Target Speed(目标速度)也一样可以中途随时修改。这一种方式也适合做运动控制卡类似的ptp(点位运动),因为它已经带有加速...
2024-11-28 16:00:48
勇哥注:此方式非常适合模拟脉冲型运动卡的运动方式,运动卡是以一定的频率持续向伺服或者步进驱动器发送脉冲。而且它还可以指定减速比。效果如下图所示:这个动图显示有点问题。其操作实际上是:鼠标按住Value的值左右拖动,就可以连续改变其值。轴就会连续运动。这个值关联到Drive_Follow Position的Position属性上面的。下面的测试场景。Axis1添加了Drive_Follow Posi...
2024-11-28 15:18:56
勇哥注:Drive Cylinder是类似气缸动作的方式,可以用来模拟出真实的气缸、电缸效果。如下图所示:这是常见的单控气缸,一个触发IO,两个磁性感应器,一个是动点感应,一个是原点感应。动点指的是气缸伸出去的最大位置,原点是指气缸缩回来的最小位置。另外还有一种双控气缸,它有两个触发IO,两个磁性感应器。这一种也可以模拟。(图1)(一)项目构建如图1所示,我们要构建两个感应器sensor,两个PL...
2024-11-27 20:46:12
勇哥注:modbus是主从模式(master/slave)。以服务端/客户端来做比喻的话,slave就是服务端,master就是客户端。game4automation支持modbus接口。但是只支持做从站,即做Slave端,而不是做Master端。并且modbus缺省会使用本机IP, 端口号固定502不能修改。添加方式如下图所示:(图1)下图是添加好的Modbus接口。Is Connected...
2024-11-26 16:19:34
kinematic组件的作用比较难懂。我们只用抓住它的两个核心能力:一是将已定义组(由Group Script组件定义的)中的零件集成到此 Kinematic 零部件中二是可以移动或者旋转kinematic零部件的轴心点(一)将已定义组(由Group Script组件定义的)中的零件集成到此 Kinematic 零部件中这样说其实可能你还是不能明白是啥意思。勇哥用下面的示例来说明:下面的场景是一个...
2024-11-26 09:09:47
从2023版本以后,版本命名又变成非年月日了,现在最新的被命名为unity 6。版本命名怎么变来变去~~见下图:unity6启动界面是下面这样的:启动更慢了。。。。...
2024-11-25 21:29:13
(一)Measure Raycast组件Measure Raycast组件,用来检测射线到碰撞体之间的距离。如果碰到则输出Hit状态。同时可以把测量结果连接到PLCInput信号,这样Measure Raycast就能当感应器来用。如下图所示:手动移动Measure Raycast,如果碰到了cube,则显示显示距离,以及Hit。层级面板结构如下:Cube必须添加Box Collider。Meas...