机器人技能学习-robosuite-0-入门介绍
文章目录
- 前言
- 模块介绍
- 实战
- 案例1:从 `demo` 中创建自己的 `env`
- 案例2:更换属于自己的物体
前言
资料太少、资料太少、资料太少,重要的事说三边,想根据自己实际场景自定义下机器人,结果发现无路可走,鉴于缺少参考文献,现在这里记录下,主要内容为官网信息,如有不合适的地方,望留言
模块介绍
结构很清晰,就是不会,以下是整体的框架图:
仿真模型三要素
要素 | 数量 | 解释 | 备注 |
---|---|---|---|
机器人模型 | 一个或多个 | 包含夹具及机器人上的附属物 | |
物体模型 | 0个或多个 | 能操作的目标物 | |
Arena | 有且仅有一个 | 机器人工作场景,包含桌子等 |
关键组件解释:
组件 | 作用 | 备注 |
---|---|---|
Robots | 实际动作者 | |
Controls | 解析相关指令转换成低层次语言传给物理引擎 | 会影响robot的运动学分量 |
Sensors | 从MjSim对象中检索信息,并将观测结果生成机器人接受的物理信号 |
实战
案例1:从 demo
中创建自己的 env
目的:将系统案例中的 Lift 剥离出来,形成自己的环境 MyLiftEnv,并能在 ALL_ENVIRONMENTS
中找到该场景类。
- 将系统中的
Lift.py
复制到robosuite_learn/demos/envs/MyLIftEnv.py
,从此,MyLiftEnv
场景就是专属自己的,可以在里面尽情更改; - 修改
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
- 在
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
模型,并进行交叉测试:
相关文章:

机器人技能学习-robosuite-0-入门介绍
文章目录 前言模块介绍实战案例1:从 demo 中创建自己的 env案例2:更换属于自己的物体 前言 资料太少、资料太少、资料太少,重要的事说三边,想根据自己实际场景自定义下机器人,结果发现无路可走,鉴于缺少参…...
【工具】tmux简单用法
tmux 是一个终端复用工具,允许你在单个终端窗口中运行多个终端会话,并在它们之间切换。它提供了分割窗格、多窗口和会话管理等功能,使得在终端中更加高效地工作。 以下是一些 tmux 的基本概念和简单应用: 会话 (Session): 一个 t…...
使用 C++/WinRT 的错误处理
本主题讨论了处理使用 C/WinRT 编程时出现的错误的策略。 更多常规信息和背景,请参阅错误和异常处理 (Modern C)。 避免捕获和抛出异常 建议继续编写异常安全代码,但最好尽量避免捕获和抛出异常。 如果没有异常处理程序,Windows 将自动生成错…...
计算机基础专升本笔记九-Windows7基础(一)Windows 7 介绍
计算机基础专升本笔记九-Windows7基础 一、Windows简介 Microsoft公司从1983年开始研制Windows系统,最初的研制目标是在MS-DOS的基础上提供一个多任务的图形用户界面。 1985年,第一个版本的Windows 1.0问世,它是一个具有图形用户界面的系…...
LeetCode1109. Corporate Flight Bookings
文章目录 一、题目二、题解 一、题目 There are n flights that are labeled from 1 to n. You are given an array of flight bookings bookings, where bookings[i] [firsti, lasti, seatsi] represents a booking for flights firsti through lasti (inclusive) with sea…...
视觉SLAM十四讲|【五】相机与IMU时间戳同步
视觉SLAM十四讲|【五】相机与IMU时间戳同步 相机成像方程 Z [ u v 1 ] [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] K P Z \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \…...
js null和undefined的区别
null和undefined在JavaScript中都表示“无”的概念,但它们在使用和含义上有一些重要的区别。 含义: null 是一个表示“无”的对象,当转换为数值时结果为0。 undefined 是一个表示“缺少值”的原始值,当转换为数值时结果为NaN。…...

Arduino| IDE下载、安装和设置以及开发板的连接
IDE下载、安装和设置以及开发板的连接 IDE下载IDE安装IDE设置首选项——设置语言、字体、主题、地址等等开发板管理器——添加开发板 开发板的连接 IDE下载 第一步:进入Arduino官网https://www.arduino.cc。 第二步:选择导航栏的Software,然…...

Linux之Ubuntu环境Jenkins部署前端项目
今天分享Ubuntu环境Jenkins部署前端vue项目 一、插件安装 1、前端项目依赖nodejs,需要安装相关插件 点击插件管理,输入node模糊查询 选择NodeJS安装 安装成功 2、配置nodejs 点击后进入 点击新增 NodeJS 配置脚手架类型:如果不填 默认npm …...
QT下的几种实现modbus的库,记录
QModbus QT提供了一个名为QModbus的模块,可以实现Modbus的主机或从机功能 pro需要添加 QT += serialbus serialport相关头文件 #include <QModbusTcpClient> #include <QModbusDataUnit> 具体使用参考: https://blog.csdn.net/XCJandLL/article/details/1…...

HarmonyOS4.0系统性深入开发18公共事件简介
公共事件简介 HarmonyOS通过CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。 公共事件从系统角度可分为:系统公共事件和自定义公共事件。 系统公共事件:CES内部定义的公共事…...

华为路由器OSPF动态链路路由协议配置
R1配置 interface GigabitEthernet0/0/0ip address 10.1.12.1 255.255.255.252 interface LoopBack0ip address 1.1.1.1 255.255.255.255 ospf 1 router-id 1.1.1.1 area 0.0.0.0 network 1.1.1.1 0.0.0.0 network 10.1.12.0 0.0.0.3 R2配置 interface GigabitEthernet0/0/0i…...

常用注解/代码解释(仅个人使用)
目录 第一章、代码解释①trim() 方法以及(Arrays.asList(str.split(reg)));②查询字典项②构建后端镜像shell命令解释 第二章、注解解释①PropertySource注解与Configurationproperties注解的区别 第三章、小知识①Linux系统中使用$符号表示变量 友情提醒: 先看文章目录&#…...

2024阿里云服务器ECS介绍_全方位解析_CPU性能详解
阿里云服务器ECS英文全程Elastic Compute Service,云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,阿里云提供多种云服务器ECS实例规格,如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等,阿里云百科aliyunbai…...
向伟人学习反焦虑,在逆境中崛起
第一、乐观的精神。 伟人在长期以来的读书、思考和实践,突破了思想认知限制,并最终在更高的思维层面上,建立起了强大的精神信念感。 在危险环境中表示绝望的人, 在黑暗中看不见光明的人, 只是懦夫与机会主义者。 —— …...

线上问题整理
JVM 案例 案例一:服务器内存不足,影响Java应用 问题: 收到报警,某Java应用集群中一台服务器可用内存不足,超过报警阈值。 排查过程: 首先,通过Hickwall查看该应用各项指标,发现无论…...

【elastic search】详解elastic search集群
目录 1.与集群有关的一些概念 2.集群搭建 3.集群搭建 4.kibana链接集群 5.选举流程 6.请求流程 7.master的作用 1.与集群有关的一些概念 数据分片: 数据分片(shard),单台服务器的存储容量是有限的,把一份数据…...

近红外光谱分析技术与基于深度学习的化学计量学方法
郁磊【副教授】:主要从事AI人工智能与大数据分析等相关研究,长期致力于人工智能与近红外生物医学工程等领域融合,主持并完成多项科研课题。著有《神经网络43个案例分析》等书籍。 // 讲座内容 1、近红外光谱基本理论、近红外光谱仪基本原理…...

Elasticsearch windows开箱即用【记录】
一、准备工作 安装ES之前要在本机安装好JDK,对应的兼容性见官网链接:https://www.elastic.co/cn/support/matrix ES官网链接:https://www.elastic.co/cn/, 我本机安装的是JDK8,测试使用的是7.3.0版本的ES和Kibana。 1、首先去…...
第 3 课 ROS 常用术语及命令说明
1.ROS文件系统的组成 ROS 文件是由 Packages 和 Manifests ( package.xml )组成。 Packages:功能包,是 ROS 软件中的基本单元,包含节点源码、配置文件、数据定义等。 Manifest( package xml &#x…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

Xcode 16 集成 cocoapods 报错
基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...

门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...