ManiSkill 2022机器学习顶会ICLR上的世界顶尖机械臂大赛赛题解读,演示轨迹转换,点云查看

news2024/11/15 19:45:48

1.赛事相关信息

  • 点击查看

2.赛题分析

  • 软体对GPU要求较高,环境配置复杂,选择刚体环境
  • 先以模仿学习/强化学习的刚体环境为基础,后期再考虑无限制刚体环境
  • 部分任务(如将物块移动到指定位置),存在相机之外的额外输入:目标位置,rgbd图像难以将其作为可视化输入(超出了相机范围),所以选择点云
  • 由于机械臂操作策略只关心末端执行器的运动,所以控制执行器做出动作,控制模式pd_ee_delta_pose,动作控制的是末端执行器的每一步运动

3.演示转换

3.1.演示重现

  • 使用maniskill2提供的脚本:可以交互查看不同相机拍摄的内容,赛题里面只能使用两个相机(手上相机hand_camera、机械臂斜上方的相机base_camera),视野范围都很小,并且存在遮挡:
python tools/replay_trajectory.py --traj-path demos/rigid_body_envs/PickCube-v0/PickCube-v0.h5 --vis

3.2.控制模式转换

  • 提供的演示示例需要进行控制模式的转换:使用maniskill2提供的脚本,10线程转换, i7-7700HQ CPU,大概五分钟,五分钟之内电脑卡的别的什么都干不了:
python tools/replay_trajectory.py --traj-path demos/rigid_body_envs/PickCube-v0/PickCube-v0.h5 \
  --save-traj --target-control-mode pd_ee_delta_pose  --num-procs 10

3.3.点云可视化

  • 使用matplotlib散点图可视化
import gym
import mani_skill2.envs
import numpy as np
import open3d as o3d
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D





#obs_mode = pointcloud, rgbd, state_dict, state
env = gym.make("PickCube-v0", obs_mode="pointcloud", control_mode="pd_ee_delta_pose")


env.seed(0)  
obs = env.reset()
done = False
fig = plt.figure()
i = 0
while not done:
    action = np.array([0.1,0.1,0.1,0,0,0,1])
    obs, reward, done, info = env.step(action)
    point = np.array(obs['pointcloud']['xyzw'])
    rgb = np.array(obs['pointcloud']['rgb'])
    print(point.shape)#(32768,4)
    print(rgb.shape)#(32768,3)

    
    i += 1
    if i == 10:
        ax = fig.add_subplot(projection='3d')

        #point_xyz = point[:,[0,1,2]]
        
        ax.scatter(point[:,[0]], point[:,[1]], point[:,[2]], zdir="z",facecolors=rgb/255, marker="o", s=40)
        #ax.scatter(xs, ys, zs=zs2, zdir="z", facecolors=rgb, marker="^", s=40)

        ax.set(xlabel="X", ylabel="Y", zlabel="Z")
        plt.show()


    
    env.render()  # a display is required to render
env.close()
  • 效果:
    在这里插入图片描述
    在这里插入图片描述

3.4.示例点云转换

  • 使用maniskill2_learn脚本:
python tools/convert_state.py --env-name PickCube-v0 --num-procs 1 \
--traj-name /home/jiangyvhang/ManiSkill2/demos/rigid_body_envs/PickCube-v0/PickCube-v0.none.pd_ee_delta_pose.h5 \
--json-name /home/jiangyvhang/ManiSkill2/demos/rigid_body_envs/PickCube-v0/PickCube-v0.none.pd_ee_delta_pose.json \
--output-name /home/jiangyvhang/ManiSkill2/demos/rigid_body_envs/PickCube-v0/PickCube-v0.trajectory.none.pd_ee_delta_pose_pcd.h5 \
--control-mode pd_ee_delta_pose \
--max-num-traj  6 \
--obs-mode pointcloud \
--n-points 1200 \
--obs-frame base \
--reward-mode dense \
--n-goal-points 50 \
--obs-frame base \
--render \
  • 参数解读:
--env-name:环境名字 \
--num-procs :线程数,越多转换越快,但启动多线程会比较慢,1 \
--traj-name .h5示例文件路径 \
--json-name .json示例文件路径 \
--output-name 输出的转换后的.h5文件路径 \
--control-mode :控制模式,pd_ee_delta_pose \
--max-num-traj  :转换的路径个数,小一点,更快完成转换,快速验证,6 \
--obs-mode :观测方式,pointcloud \
--n-points :点云点数,1200 \
--obs-frame :观测点云基准,base \
--reward-mode:选择稠密或稀疏奖赏 dense:稠密,sparse:稀疏 \
--n-goal-points :目标位置处点云数量,50 \
--render :演示,会降低转换速度,并且只能开启一个线程\
  • 点云可视化:
import h5py
import numpy as np

file =  '/home/jiangyvhang/ManiSkill2/demos/rigid_body_envs/PickCube-v0/PickCube-v0.trajectory.none.pd_ee_delta_pose_pcd.h5'
h5file = h5py.File(file, "r")
print(np.array(h5file['traj_0']))
for key in h5file['traj_0'].keys():
    #print(h5file['traj_0'][key])
    '''
    <HDF5 dataset "dict_str_actions": shape (88, 7), type "<f4">
<HDF5 dataset "dict_str_dones": shape (88, 1), type "|b1">
<HDF5 dataset "dict_str_episode_dones": shape (88, 1), type "|b1">
<HDF5 dataset "dict_str_is_truncated": shape (88, 1), type "|b1">
<HDF5 group "/traj_0/dict_str_obs" (5 members)>
<HDF5 dataset "dict_str_rewards": shape (88, 1), type "<f4">
<HDF5 dataset "dict_str_worker_indices": shape (88, 1), type "<i4">
    '''
    #print( np.array( h5file['traj_0'][key] ) )
    pass

'''
for key in h5file['traj_0']['dict_str_obs']:
    print(h5file['traj_0']['dict_str_obs'][key])
    print( np.array( h5file['traj_0']['dict_str_obs'][key] ) )
'''
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(projection='3d')

point = np.array( h5file['traj_0']['dict_str_obs']['dict_str_xyz'] )
rgb = np.array( h5file['traj_0']['dict_str_obs']['dict_str_rgb'] )

i = 80#查看第i帧
ax.scatter(point[[i],:,[0]], point[[i],:,[1]], point[[i],:,[2]], zdir="z",facecolors=np.squeeze(rgb[[i],:],0), marker=".", s=40)


ax.set(xlabel="X", ylabel="Y", zlabel="Z")
plt.show()

效果:

i = 0

在这里插入图片描述

i = 10

在这里插入图片描述

i = 80

在这里插入图片描述

  • 调整参数,重新转换(需要删除上一步输出的文件,或更改输出的文件名):
python tools/convert_state.py --env-name PickCube-v0 --num-procs 1 \
--traj-name /home/jiangyvhang/ManiSkill2/demos/rigid_body_envs/PickCube-v0/PickCube-v0.none.pd_ee_delta_pose.h5 \
--json-name /home/jiangyvhang/ManiSkill2/demos/rigid_body_envs/PickCube-v0/PickCube-v0.none.pd_ee_delta_pose.json \
--output-name /home/jiangyvhang/ManiSkill2/demos/rigid_body_envs/PickCube-v0/PickCube-v0.trajectory.none.pd_ee_delta_pose_pcd.h5 \
--control-mode pd_ee_delta_pose \
--max-num-traj  2 \
--obs-mode pointcloud \
--n-points 10000 \
--obs-frame world \
--reward-mode dense \
--n-goal-points 50 \
--render \
  • 输出:
Obs mode: pointcloud; Control mode: pd_ee_delta_pose
Obs frame: world; n_points: 10000; n_goal_points: 50
Reset kwargs for the current trajectory: {'seed': 0}
Convert Trajectory: completed 1 / 2; this trajectory has length 88
Reset kwargs for the current trajectory: {'seed': 1}
Convert Trajectory: completed 2 / 2; this trajectory has length 101
Finish using /tmp/0.h5
maniskill2_learn - (record_utils.py:280) - INFO - 2022-12-02,16:31:19 - Total number of trajectories 2
Finish merging files to /home/jiangyvhang/ManiSkill2/demos/rigid_body_envs/PickCube-v0/PickCube-v0.trajectory.none.pd_ee_delta_pose_pcd.h5
  • 效果:
i = 0

在这里插入图片描述

i = 10

在这里插入图片描述

i = 80

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Day818.电商系统的分布式事务调优 -Java 性能调优实战

电商系统的分布式事务调优 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于电商系统的分布式事务调优。 一个线上事故&#xff0c;在一次 DBA 完成单台数据库线上补丁后&#xff0c;系统偶尔会出现异常报警&#xff0c;开发工程师很快就定位到了数据库异常问题。 具…

SQL通用语法与DDL操作

学习笔记 sql通用语法 1 sql语句可以单行或多行书写&#xff0c;以分号结尾&#xff1b; 2 sql语句可以使用空格/缩进来增强语句的可读性&#xff1b; 3 mysql数据库的sql语句不区分大小写 4 单行注释&#xff1a;-- 内容 或 # 内容 多行注释&#xff1a; /* 内容 */ sql语句…

【地图之vue-baidu-map】点击获取坐标(点Marker)、坐标集(多边形polygon)

点击获取坐标&#xff08;点Marker&#xff09; 官网链接&#xff1a;Vue Baidu Map 需求 1.点击某点设置该点为中心点 2.获取点的经纬度 3.确定选取成功&#xff0c;取消就不赋值。 实现步骤 第一步&#xff1a;设置打开弹窗的地方 <el-button click"clickAdd…

c# .net 树莓派/香橙派用到物联网包Iot.Device.bindings 支持设备说明文档

c# .net 树莓派&#xff08;进口&#xff0c;贵&#xff09;/香橙派&#xff08;国产&#xff0c;功能相同&#xff0c;性价比高&#xff09;用到物联网包Iot.Device.bindings 支持设备说明文档 我们c# .net 开发树莓派/香橙派都需要用到Iot.Device.bindings和System.Device.G…

阿里巴巴 Github 星标 57.9KJava 面试突击汇总(全彩版)首次公开

现在互联网大环境不好&#xff0c;互联网公司纷纷裁员并缩减 HC&#xff0c;更多程序员去竞争更少的就业岗位&#xff0c;整的 IT 行业越来越卷。身为 Java 程序员的我们就更不用说了&#xff0c;上班 8 小时需要做好本职工作&#xff0c;下班后还要不断提升技能、技术栈&#…

命令注入漏洞解析

漏洞简介 Atlassian Bitbucket Server 和 Data Center 是 Atlassian 推出的一款现代化代码协作平台&#xff0c;支持代码审查、分支权限管理、CICD 等功能。 受影响的Bitbucket Server 和 Data Center版本存在使用环境变量的命令注入漏洞&#xff0c;具有控制其用户名权限的攻…

代码随想录刷题记录day34 动态规划理论基础+斐波那契数+爬楼梯+使用最小花费爬楼梯

代码随想录刷题记录day34 动态规划理论基础斐波那契数爬楼梯使用最小花费爬楼梯 动态规划理论基础 解决的问题 由前一个状态决定了后一个的状态&#xff0c;可以用动态规划来解决。贪心是没有状态推导的。 解题步骤 确定dp数组&#xff08;dp table&#xff09;以及下标的…

一键集成 SQL 审核到你的 GitLab 和 GitHub CI/CD

本文以 GitLab 为例&#xff0c;GitHub 方式类似。 操作步骤 事先准备 开启 Bytebase 团队版&#xff08;从 v1.8.0 开始&#xff0c;你可以直接开启 14 天的团队版免费试用&#xff09;。 为你的 Bytebase workspace 和项目开启 VCS 工作流&#xff1a;https://www.bytebas…

基于钉钉通讯录,同步构建本地LDAP服务

上一篇《利用飞书通讯录同步搭建本地LDAP》方案发出后&#xff0c;引起不少企业 IT 人员共鸣。本次&#xff0c;宁盾针对使用了钉钉社交应用的企业推出基于钉钉通讯录&#xff08;组织架构和用户信息&#xff09;同步搭建本地 LDAP的方案。 钉钉已经成为很多企业日常处理工作的…

基于FPGA的智能小车系统

目 录 前 言 1 第1章 系统总体方案设计 4 1.1 系统任务描述 4 1.2 控制系统要求 4 1.3 方案设计与论证 4 1.3.1 小车载体选择 4 1.3.2 主控制器选择 5 1.3.3 传感器选择 5 1.3.4 电机驱动选择 6 1.3.5 稳压电源选择 7 1.3.6 智能小车系统最终方案 7 1.4 系统总体设计 8 1.4.…

【Java开发】 Spring 07 :Spring AOP 实践详解(通过 AOP 打印数据访问层)

AOP 指是面向切面编程&#xff08;通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术&#xff09;&#xff0c;利用AOP可以对业务逻辑的各个部分进行隔离&#xff0c;从而使得业务逻辑各部分之间的耦合度降低&#xff0c;提高程序的可重用性&#xff0c;同时提…

SpringBoot 3.0 新特性,内置声明式 HTTP 客户端

http interface 从 Spring 6 和 Spring Boot 3 开始&#xff0c;Spring 框架支持将远程 HTTP 服务代理成带有特定注解的 Java http interface。类似的库&#xff0c;如 OpenFeign 和 Retrofit 仍然可以使用&#xff0c;但 http interface 为 Spring 框架添加内置支持。 什么是…

RabbitMQ之集群方案原理

对于无状态应用&#xff08;如普通的微服务&#xff09;很容易实现负载均衡、高可用集群。而对于有状态的系统&#xff08;如数据库等&#xff09;就比较复杂。 1、业界实践 主备模式&#xff1a;单活&#xff0c;容量对等&#xff0c;可以实现故障转移。使用独立存储时需要借…

【Matplotlib绘制图像大全】(二十五):Matplotlib使用figure()添加画布

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

2022re:Invent:亚马逊云科技拥有超过15年的数据创新经验

在探索适合企业的数据战略的道路上&#xff0c;企业并不孤单。亚马逊云科技有着超过15年的数据领域创新经验。并一直在尝试通过创新的方法去改进数据存储和分析的过程&#xff1a;亚马逊云科技在云中提供了第一个可扩展存储服务S3、发布了云上第一个专门构建的数据库DynamoDB和…

easyrecovery2023免费版电脑数据恢复软件下载功能介绍

误删了重要文件&#xff1f;电脑中毒数据丢失&#xff1f;本想拷贝却手抖格式化了&#xff1f;那可以试试easyrecovery&#xff0c;这是一款十分强大的电脑数据恢复软件&#xff0c;界面简洁明了&#xff0c;操作也是十分的简单&#xff0c;只需要根据文字提示来进行操作即可进…

B端产品实战课读书笔记:第七章B端产品常用功能设计

目录 一、工作台 二、列表 三、搜索/筛选 3.1输入框搜索 3.2 单选/复选筛选 3.3 独立/联动筛选 3.4 其他 四、审批 4.1概念 4.2扩展功能 4.3设计要点 五、用户--角色--权限 5.1 什么是RBAC模型 5.2单系统的用户权限设计 5.3多系统的用户权限设计 六、可视化 6.…

用HTML+CSS做一个漂亮简单的音乐网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

[附源码]计算机毕业设计springboot新能源汽车租赁

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于STM32G431嵌入式学习笔记——九、IIC总线(一)EEPROM

一、基础原理剖析 先前的实验中我们都是通过程序设计语言去调用串口、定时器、引脚等硬件设备进行从0到有的功能实现&#xff0c;所有的指令以及数据均来自程序设计语言&#xff0c;而没有想计算机一样将一些必要数据存入存储器中。 IIC总线是我们嵌入式板子上进行数据传输的主…