# Visual Hybrid Multi-Agent Playground (VHMAP 使用说明书)
vhmap是一个基于ThreeJs+Python的开源项目,提供了一个简洁易用的Python接口,用于创建和控制3D场景的可视化工具。它适用于**科研**、多智能体强化学习领域的3D演示、娱乐等应用。vhmap具有以下特点:
简化的Python接口;客户端渲染,流畅的帧率;占用服务端资源极少;基于ThreeJs,支持拖动和手机触屏;支持透视和投影两种视图切换;支持回放;使用zlib压缩数据流,网络带宽需求小。
通过以上特点,vhmap为用户提供了一个简单高效、具有交互性的3D可视化解决方案。
## 面向场景和特点
面向场景:
- 科研,尤其是多智能体强化学习领域
- 3D演示
- 2D实验数据搜集和可视化(见[2D文档](README_SCI.md))
应用特点:
- Python接口简化到极致
- 渲染在客户端,自动插帧,纵享丝滑帧率
- 服务端依赖少
- 占用服务端资源极少
- 基于ThreeJs,支持拖动,支持手机触屏
- 支持透视和投影两种视图的切换
- 支持回放
- 使用zlib压缩数据流,网络带宽需求小
## 安装
```shell
pip install vhmap>=4.2
```
## 20行代码-展示VHMAP的简单、丝滑
实现下图,仅需要20行python代码(含初始化)
<div align="center">
<img src="md_imgs/动画x7.gif" width="700" >
</div>
界面功能、操作介绍:
- 鼠标右键平移,左键旋转,滚轮缩放
- 支持触屏,如果你笔记本或手机有触控屏幕
- 左上角显示渲染刷新率
- play fps:每秒播放多少关键帧(小于渲染刷新率,则插帧;大于渲染刷新率,则超出部分无效)
- pause:暂停
- next frame:暂停并切换下一帧
- previous frame:暂停并切换上一帧
- loop to start:播放完所有数据,回到第一帧
- ppt step:以极慢极慢的速度播放一帧,方便录屏,按下后会卡顿几秒
- use orthcam:切换透视视图(物体近大远小)/投影视图(工程制图学过没),
- P.S. 第一次切换到投影视图时,需要用鼠标滚轮放大画面
```python
from vhmap.mcom import mcom
import numpy as np
class TestVhmap():
def render(self, t):
if not hasattr(self, 'visual_bridge'):
self.visual_bridge = mcom(path='TEMP/v3d_logger/', draw_mode='Threejs')
self.visual_bridge.v3d_init()
self.visual_bridge.set_style('gray')
self.visual_bridge.advanced_geometry_rotate_scale_translate('box', 'BoxGeometry(1,1,1)', 0,0,0, 1,1,1, 0,0,0)
x = np.cos(t); y=np.sin(t); z= np.cos(t)*np.sin(t) # 此帧的x,y,z坐标
self.visual_bridge.v3d_object(
'box|2233|Red|0.1', # 填入 ‘形状|几何体之ID标识|颜色|大小’即可
x, y, z, ro_x=0, ro_y=0, ro_z=np.sin(t), # 三维位置+欧拉旋转变换,六自由度
track_n_frame=20) # 显示历史20帧留下的轨迹
self.visual_bridge.v3d_show() # 结束关键帧
if __name__ == '__main__':
x = TestVhmap()
for step in range(1000): x.render(t=step/np.pi)
import time; time.sleep(1000) # 启动后打开输出的url地址即可
# 这是第21行,已经写完了 :joy:
```
## 50行代码-演示3维N体运动(低精度定步长)
- 代码1详情请见:vhmap/examples/nb.py
运行方法:
```
pip install vhmap
python -m vhmap.examples.nb
```
<div align="center">
<img src="md_imgs/动画9.gif" width="700" >
</div>
## 90行代码-使用dop853求解常微分方程演示三体、N体运动
- 代码2详情请见:vhmap/examples/nb_3body_specials.py
- 代码3详情请见:vhmap/examples/nb_nbody_specials.py
```
pip install vhmap
python -m vhmap.examples.nb_3body_specials
```
<div align="center">
<img src="md_imgs/动画11.gif" width="300", height="275" >
<img src="md_imgs/动画13.gif" width="300" >
<img src="md_imgs/动画12-1.gif" width="700" >
</div>
三体初始值: Xiaoming LI, Shanghai Jiaotong University
https://numericaltank.sjtu.edu.cn/three-body/three-body-movies.htm
## 如何回放
VHMAP在接收到数据后,会自动地在 TEMP/v3d_logger/ 路径下生成backup.dp数据文件,该文件可以用于回放。
警告:数据文件会在下一次运行时被新的日志文件覆盖,必要时请手动备份!
```
python -m vhmap.threejs_replay -f TEMP/v3d_logger/backup.dp.gz -p 8085
```
其中-f后面的是回放文件的路径,-p接端口号例如8085,之后打开 http://localhost:8085 即可。
## API-中文
引入
```python
from vhmap.mcom import mcom
```
### 初始化
```python
visual_bridge = mcom(path='TEMP/v3d_logger/', draw_mode='Threejs')
visual_bridge.v3d_init()
```
### set_style
```python
visual_bridge.set_style('star') # 布置星空
visual_bridge.set_style('grid') # 布置2维网格
visual_bridge.set_style('grid3d') # 布置3维网格
visual_bridge.set_style('earth') # 在场景中放一个地球
visual_bridge.set_style('background', color='White') # 注意不可以省略参数键值'color=' !
# 如果label要使用中文字符,需要设置字体,否则字符会变成问号'?'(另外如果字体没加载完,或者加载完刷新不及时,也会显示为?)
visual_bridge.set_style('font', fontPath='/examples/fonts/ttf/FZYTK.TTF') # 注意不可以省略参数键值'fontPath=' !
# 如果label要使用中文字符,而且需要换行,则还需要额外设置行距 fontLineHeight
visual_bridge.set_style('font', fontPath='/examples/fonts/ttf/simhei.ttf', fontLineHeight=1500)
visual_bridge.set_style('skybox', path='/wget/shabby.jpg') # 设置天空盒子,注意不可以省略参数键值'path='
visual_bridge.set_style('skybox6side', # 设置天空盒子,注意不可以省略参数键值 !!
posx='/wget/mars_textures/mars_posx.jpg',
negx='/wget/mars_textures/mars_negx.jpg',
posy='/wget/mars_textures/mars_posy.jpg',
negy='/wget/mars_textures/mars_negy.jpg',
posz='/wget/mars_textures/mars_posz.jpg',
negz='/wget/mars_textures/mars_negz.jpg',
)
```
### 声明几何体
```
advanced_geometry_rotate_scale_translate(自定义几何体名词, 几何体形状, 几何体旋转1, 几何体旋转2, 几何体旋转3, 几何体尺度1, 几何体尺度2, 几何体尺度3, 几何体平移1, 几何体平移2, 几何体平移3)
```
```python
# declare geo 'oct1', init with OctahedronGeometry, then (1)rotate & (2)scale & (3)translate
visual_bridge.advanced_geometry_rotate_scale_translate('oct1', 'OctahedronGeometry(1,0)', 0,0,0, 1,1,1, 0,0,0) # 八面体
# 需要换成其他几何体,请把'OctahedronGeometry(1,0)'替换,参考网址 https://threejs.org/docs/index.html?q=Geometry
visual_bridge.advanced_geometry_rotate_scale_translate('any_name_you_want', 'TorusGeometry(10,3,16,100)', 0,0,0, 1,1,1, 0,0,0) # 甜甜圈
# declare geo 'ball'
visual_bridge.advanced_geometry_rotate_scale_translate('ball', 'SphereGeometry(1)', 0,0,0, 1,1,1, 0,0,0) # 球体
# declare geo 'box'
visual_bridge.advanced_geometry_rotate_scale_translate('box', 'BoxGeometry(1,1,1)', 0,0,0, 1,1,1, 0,0,0) # 长方体
# declare geo 'Plane', 使用fbx模型,路径为/vhmap/threejsmod/examples/files/plane.fbx
visual_bridge.advanced_geometry_rotate_scale_translate('Plane', 'fbx=/examples/files/plane.fbx', -np.pi/2, 0, np.pi/2, 1,1,1, 0,0,0) # 八面体
```
### v3d,可用颜色(JS颜色,支持Hex颜色)参考 https://www.w3schools.com/colors/colors_names.asp
```python
# 注意不可以省略参数键值
x=1; y=2; z=3
visual_bridge.v3d_object(
'ball|8848|MidnightBlue|0.5', # 填入核心参量: “已声明的形状|几何体的唯一ID标识|颜色|整体大小”
x, y, z, # 三维位置,3/6dof
ro_x=0, ro_y=0, ro_z=0, # 欧拉旋转变换,3/6dof
# ro_order='XYZ', # (测试中,勿使用)欧拉旋转顺序,详情见 https://threejs.org/docs/index.html?q=object#ap
MarcoPage
- 粉丝: 4422
- 资源: 8835
最新资源
- 西门子726消防报警主机逻辑编辑软件
- MATLAB环境下一种在冲击性噪声中进行鲁棒稀疏恢复的方法 算法运行环境为MATLAB r2018a 算法可迁移至金融时间序列,地震 微震信号,机械振动信号,声发射信号,电压 电流信号,语音信号
- 算法最小生成树Qt项目 包含prim算法和kruskal算法 其中二者的执行过程可以动态展示 包含报告和源代码
- 西门子1500博图程序 立体仓库 堆垛机 输送机 智能物流 工程项目案例,是成熟的并且稳定的运行在客户现场的程序,项目有一万多个库位,输送机一百多个,堆垛机8个,仓库分楼下和楼上两层,以西门子plc
- 基于重复控制的有源电力滤波器谐波抑制策略 APF有源电力滤波器 无功补偿 PI+重复控制 谐波抑制 产品,不接受 电流环重复控制,THD小于1%
- 电磁噪声电磁仿真电磁设计电机simplorer控制Maxwell电机电磁振动噪声NVH分析资料教程 永磁同步电机电磁噪声全套资料包含模态试验教程(锤击法模态试验),Maxwell电磁仿真初级中级高级教
- 调度:考虑光伏储能的多目标粒子群经济调度 简介:调度中考虑了光伏消纳、储能系统调节作用等,并采用了多目标粒子群算法求解 参考文献基于改进粒子群算法的微电网多目标优化调度,基于多目标粒子群算法的微电
- 基于51单片机的波形发生器系统仿真设计 实现功能: 1、通过按键切波形 可输出正弦波 方波 三角波 锯齿波 组合波(正弦波+三角波+锯齿波) 2、通过滑动变阻器进行波形幅度调节(0-5V),并通过A
- 3机9节点系统暂态稳定Matlab编程 simulink仿真 1.Matlab编程计算摇摆曲线,得到3机9节点系统中3台发电机的功角曲线以及转速曲线,通过分析各发电机之间的功角差和转速差来分析系统暂态
- python音乐推荐系统 音乐推荐系统源码 技术栈:python+django+基于用户协同过滤,应用余弦相似度 推荐思路:用户登陆系统后,听歌时会记录听歌次数,听歌的次数可以代表用户对歌曲的喜好度
- 西门子真实水处理1200PLC程序+触摸屏程序,V16打开学习程序,可仿真实验 Plc程序包含功能块,功能块为SCL编写, 内含模拟量算功能块+滤波功能块+时间算功能块+modubus tcp通讯
- 四轴scara机器人正解逆解算法,功能有:设定臂长,末端姿态,用户坐标系统及其转 不含标定、死区管理,要自己加 c++源码,vs2015工程,用户坐标系是用opencv库 支持左手右手两种模式
- stgwaterctrl.cfg
- COMSOL铌酸锂波导PPLN和频
- 西门子S7-300博途植物萃取饮料生产线控制系统程序案例,编程软件采用博途STEP7加博途WINCC RT Pro 内有CAD工艺流程图和PDF版电气图供参考 博图版本V15.1及以上
- 永磁同步电机的MTPA最大转矩电流比控制算法的仿真模型,有详细的算法设计文档 1. 永磁同步电机的数学模型; 2. 永磁同步电机的矢量控制原理; 3. 最大转矩电流比控制; 4. 前馈补偿提高抗负载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈