机器人技能学习-robosuite-0-入门介绍

文章目录

  • 前言
  • 模块介绍
  • 实战
    • 案例1:从 `demo` 中创建自己的 `env`
    • 案例2:更换属于自己的物体

前言

资料太少、资料太少、资料太少,重要的事说三边,想根据自己实际场景自定义下机器人,结果发现无路可走,鉴于缺少参考文献,现在这里记录下,主要内容为官网信息,如有不合适的地方,望留言

模块介绍

结构很清晰,就是不会,以下是整体的框架图:
在这里插入图片描述
仿真模型三要素

要素数量解释备注
机器人模型一个或多个包含夹具及机器人上的附属物
物体模型0个或多个能操作的目标物
Arena有且仅有一个机器人工作场景,包含桌子等

关键组件解释:

组件作用备注
Robots实际动作者
Controls解析相关指令转换成低层次语言传给物理引擎会影响robot的运动学分量
Sensors从MjSim对象中检索信息,并将观测结果生成机器人接受的物理信号

实战

案例1:从 demo 中创建自己的 env

目的:将系统案例中的 Lift 剥离出来,形成自己的环境 MyLiftEnv,并能在 ALL_ENVIRONMENTS 中找到该场景类。

  1. 将系统中的 Lift.py 复制到 robosuite_learn/demos/envs/MyLIftEnv.py,从此, MyLiftEnv 场景就是专属自己的,可以在里面尽情更改;
  2. 修改 robosuite/robosuite/__init__.py,添加代码:
import sys
sys.path.append("robosuite_learn/demos/envs/") # Manipulation environments
from robosuite.environments.manipulation.lift import Lift
# from robosuite.environments.manipulation.myEnv import MyEnv
from MyLiftEnv import MyLiftEnv
  1. main 函数中更改引入的环境名,即可调用
    options["env_name"] = 'MyLiftEnv' # 'MyLiftEnv' # choose_environment()robots_index = ['UR5e'] # ['Sawyer', 'Panda', 'Jaco','Kinova3','IIWA','UR5e']options["robots"] = robots_index[i] # choose_robots(exclude_bimanual=True)# Choose controllercontroller_name = 'OSC_POSE' # choose_controller()# Load the desired controlleroptions["controller_configs"] = load_controller_config(default_controller=controller_name)# initialize the taskenv = suite.make(**options,has_renderer=True,has_offscreen_renderer=False,ignore_done=True,use_camera_obs=False,control_freq=20,)env.reset()env.viewer.set_camera(camera_id=0)

案例2:更换属于自己的物体

描述:将物体改成自己的数据,并手动控制机器人实现装配工作
物体描述:

<mujoco model="refrigerator-box"><asset><texture file="../textures/blue-wood.png" type="cube" name="steel-metal"/><material name="smetal" reflectance="1.0" shininess="1.0" specular="1.0" texrepeat="1 1" texture="steel-metal" texuniform="true"/></asset><worldbody><body><body name="object"><geom pos=" 0.02 0 0.0" size="0.002 0.04 0.04" type="box" solimp="0.998 0.998 0.001" solref="0.02 1" density="100" friction="0.95 0.3 0.1" group="0" condim="4" material="smetal" /><geom pos="-0.02 0 0.0" size="0.002 0.04 0.04" type="box" solimp="0.998 0.998 0.001" solref="0.02 1" density="100" friction="0.95 0.3 0.1" group="0" condim="4" material="smetal" /><geom pos="0 -0.04 0.0" size="0.02 0.002 0.04" type="box" solimp="0.998 0.998 0.001" solref="0.02 1" density="100" friction="0.95 0.3 0.1" group="0" condim="4" material="smetal" /><geom pos="0 0.04 0.0"  size="0.02 0.002 0.04" type="box" solimp="0.998 0.998 0.001" solref="0.02 1" density="100" friction="0.95 0.3 0.1" group="0" condim="4" material="smetal" /><geom pos="0 0 -0.0399"  size="0.02 0.04 0.002" type="box" solimp="0.998 0.998 0.001" solref="0.02 1" density="100" friction="0.95 0.3 0.1" group="0" condim="4" material="smetal" /></body><site rgba="0 0 0 0" size="0.005" pos="0 0 -0.1105" name="bottom_site"/><site rgba="0 0 0 0" size="0.005" pos="0 0 0.1105" name="top_site"/><site rgba="0 0 0 0" size="0.005" pos="0.0865 0.1005 0" name="horizontal_radius_site"/></body></worldbody>
</mujoco>
<mujoco model="refrigerator-drawer"><asset><mesh file="meshes/refrigerator-drawer.STL" name="refrigerator-drawer" scale="0.0012 0.0012 0.0012"/><!-- <mesh file="meshes/refrigerator-box.STL" name="refrigerator-box" scale="0.002 0.002 0.002"/> --></asset><worldbody><body><body name="object"><geom pos="0.0 -0.1 0.01" mesh="refrigerator-drawer" type="mesh" solimp="0.998 0.998 0.001" solref="0.001 1" density="1000" friction="0.95 0.3 0.1" group="0" condim="4" rgba="0.13 0.13 0.13 1"/><!-- <geom pos="0.0 0.1 0.01" mesh="refrigerator-box" type="mesh" solimp="0.998 0.998 0.001" solref="0.001 1" density="1000" friction="0.95 0.3 0.1" group="0" condim="4" rgba="0.13 0.13 0.13 1"/> --></body><site rgba="0 0 0 0" size="0.005" pos="0 0 -0.1105" name="bottom_site"/><site rgba="0 0 0 0" size="0.005" pos="0 0 0.1105" name="top_site"/><site rgba="0 0 0 0" size="0.005" pos="0.0865 0.1005 0" name="horizontal_radius_site"/></body></worldbody>
</mujoco>

同时在场景中,也把当前的物体导入即可。
效果展示如下图:

BUG1:曾经出现的问题
在进行手动装配的时候,出现drawer 无法塞入box 的空间中的现象,如下图所示,初步怀疑,对于 box 的描述不充分,导致无法体现空洞的表征;
在这里插入图片描述
问题探讨,从官方提供的demo 数据中找到一个类似的场景,把其中一个件插入到另外一个件中:
在这里插入图片描述
于是,找到相关 xml 模型,并进行交叉测试:

从测试情况可以看出,圆环之所以能插入到柱子中,是因为圆环是由**多个基础几何元素组合**得到的 重新修改装配体物体的描述,在这里,之需要更换 `box` 即可:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/334158.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络协议与攻击模拟_01winshark工具简介

一、TCP/IP协议簇 网络接口层&#xff08;没有特定的协议&#xff09; 物理层&#xff1a;PPPOE宽带拨号&#xff08;应用场景&#xff1a;宽带拨号&#xff0c;运营商切网过来没有固定IP就需要拨号&#xff0c;家庭带宽一般都采用的是拨号方式&#xff09;数据链路层网络层…

【办公自动化】Window电脑如何设置定时任务计划

在Windows系统中&#xff0c;我们可以使用任务计划程序来创建和管理定时任务。任务计划程序是Windows操作系统自带的一个功能&#xff0c;可以帮助我们自动执行一些重复性的任务&#xff0c;例如备份文件、更新软件等。 一、打开任务计划程序 首先&#xff0c;我们需要打开任…

Linux安装JDK和Maven并配置环境变量

文章目录 一、安装JDK并配置环境变量二、安装maven并配置环境变量 一、安装JDK并配置环境变量 将JDK的安装包上传到Linux系统的usr/local目录 使用xftp上传文件 解压JDK的压缩包 xshell连接到云主机 [roottheo ~]# cd /usr/local[roottheo local]# ls aegis apache-tomcat-…

LitJson-Json字符串转对像时:整型与字符串或字符串转:整型进的类型不一致的处理

目录 问题描述上代码测试代码各位看官&#xff0c;打赏个1元吧 Json数据格式是大家在游戏开中常量用的一种数据格式&#xff0c;某种程度上可以说是必备的。对unity开发来说&#xff0c;LitJson这个json库应该是被使用最多的json库了。 问题描述 今天说要的其中的这个api: Jso…

【精通C语言】:深入解析for循环,从基础到进阶应用

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; C语言详解 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、for循环基础1.1 语法1.2 示例1.3 流程图1.4 for与while的对比 二、for循环进阶2.1 fo…

outlook邮件群发单显技巧?群发怎么单显?

outlook邮件群发单显如何设置&#xff1f;QQ邮箱怎么群发单显&#xff1f; 在群发邮件时&#xff0c;如何让每个收件人只看到自己的名字&#xff0c;而不是其他人的名字&#xff0c;这就涉及到所谓的“单显”技巧。下面蜂邮EDM就为大家揭秘Outlook邮件群发单显的奥秘。 outlo…

PR如何在一个视频里添加多个画面?多窗口画中画PR模板视频素材

Premiere Pro 2021模板&#xff0c;多窗口布局&#xff0c;多画面组合&#xff0c;小窗口视频&#xff0c;画中画视频效果制作素材PR模板mogrt文件。 4K、HD可调整到任何分辨率。 100多窗口布局样式。 来自PR模板网&#xff1a;https://prmuban.com/37059.html

kubernetes RBAC Authentication 详解

开头语 写在前面&#xff1a;如有问题&#xff0c;以你为准&#xff0c; 目前24年应届生&#xff0c;各位大佬轻喷&#xff0c;部分资料与图片来自网络 内容较长&#xff0c;页面右上角目录方便跳转 Kubernetes 安全架构 K8S安全控制框架主要由下面3个阶段进行控制&#xf…

Redis底层原理

持久化 Redis虽然是个内存数据库,但是Redis支持RDB和AOF两种持久化机制,将数据写往磁盘,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。 RDB RDB持久化是把当前进程数据生成快照保存到硬盘的过程。所谓内存快照,就是…

Ceph源码分析-使用VScode调试ceph-osd教程

本篇内容全部都是干货&#xff0c;请先收藏&#xff0c;以免后期找不到哦。 前言&#xff1a; 本文以ceph osd部分为例&#xff0c;为您演示通过第三方社区提供的vscode 编辑软件&#xff0c;对ceph osd进行进行图形化单步调试以及配置操作。 Step1. 下载安装windows的vscode…

Linux第21步_取消鼠标中键的复制粘贴功能

在ubuntu18.04操作系统中&#xff0c;选中文本后&#xff0c;若按下鼠标中键&#xff0c;就可以执行复制粘贴&#xff0c;相当于 CtrlshiftC 后又按了 CtrlshiftV。在Linux系统中&#xff0c;基本上都是这么配置的。在windows系统中&#xff0c;我们习惯用Ctrl-C复制&#xff0…

一文6个步骤带你实现接口测试入门

一、接口测试概述 1 什么是接口测试&#xff1a; 接口测试是测试系统组件间交互的一种测试。接口测试主要用于检测外部系统与系统之间&#xff0c;内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依…