Genesis世界模型的上手与测试
0. 简介
关于UCloud(优刻得)旗下的compshare算力共享平台
UCloud(优刻得)是中国知名的中立云计算服务商,科创板上市,中国云计算第一股。
Compshare GPU算力平台隶属于UCloud,专注于提供高性价4090算力资源,配备独立IP,支持按时、按天、按月灵活计费,支持github、huggingface访问加速。
使用下方链接注册可获得20元算力金,免费体验10小时4090云算力
https://www.compshare.cn/?ytag=GPU_lovelyyoshino_Lcsdn_csdn_display。
来自卡内基梅隆大学、斯坦福大学、麻省理工计算机科学与人工智能实验室、英伟达和清华大学的众多核心贡献者推出了一个全新的物理仿真平台Genesis。据说可以40秒完成一个go1机械狗的训练。我们这里对该平台进行了一次简单测试,模仿RoboCAS中的拾取与操作任务测试了Genesis的仿真能力。有一说一最核心的代码目前还没完全开源。部分宣传的内容没有release,尤其是AI自动任务生成等具有广泛应用前景的内容。所以大家可以持续关注Github链接。这里最近受到优刻得的使用邀请,正好解决了我在大模型和自动驾驶行业对GPU的使用需求。UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU,按时收费每卡1.88元,并附带200G的免费磁盘空间。暂时已经满足我的使用需求了,同时支持访问加速,独立IP等功能,能够更快的完成项目搭建。此外对于低性能的还有3080TI使用只需要0.88元,已经吊打市面上主流的云服务器了。
1. 环境安装
由于优刻得已经装好了所有和CUDA相关的内容,VNC可视化作者也专门提供了可视化操作的docker,https://www.compshare.cn/images-detail?ImageID=compshareImage-1511xng5mpcl&ImageType=Community&ytag=GPU_lovelyyoshino_Lcsdn_csdn_display,我们只需要关注代码的安装和使用即可
1.1 通过VNC搭建Ubuntu图形界面
软件安装
更新本地软件包
apt update
安装远程图形界面&轻量化桌面
# 安装较为耗时,预计5-10min
apt install -y dbus-x11 xorg openbox xfce4 xfce4-goodies tightvncserver
语言选择
在安装中,需要选择对应语言
依赖项配置
环境变量
NOTE
后续容器会默认添加
-e USER=root
设置,此步骤可忽略
export USER=root
dbus-launch启动
NOTE
在软件安装中dbus-x11是启动dbus-launch依赖包,若出现启动失败,可重新
apt install dbus-x11
进行安装
dbus-launch
VNC配置
密码设置
NOTE
- 密码为6-8位
- 只读模式设置为n
# 1.运行
vncserver
# 2.密码设置,使用6-8位作为密码,超过会被自动截取
# 3.密码确认,输入和设置的同一个密码即可
# 4.在最后进行view-only选择时,需要选择【n】并输入回车
修改启动文件
启动文件备份
cp ~/.vnc/xstartup ~/.vnc/xstartup.bak
修改文件内容
echo "startxfce4 &" >> ~/.vnc/xstartup
chmod +x ~/.vnc/xstartup
VNC重启
# 1.关闭在密码设置中启动的VNC进程
vncserver -kill :1
# 2.重新启动vncserver
vncserver -geometry 1920x1080
# xauth: (argv):1: bad display name "b9732a281594:1" in "add" command
# New 'X' desktop is b9732a281594:1
# Starting applications specified in /root/.vnc/xstartup
# Log file is /root/.vnc/b9732a281594:1.log
VNC端口占用说明
-
默认使用端口为5900+启动编号,例如:在执行启动命令
vncserver -geometry 1920x1080
后,在log中提示New 'X' desktop is b9732a281594:1
则表示,此进程在启动编号:1下执行,则此时占用端口号为5901
。若后续需要使用VncViewer工具进行连接,防火墙必须打开5901
端口号 -
也可通过命令进行检查端口
(base) root@b9732a281594:/# ss -tuln | grep 590
tcp LISTEN 0 5 0.0.0.0:5901 0.0.0.0:*
VncViewer连接
IMPORTANT
容器内VncServer服务对应防火墙端口必须打开
官网工具下载
https://www.realvnc.com/en/connect/download/viewer/
桌面连接
- File -> New connection
- 创建连接配置如下
-
VncServer: EIP(外网访问地址):VncServer服务端口号
-
Name:自定义名称
- 双击选择刚刚创建的connection
- 输入在vncserver密码初始化时填入的密码
- 登录成功
Chrome浏览器配置
浏览器打开报错
谷歌浏览器安装
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
apt install -y ./google-chrome-stable_current_amd64.deb
VNC桌面进行浏览器替换
WARNING
此步骤须桌面的Terminal中进行操作,具体步骤如下
- 执行
xfce4-settings-manager
会出现如下弹窗选择
- 选择
Default Applications
- 在
Web Browser
中选择Other选项
-
输入:
/usr/bin/google-chrome --no-sandbox
保存即可 -
打开默认浏览器即可
使用Web浏览器连接远程桌面
TIP
针对于不想安装VncViewer用户,可以选择使用Web浏览器直接访问远程桌面
noVNC下载
项目下载
# noVnc下载
git clone https://github.com/novnc/noVNC.git /usr/lib/noVNC
chmod +x /usr/lib/noVNC/utils/*
noVNC启动
# 启动代理服务,并后台运行
/usr/lib/noVNC/utils/novnc_proxy --vnc localhost:5901 &# 打印日志如下,端口号默认监听:6080
Using installed websockify at /root/miniconda3/bin/websockify
Starting webserver and WebSockets proxy on port 6080
WebSocket server settings:- Listen on :6080- Web server. Web root: /usr/lib/noVNC- No SSL/TLS support (no cert file)- proxying from :6080 to localhost:5901Navigate to this URL:http://b9732a281594:6080/vnc.html?host=b9732a281594&port=6080Press Ctrl-C to exit
web页面连接使用
NOTE
必须保证对应的6080端口防火墙打开!!!
- 浏览器访问
http://${外网EIP地址}:6080/vnc.html
- 点击页面
连接
按钮 - 输入vncserver设置的密码
1.2 环境配置安装
pip install torch==2.0.0+cu118 torchvision==0.15.1+cu118 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
pip install open3d
pip install genesis-world
git clone https://github.com/Genesis-Embodied-AI/Genesis.git
如果需要光追渲染,需要编译Luisa Compute相关模块
git submodule update --init --recursive
sudo apt install build-essential manpages-dev software-properties-commonsudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update && sudo apt install gcc-11 g++-11
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 110
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
sudo apt-get install patchelf
sudo apt install libvulkan-dev
sudo apt-get install zlib1g-dev
sudo apt-get install xorg-dev libglu1-mesa-dev
pip install "pybind11[global]"
sudo apt-get install libsnappy-devcd genesis/ext/LuisaRender
cmake -S . -B build -D CMAKE_BUILD_TYPE=Release -D PYTHON_VERSIONS=3.9 -D LUISA_COMPUTE_DOWNLOAD_NVCOMP=ON -D LUISA_COMPUTE_ENABLE_GUI=OFF
cmake --build build -j $(nproc)cd $(dirname $(which python))/../lib
mv libstdc++.so.6 libstdc++.so.6.old
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6
Genesis基于OMPL实现无碰撞运动路径规划,可以直接下载预编译的wheel并使用pip安装
相关的安装教程可以参考:用户指南🛠️ 安装
2. 场景渲染与相机图像获取
2.1 创建场景
官方文档:👋🏻 Hello, Genesis
import genesis as gs
# 初始化引擎
gs.init(backend=gs.cpu) # 可以选择多种bakcend以适应不同的平台以及设备, 详见官方文档
# 创建场景
scene = gs.Scene()
# 加载模型以及机器人
# 在 Genesis 中,所有对象和机器人都表示为Entity。Genesis 的设计完全面向对象,因此您将能够直接通过它们的方法与这些实体对象进行交互,而不是使用分配给它们的句柄或全局 ID
plane = scene.add_entity(gs.morphs.Plane())
franka = scene.add_entity(gs.morphs.MJCF(file='xml/franka_emika_panda/panda.xml'),
)
# 创建场景,每次添加、删除场景中的物体时都需要重新创建场景
scene.build()
# 运行仿真
for i in range(1000):scene.step()
Genesis 中的morphs是一个混合概念,封装了实体的几何和姿势信息。通过使用不同的变形,您可以从形状基元、网格、URDF、MJCF、地形或软机器人描述文件中实例化 Genesis 实体。
在使用URDF格式的机器人/模型配置文件时,机器人并不会自动与世界坐标系进行固定,所以,如果需要进行固定,则需要在morphs.URDF或者morphs.Mesh设置fixed=True
If you want to load a Franka arm using an external URDF file, you can simply change the morph to gs.morphs.URDF(file=‘urdf/panda_bullet/panda.urdf’, fixed=True). Note that unlike MJCF file which already specifies the joint type connecting the robot’s base link and the world, URDF file doesn’t come with this information. Therefore, by default, the base link of a URDF robot tree is disconnected from the world (or more precisely, connected to world via a free 6-dof joint). Therefore, we need to additionally specify fixed=True for morphs.URDF and morphs.Mesh if we want the base link to be fixed.
该仿真器默认将物体模型进行凸优化,但是同样支持非凸物体的仿真,参考官方示例
tank = scene.add_entity(gs.morphs.Mesh(file="meshes/tank.obj",convexify=False, # 非凸物体scale=5.0,fixed=True,euler=(90, 0, 0),),)
2.2 创建并使用相机
官方文档:📸 Visualization & Rendering
当前Genesis中相机支持渲染 rgb 图像、深度、分割mask和表面法线。
需要在场景build之前对相机进行定义,而build之后可以对相机位姿进行改变。但是并未找到直接的API以将相机固定到机器人的某个link上。
# 创建相机
cam = scene.add_camera(res = (1280, 960), # 分辨率pos = (3.5, 0.0, 2.5), # 相机位置lookat = (0, 0, 0.5), # 相机视角方向fov = 30,GUI = False # 不显示相机内容可视化窗口
)
scene.build()# 设置需要渲染的内容,默认只有RGB
# 每次调用render函数时均需要设置渲染内容,否则仅rgb存在内容,其他均为None
rgb, depth, segmentation, normal = cam.render(depth=True, segmentation=True, normal=True)# 开始记录场景
cam.start_recording()
for i in range(120):scene.step()# 改变相机位置cam.set_pose(pos = (3.0 * np.sin(i / 60), 3.0 * np.cos(i / 60), 2.5),lookat = (0, 0, 0.5),)# 获取相机RGB图像,depth, segmentation, normal均为Nonecam.render()
# 停止记录场景并将记录内容保存到文件
cam.stop_recording(save_to_filename='video.mp4', fps=60)
其他详细的内容可以参考官方文档和API
3. 实测体验对比
Genesis的宣传稿描绘了一个通过生成式物理模拟构建虚拟世界的宏大愿景,但实际展示的仅是一个重新设计的轻量级物理引擎。尽管该项目在GitHub上获得了广泛关注,实际体验与宣传内容相距甚远,期待后续进展。
优点:
- 轻量级框架:基于Python,代码简洁易懂。
- 统一物理框架:支持多种求解器和形态模拟,易于扩展。
- 全面的物理模拟:支持刚体、软体、柔体、破坏和碰撞等多种模拟。
- 优秀性能:在高性能GPU上支持大量环境和高帧率,仿真效率显著高于现有平台。
不足:
- 缺乏生成式物理模拟的demo和代码:宣传中提到的功能未在文档和代码中体现。
- 渲染效果与实际差距大:缺乏炫酷效果的demo。
- Avatar角色生成和4D能力缺失:相关demo和代码均未提供。
- 缺乏交互式场景。
下面是知乎大佬飞鸟咿呀的对比
这是再横向对比Isaac系列后得出的结论。此外在 genesis/engine/solvers 目录中,可以看到多个求解器,每个求解器都针对特定的物理模拟场景进行优化。
方案 | Genesis | Isaac系列 |
---|---|---|
刚体动力学 (Rigid Body) | 支持 | 支持 |
柔体动力学 (Soft Body) | 支持 | 支持 |
物质点法 (MPM) | 支持 | / |
基于位置的动力学 (PBD) | 支持 | / |
光滑粒子动力学 (SPH) | 支持 | 支持 |
稳定流体模拟 (Stable Fluids) | 支持 | 支持 |
粒子求解器 (Particle-Based) | 支持 | 支持 |
关节约束求解器 (Articulations) | 支持 | 支持 |
Avatar 求解器 | 支持 | / |
工具求解器 (Tool Solver) | 支持 | / |
流体求解器 (Flow Solver) | 支持 | 支持 |
刚体 GPU 求解器 | / | 支持 |
多物理场支持 | 支持 | 支持 | |
4. 参考链接
https://blog.csdn.net/weixin_51684047/article/details/144615880
https://zhuanlan.zhihu.com/p/13599514392
https://zhuanlan.zhihu.com/p/13773033666