在unity中实现机械臂的仿真操作的方法
来源:互联网 发布:淘宝专业版一个月50 编辑:程序博客网 时间:2024/05/16 00:59
最近需要在项目中用unity3D实现一个多自由度机械臂的仿真,由于是仿真而不是做游戏,所以对位置、速度还有时间控制方面的要求比较严格,本文中机械臂的实现只涉及运动学而不考虑动力学等。
传统方法中实现机械臂可以采用hingejoint(铰链关节)来实现,铰链关节的具体方法详见unity脚本手册,用铰链关节有其局限性。
铰链关节是靠给关节一个力以及一个关节要达到的转动速度来进行转动,靠给定铰链转动的最大值与最小值来使关节停止转动,也可以给铰链一个反方向力使其速度达到0来实现停止转动的目的。为实现速度的瞬时变化,可以将铰链关节的质量属性(惯性属性)设置为0,则速度的变化可以瞬间达到。
虽然这样也可以实现类似机械臂中转动关节的效果,但是这只能进行粗略仿真,对要求速度实时变化可控,例如速度变化与正弦曲线类似的情况下,铰链关节就极为不方便了。
而且铰链关节相当于把两个物体固定在了一起,在某些情况下会发生我们不希望看到的结果。
下面给出我在项目中实现机械臂关节转动的方法。
一、机械臂联动
采用这种方式的结果大概就是这样,所有物体依次成父子关系排列。在hierarchy栏里排成一大长串。
可以直接在hierarchy栏中拖动,也可以在脚本中实现父子关系。
joint4.transform.parent=joint5.transform;
二、联体坐标变换
transform.localRotation = Quaternion.Euler(temp_angle[0], 0, 0);//例如我要这个空物体控制x轴方向的转动,那么我就在这个空物体中改变temp_angle[0]的值,如果我要让这个关节转60度,你可以让它在update里每次转1度,分60次转完,这样就实现了动画的效果,当然如果要控制具体的时间,还要采用其他方法。
同理,如果要控制绕当前y轴和z轴的转动只需要把temp_angle的位置换一下就好。
三、时间的控制
做仿真对时间的要求还是比较高的,最开始想用unity中的协程来做,但是后来发现用协程控制的时间不够精确,有一定误差,累积起来就无法忽视了。
于是采用了另一种方法,即把角度变化的代码放在FixedUpdate里执行,在设置里把时间间隔设成你需要的值,就可以控制物体角度等时间间隔变化了。
- 在unity中实现机械臂的仿真操作的方法
- 基于Mathematica的机器人仿真环境(机械臂篇)
- 基于 Mathematica 的机器人仿真环境(机械臂篇)
- 基于Mathematica的机器人仿真环境(机械臂篇)
- 机械臂建模与仿真(一):创建机械臂的urdf模型描述文件
- 在NC仿真中临时dump波形的方法
- 在Proteus中实现对ARM7电路的软硬件仿真
- C#在Unity中接口的实现
- 在Protel的机械层中如何加“机械孔”的问题
- Robotics ToolBox机械臂仿真
- 在VB环境中操作三维模型的实现方法
- 在VB环境中操作三维模型的实现方法
- 在unity中UUGI的一些使用和操作
- 在命令行中操作Unity的一些常用命令
- Unity中使用命令模式,实现撤销、回放的操作
- 最近在做关于机械臂的控制
- 在Unity中引用Dll的两种方法
- 在Unity中引用Dll的两种方法
- c,c++异常处理
- IAR STM32F10x_StdPeriph_Driver 3.4转3.6.1库
- Android下C/C++实现通用自启动守护实现
- Linux进程全解4——fork创建子进程
- 淘淘商城系列(三)图片服务器的搭建
- 在unity中实现机械臂的仿真操作的方法
- 文章标题
- C++Map的基本操作与使用
- android滑动删除listview
- struts2中ajax的使用
- 遮罩层内容半透明解决
- 统计一个数字在排序数组中出现的次数。
- dubbo的术语
- 暑假写题第三天