UnityVR-机械臂场景3-手爪

Posted 唐小墨同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UnityVR-机械臂场景3-手爪相关的知识,希望对你有一定的参考价值。

手爪是机械臂场景中较难的一部分,它涉及到了与抓取物体的碰撞和共同移动,以下的手爪脚本只考虑到了初步功能,在此基础上还可以做改进。

 1. 首先找到手爪的运动部分——两根手指,它们是控制开合的关键。将它们分别改名为fingerRed和fingerBlue,为了在脚本中容易描述。还可以分别用不同颜色来区别它们,也是为了制作过程的方便。

 2. 给两根手指小红和小蓝分别加上碰撞体,BoxCollider就行,并且调整两个Collider的位置和大小,只要在指尖较小的位置就可以(如下图所示,其实还可以更小)。它们是用来检测是否触碰到物体的。另外还需要将它们的IsTrigger都勾掉,我们不希望手爪一碰到物体就弹开。

  3. 在手爪的根节点上加一个Rigidbody(刚体),之后小红小蓝上的碰撞体需要用这个刚体来调用。还要把刚体的重力取消了,我们不希望手爪一开始就掉地上。

  

 4. 测试小红、小蓝从开爪到闭爪需要移动的方向和距离:分别点击小红和小蓝,查看它们的本地坐标。比如下图中,开爪和闭爪是沿着它们的Z轴方向移动,并且移动距离为0.15。

 

 5. 手爪脚本:

 第一段:声明变量

 第二段:初始化变量,这里使用了一个Slider控件来控制手爪的开闭,并且只考虑开和闭两种状态,不考虑中间状态。

 第三段:一个控制开爪和闭爪的函数,传递一个0或1的参数。这里已将手爪模型简化,它得到的命令不是开就是闭。

 第四段:使用碰撞检测,一旦检测到夹到物体,就让被夹物体成为手爪的子节点,跟随手爪一起移动。(物体必须有“Goods”标签才会被抓取)

 第五段:打开手爪且物体离开手爪时,让物体恢复重力,并且脱离和手爪的父子关系,可以从手爪掉落。

 拓展思考

1. 这里手爪只考虑了开、闭两种状态,如何用Slider控件控制手爪从开到闭的中间过渡状态

2. 如何实现手爪在闭合过程中,一旦碰到物体立刻停在物体表面的功能。

Unity和ROS通讯的机械臂

Unity和ROS之间的通讯包

目录

参考及引用

1. Github源码地址

①Unity和ROS之间的通讯

https://github.com/Unity-Technologies/Unity-Robotics-Hub 快速链接

②一个ROS包(用于接收从Unity场景发送的ROS消息)

https://github.com/Unity-Technologies/ROS-TCP-Endpoint 快速链接

③两个导入到Unity的包

a. 用于从ROS发送/接收消息的ROS TCP Connector和用于在Unity场景中添加传入和传出消息的可视化的Visualizations Package
https://github.com/Unity-Technologies/ROS-TCP-Connector 快速链接
b. 导入URDF到Unity(好像Unity自带,但重新本地导入了一遍)
https://github.com/Unity-Technologies/URDF-Importer快速链接

3. Unity文档关于本地文件导入到Unity

https://docs.unity3d.com/Manual/upm-ui-local.html快速链接

4. Plastichub网址

https://plastichub.unity.cn/unity-tech-cn/Unity-Robotics-Hub快速链接

————————————————————————————————————————————

一、两个Unity需要用到的包

1. 安装ROS-TCP-Connector包

采用本地路径添加的方法
https://github.com/Unity-Technologies/ROS-TCP-Connector快速链接
下载zip文件后解压缩到自己所放置的文件路径

新建一个项目,“Window” ——“Package Manager ” —— “+”—— “Add package from disk…”
然后,选择自己下载到的本地路径,找到package的JSON源文件,点击打开(添加)

在“Package Manager ”会看到添加成功,里面包括版本、路径等信息。

2. 安装URDF-Importer包

采用本地路径添加的方法
https://github.com/Unity-Technologies/URDF-Importer快速链接
下载zip文件后解压缩到自己所放置的文件路径
“Window” ——“Package Manager ” —— “+”—— “Add package from disk…”
然后,选择自己下载到的本地路径,找到package的JSON源文件,点击打开(添加)
方法同上。

二、Github源码上的教程

1. Pick-and-Place

网址:https://plastichub.unity.cn/unity-tech-cn/Unity-Robotics-Hub/src/branch/main…/tutorials/pick_and_place/README.md
快速链接
翻译:
ROS提供消息传递、包管理、底层设备控制和硬件抽象等服务。
Unity Robotics Hub能够支持导入URDF文件,并在ROS和Unity之间发送和接收消息。
本教程将介绍将ROS与Unity集成所需的步骤,从安装Unity编辑器到使用导入的URDF创建场景,到使用MoveIt轨迹规划完成带有已知姿势的拾取和放置任务。

2. Object Pose Estimation Demo

网址:https://github.com/Unity-Technologies/Robotics-Object-Pose-Estimation
快速链接

3. Articulations Robot Demo

网址:https://github.com/Unity-Technologies/articulations-robot-demo
快速链接

由于里面有详细的教程,因此按照教程跑一遍就可以了。这里只记录个人遇到的一些问题。

三、遇到的问题及解决办法

1. Unity版本问题

因为历程中用到了开源的机械臂模型,因此,要用合适的版本才能打开。

Unity 2020.3: 2020.3.10f1 or later
Unity 2021.1: 2021.1.8f1 or later
Unity 2021.2: 2021.2.a16 or later

2. Unity场景问题

一开始自己从头弄的一个场景一直走到Part 3,结果在最后,ROS不能实现对Unity机械臂的路径规划和抓取,终端出现报错

[ERROR] [1668429397.373772594]: RRTConnect: Unable to sample any valid states for goal tree

后来换了场景重新再走一遍历程才成功。
因此在Part 1里,导入了Projects以后
如图,得选择到该场景才适合接着进行。

3. 遇到下载Github源码时,有些文件为空的

解决办法可以根据教程进行补救,原教程很详细地说了。
我这里用了最直接的方法,把他们一个一个模块拆分下载再粘贴回去。
第一个:moveit_msgs
https://github.com/ros-planning/moveit_msgs快速链接

第二个:niryo_one_ros
https://github.com/NiryoRobotics/niryo_one_ros快速链接

第三个:ROS-TCP-Endpoint
https://github.com/Unity-Technologies/ROS-TCP-Endpoint快速链接

以上三个都是在Unity-Robotics-Hub/tutorials/pick_and_place/ROS/src/路径下

以上是关于UnityVR-机械臂场景3-手爪的主要内容,如果未能解决你的问题,请参考以下文章

Unity 2D Animation——2.IK反向动力学

unityVR关于Oculus如何连接unity编译器,无需打包就可以看到场景的教程

VR预览

VR预览

VR预览

Unity VR 自行实现的抓取功能包含激活物体上的重力