-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
244 lines (213 loc) · 46.8 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>ZZSHUB - ZZS</title><meta name="author" content="Zishun Zhou"><meta name="copyright" content="Zishun Zhou"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta property="og:type" content="website">
<meta property="og:title" content="ZZSHUB">
<meta property="og:url" content="https://blog.zzshub.cn/index.html">
<meta property="og:site_name" content="ZZSHUB">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/zzslogo.jpg">
<meta property="article:author" content="Zishun Zhou">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/zzslogo.jpg"><link rel="shortcut icon" href="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/logo.ico"><link rel="canonical" href="https://blog.zzshub.cn/index.html"><link rel="preconnect" href="//cdnjs.cloudflare.com"/><link rel="preconnect" href="//hm.baidu.com"/><link rel="preconnect" href="//www.clarity.ms"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><meta name="google-site-verification" content="blth2QTunwBDdAVeivflGOQ5yFAKkRto5hERrzSe7Zw"/><meta name="baidu-site-verification" content="J5gSYw6HO1"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/node-snackbar/0.1.16/snackbar.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancyapps-ui/5.0.33/fancybox/fancybox.min.css" media="print" onload="this.media='all'"><script>var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?30631f1de6b7510bb2f006c33e30d765";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script><script>(function(c,l,a,r,i,t,y){
c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
})(window, document, "clarity", "script", "n0xcwltp2w");</script><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: {"path":"/search.xml","preload":true,"top_n_per_article":1,"unescape":false,"languages":{"hits_empty":"找不到您查询的内容:${query}","hits_stats":"共找到 ${hits} 篇文章"}},
translate: {"defaultEncoding":2,"translateDelay":0,"msgToTraditionalChinese":"繁","msgToSimplifiedChinese":"簡"},
noticeOutdate: undefined,
highlight: {"plugin":"highlight.js","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '',
dateSuffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: {"chs_to_cht":"你已切换为繁体中文","cht_to_chs":"你已切换为简体中文","day_to_night":"你已切换为深色模式","night_to_day":"你已切换为浅色模式","bgLight":"#49b1f5","bgDark":"#1f1f1f","position":"bottom-left"},
infinitegrid: {
js: 'https://cdnjs.cloudflare.com/ajax/libs/egjs-infinitegrid/4.11.1/infinitegrid.min.js',
buttonText: '加载更多'
},
isPhotoFigcaption: false,
islazyload: false,
isAnchor: false,
percent: {
toc: true,
rightside: false,
},
autoDarkmode: true
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: 'ZZSHUB',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2024-07-04 13:36:48'
}</script><script>(win=>{
win.saveToLocal = {
set: (key, value, ttl) => {
if (ttl === 0) return
const now = Date.now()
const expiry = now + ttl * 86400000
const item = {
value,
expiry
}
localStorage.setItem(key, JSON.stringify(item))
},
get: key => {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = Date.now()
if (now > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = (url, attr = {}) => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
script.onerror = reject
script.onload = script.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
script.onload = script.onreadystatechange = null
resolve()
}
Object.keys(attr).forEach(key => {
script.setAttribute(key, attr[key])
})
document.head.appendChild(script)
})
win.getCSS = (url, id = false) => new Promise((resolve, reject) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = url
if (id) link.id = id
link.onerror = reject
link.onload = link.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
link.onload = link.onreadystatechange = null
resolve()
}
document.head.appendChild(link)
})
win.activateDarkMode = () => {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
win.activateLightMode = () => {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
const t = saveToLocal.get('theme')
const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
const isLightMode = window.matchMedia('(prefers-color-scheme: light)').matches
const isNotSpecified = window.matchMedia('(prefers-color-scheme: no-preference)').matches
const hasNoSupport = !isDarkMode && !isLightMode && !isNotSpecified
if (t === undefined) {
if (isLightMode) activateLightMode()
else if (isDarkMode) activateDarkMode()
else if (isNotSpecified || hasNoSupport) {
const now = new Date()
const hour = now.getHours()
const isNight = hour <= 6 || hour >= 18
isNight ? activateDarkMode() : activateLightMode()
}
window.matchMedia('(prefers-color-scheme: dark)').addListener(e => {
if (saveToLocal.get('theme') === undefined) {
e.matches ? activateDarkMode() : activateLightMode()
}
})
} else if (t === 'light') activateLightMode()
else activateDarkMode()
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
if (asideStatus === 'hide') {
document.documentElement.classList.add('hide-aside')
} else {
document.documentElement.classList.remove('hide-aside')
}
}
const detectApple = () => {
if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
document.documentElement.classList.add('apple')
}
}
detectApple()
})(window)</script><meta name="generator" content="Hexo 7.3.0"><link rel="alternate" href="/atom.xml" title="ZZSHUB" type="application/atom+xml">
</head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/zzslogo.jpg" onerror="onerror=null;src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">43</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">39</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">1</div></a></div><hr class="custom-hr"/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 时光机</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> 友链</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page fixed" id="page-header" style="background-image: url('https://api.dujin.org/bing/1920.php')"><nav id="nav"><span id="blog-info"><a href="/" title="ZZSHUB"><span class="site-name">ZZSHUB</span></a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search" href="javascript:void(0);"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 时光机</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> 友链</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div></div><div id="toggle-menu"><a class="site-page" href="javascript:void(0);"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">ZZSHUB</h1><div id="site_social_icons"><a class="social-icon" href="https://github.com/ZzzzzzS" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="mailto:[email protected]" target="_blank" title="Email"><i class="fas fa-envelope"></i></a><a class="social-icon" href="/atom.xml" target="_blank" title="RSS"><i class="fas fa-rss"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left"><a href="/2024/06/25/DRL_LeggedgymCartpole2/" title="强化学习仿真环境Legged Gym的初步使用——训练一个二阶倒立摆"><img class="post-bg" src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/DRL_cartpole2/cover.jpg" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="强化学习仿真环境Legged Gym的初步使用——训练一个二阶倒立摆"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/06/25/DRL_LeggedgymCartpole2/" title="强化学习仿真环境Legged Gym的初步使用——训练一个二阶倒立摆">强化学习仿真环境Legged Gym的初步使用——训练一个二阶倒立摆</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-06-25T04:00:00.000Z" title="发表于 2024-06-25 12:00:00">2024-06-25</time></span></div><div class="content">强化学习仿真环境Legged Gym的初步使用——训练一个二阶倒立摆
本篇教程将大致介绍Legged Gym的结构,使用方法,并以一个二阶倒立摆为例来完成一次实际的强化学习训练
回顾强化学习基本概念 —– 五元组
本章节将简要回顾强化学习中五元组的概念,需要读者对强化学习有基本的概念。若对强化学习缺少基本认知,建议先阅读OpenAI推出的Spinning up系列教程。读者也可先大致阅读后续章节,对Legged Gym训练框架有初步认知。
首先我们回顾一下强化学习基本概念之一的五元组,即$M=<S,A,P,R,\gamma>$, 其中$S$表示状态集;$A$表示动作集 $P$ 表示状态和动作的条件转移概率,$R$ 奖励函数,最后$\gamma$表示回报率。以下是这五元组的详细解释:
状态集($S$):
定义:状态集S是所有可能的状态的集合。在强化学习中,状态描述了环境当前的情况或配置。
特点:状态用于确定接下来会发生什么(行动、观察、奖励)。状态是关于历史的函数,即($S_t = f(H_t)$),其中($H_t$)是到时间$t$为止的历史信息。
动 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2024/06/21/DRL_LeggedgymInstall/" title="强化学习仿真器Isaac Gym的安装与配置"><img class="post-bg" src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/DRL_installIsaacgym/cover.png" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="强化学习仿真器Isaac Gym的安装与配置"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/06/21/DRL_LeggedgymInstall/" title="强化学习仿真器Isaac Gym的安装与配置">强化学习仿真器Isaac Gym的安装与配置</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-06-21T04:00:00.000Z" title="发表于 2024-06-21 12:00:00">2024-06-21</time></span></div><div class="content">强化学习仿真器Isaac Gym的安装与配置
写在前面 – 最近强化学习强化学习在机器人领域真是大放异彩,鉴于IsaacGym+LeggedGym的仿真器和训练框架组合已经成为了机器人领域强化学习算法的主流工具,于是我打算写一篇博客来记录一下这个仿真环境的安装和使用。
本文主要参考了这篇博客的内容。
Isaac Gym简介本文主要介绍Isaac Gym强化学习仿真器和Legged Gym强化学习训练框架的安装和使用。Isaac Gym是一个基于GPU加速的并行计算仿真环境,主要可进行强化学习研究。它支持导入URDF和MJCF文件、基于张量(tensor)的API、域随机化(domain randomlization)以及各种传感器和环境。该仿真器使用GPU并行加速,比传统使用cpu计算的仿真如mujoco/raisim等可提速上百倍,非常适合需要大量采样的深度学习类算法使用,但仿真精度相较于mujoco等有略微下降,Isaac Gym框架对显存大小有较高要求,最低显存配置为4GB,(个人推荐8GB以上),对显卡算力最低要求不高GTX10系列及以上可运行。Legged G ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2024/05/21/start_rl/" title="机器人控制中的强化学习极简入门指南"><img class="post-bg" src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/start_rl/cover.jpg" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="机器人控制中的强化学习极简入门指南"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/05/21/start_rl/" title="机器人控制中的强化学习极简入门指南">机器人控制中的强化学习极简入门指南</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2024-05-21T04:00:00.000Z" title="发表于 2024-05-21 12:00:00">2024-05-21</time></span></div><div class="content">机器人控制中的强化学习极简入门指南
最近随着深度强化学习在机器人领域大放异彩,大家对这个方向的关注热情日趋高涨。最近老有人来问我相关的问题,借此机会我写了一个强化学习极简入门教程,其实也就是回答了入门应该看一些什么资料的问题。其实我本人也是初学者,如有疏漏或者错误还请大家海涵,如有问题也欢迎大家一起讨论。这是本系列的第一篇文章,计划后续会继续写一些更具体的环境搭建教程和入门教程,争取不鸽。
强化学习/深度学习部分参考资料
OpenAI的spinning up,主要讲深度强化学习的基本概念和算法的主流思想,里面也有配套代码,代码适合初学者学习,不过配置环境有点恶心,涉及到OpenMPI的内容,代码实在跑不起来就算了,能读懂就挺好,这个强烈推荐看完https://spinningup.openai.com/en/latest/
OpenAI的gym(更名为Gymnasium了,其实就是gym)环境,经典的强化学习环境,这个环境可以好好玩玩https://gymnasium.farama.org/https://github.com/Farama-Foundation/Gymn ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2023/10/14/conclusion-of-entropy/" title="机器学习中的各种熵总结"><img class="post-bg" src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/conclusion_of_entropy/th.jpg" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="机器学习中的各种熵总结"></a></div><div class="recent-post-info"><a class="article-title" href="/2023/10/14/conclusion-of-entropy/" title="机器学习中的各种熵总结">机器学习中的各种熵总结</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-10-14T10:40:13.000Z" title="发表于 2023-10-14 18:40:13">2023-10-14</time></span></div><div class="content">机器学习中的各种熵
最近学习我发现对机器学习中信息熵,交叉熵,相对熵(KL散度(Kullback-Leibler Divergence))总是容易搞混,特别是连续分布的情况,因此这里简单总结一下相关知识,方便后续查阅。
这篇文章很多内容都是AI生成的,不得不说AIGC进步神速。
信息熵,交叉熵,KL散度的关系信息熵、交叉熵和KL散度之间的关系可以从以下几个方面来理解:
信息熵:可以表示一个事件A的自信息量,也就是A包含多少信息。
KL散度:可以用来表示从事件A的角度来看,事件B有多大不同,适用于衡量事件A,B之间的差异。KL散度在p(x)和q(x)相同时取到最小值0,两个概率分布越相似,则KL散度越小。KL散度包含如下性质:
不对称性,即: $$D_{KL}(P||Q) \neq D_{KL}(Q||P)$$
非负性,即: $$D_{KL}(P||Q) \geq 0$$
交叉熵:可以用来表示从事件A的角度来看,如何描述事件B,适用于衡量不同事件B之间的差异。对于不同的事件B,计算事件AB的KL散度时都同时减去事件A的熵(KL散度=交叉熵-熵(A)),因此,如果 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2023/08/30/wslgperformace/" title="WSL中的GPU原理总结"><img class="post-bg" src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/wslgpuperformance/logo.png" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="WSL中的GPU原理总结"></a></div><div class="recent-post-info"><a class="article-title" href="/2023/08/30/wslgperformace/" title="WSL中的GPU原理总结">WSL中的GPU原理总结</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-08-30T06:12:32.000Z" title="发表于 2023-08-30 14:12:32">2023-08-30</time></span></div><div class="content">WSL中的GPU原理总结
自wsl(Windows Subsystem on Linux)发布以来,许多性能已经得到了长足的进步。经过多年的发展,该项目从一个玩具项目发展成现在可以真正用于生产环境的项目,给需要使用Linux环境但是又不想脱离Windows便利生态的开发者们来说带来了福音。wsl的图形性能也受到许多人的关注,特别是自微软2020build大会官方发布支持图形界面的wslg之后,wsl的图形性能发展进入了快车道。本文主要结合微软和英伟达提供的资料简要总结了一下wsl中调用GPU的原理以及使用GPU进行3D渲染加速和CUDA编程可能遇到的问题。
原理关于wsl是如何调用GPU加速的主要参考了这篇微软推出的博客。这篇博客里把大概的原理讲清楚了,简单来说就是hyperv虚拟机虚拟了一个/dev/dxg硬件,这个硬件通过WDDM(Windows Display Driver Model)(版本不低于2.9)共享了Windows端的显卡,然后在这个虚拟出的硬件上建立了一个Direct 3D的API实现了在Linux上使用Direct 3D(真的会有人在Linux上用这个吗。。。) ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2023/07/26/DRL_RaisimGymTorch/" title="强化学习仿真器Raisim进行深度强化学习的初步尝试"><img class="post-bg" src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/RaisimInstall/logo.png" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="强化学习仿真器Raisim进行深度强化学习的初步尝试"></a></div><div class="recent-post-info"><a class="article-title" href="/2023/07/26/DRL_RaisimGymTorch/" title="强化学习仿真器Raisim进行深度强化学习的初步尝试">强化学习仿真器Raisim进行深度强化学习的初步尝试</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-07-26T08:12:32.000Z" title="发表于 2023-07-26 16:12:32">2023-07-26</time></span></div><div class="content">强化学习仿真器Raisim进行深度强化学习的初步尝试本文主要结合Raisim官方实例,介绍如何使用Raisim进行深度强化学习。本文主要参考了Raisim官方文档,以及Raisim的github仓库中的一些例子。部分内容使用AI辅助生成。
raisimGymTorch是raisim的Gym环境示例。还提供了一个简单的基于pytorch的RL框架,但它应该可以很好地与任何其他RL框架配合使用。该项目使用pybind11作为python接口,这样的好处是将矢量化环境包装在C++中,以便使用OpenMP在C++中完成并行化,这极大地提高了仿真速度。这里直接上官方的图。
如图所示,该框架定义了Environment类型,在该类中完成环境的定义。然后VectorizedEnvronment将Environment进行矢量化,以便在C++中进行并行化。最后riasim_gym.cpp和RaisimVecEnv.py使用pybind11将上述C++环境封装成python包供其他RL框架调用。并行化的过程是在C++中完成的,因此可以大大提高仿真速度。
RaisimGymTorch的使用可以参考官方文 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2023/07/26/DRL_RaisimInstall/" title="强化学习仿真器Raisim的安装,配置,与初步使用"><img class="post-bg" src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/RaisimInstall/logo.png" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="强化学习仿真器Raisim的安装,配置,与初步使用"></a></div><div class="recent-post-info"><a class="article-title" href="/2023/07/26/DRL_RaisimInstall/" title="强化学习仿真器Raisim的安装,配置,与初步使用">强化学习仿真器Raisim的安装,配置,与初步使用</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-07-26T06:12:32.000Z" title="发表于 2023-07-26 14:12:32">2023-07-26</time></span></div><div class="content">强化学习仿真器Raisim的安装,配置,与初步使用
写在前面 – 最近入坑了强化学习,看了一些基础理论后觉得需要实操一下,于是便研究了一下Raisim这个仿真器。这个仿真器使用的人较少,网上资料也不多,所以在这里记录一下,以便后续查阅。不过说实话,新入强化学习的坑还是建议从OpenAI的gym(gymnasium)看起,毕竟资料多,而且也有很多成熟的算法可以直接使用。不像Raisim是一个单纯的仿真器,gym是一个完整的强化学习框架,可以直接使用,以及配合”stable baseline3”使用可以很快速的将demo跑起来。不过Raisim的优点也很明显,就是仿真速度快,而且可以直接使用C++进行编程,并利用OpenMP并行加速。所以在一些对速度要求较高的场景下,Raisim还是很有优势的。
本文主要介绍了Raisim仿真器的安装,配置,并简要介绍API,以及如何使用Raisim仿真器来进行强化学习仿真环境的搭建。本文主要参考了Raisim官方文档,以及Raisim的github仓库中的一些例子。部分内容使用AI辅助生成。
Raisim简介和安装Raisim是由ETH Zurich的 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2023/05/20/Image_Segmentation_via_Spectral_Clustering/" title="Image Segmentation via Spectral Clustering"><img class="post-bg" src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog%2FShapes.jpg" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="Image Segmentation via Spectral Clustering"></a></div><div class="recent-post-info"><a class="article-title" href="/2023/05/20/Image_Segmentation_via_Spectral_Clustering/" title="Image Segmentation via Spectral Clustering">Image Segmentation via Spectral Clustering</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-05-20T06:12:32.000Z" title="发表于 2023-05-20 14:12:32">2023-05-20</time></span></div><div class="content">Image Segmentation via Spectral Clustering
Abstract-Image Segmentation is a classic computer vision problem, which is also one of the foundation stones for many computer vision applications, e.g., 3D reconstruction, object tracking. This paper implemented two classic image segmentation methods via spectral clustering. Namely, the image segmentation based on K-means clustering and image segmentation based on normalized cuts and spectral clustering. Although nowadays most image segmentation method ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2023/03/24/JacobiBasedPTZControl/" title="基于图像雅可比的目标跟踪控制"><img class="post-bg" src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/JacobiPTZControl/Picture1.png" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="基于图像雅可比的目标跟踪控制"></a></div><div class="recent-post-info"><a class="article-title" href="/2023/03/24/JacobiBasedPTZControl/" title="基于图像雅可比的目标跟踪控制">基于图像雅可比的目标跟踪控制</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-03-24T06:12:32.000Z" title="发表于 2023-03-24 14:12:32">2023-03-24</time></span></div><div class="content">基于图像雅可比的目标跟踪控制本文从李群李代数的方式对二轴云台的目标跟踪控制(视觉伺服)问题进行了推导。基于图像的视觉伺服(IBVS)问题多使用基于解析几何的方法进行推到,但是似乎很少有人使用李群李代数进行推到。本文使用李代数完成对基于图像雅可比的视觉伺服问题推导,相比于解析几何的方法,我认为在面对更多更复杂关节的情况下,李代数的方法更具有通用性。下面将介绍系统模型,并基于此模型开始推导。
系统建模
系统模型如上图所示,该系统由两个相机和一个二关节云台构成,其中C1相机为广角相机,C2相机为长焦相机。该系统将使用C1相机检测目标,并控制C2相机跟踪目标。该系统的目标是使C2相机的视野中始终包含目标,即在C1相机能看到目标的情况下使目标在C2相机视野中移动。{C1},{C2}坐标系为前文所述两相机的坐标系; {G1},{G2}为电机法兰坐标系; {M1}{M2}为电机基座坐标系,{M}系与{G}系的z轴同方向共线。
目标目标是使C2相机的视野中始终包含目标,即在C1相机能看到目标的情况下使目标在C2相机视野中移动。为了实现上述目标,我们需要获得长焦相机中目标像素坐标与相机光心坐标的误差与云 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/11/13/360VO_Research/" title="Research Report of 360VO Visual Odometry Using A Single 360 Camera"><img class="post-bg" src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog%2FShapes.jpg" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="Research Report of 360VO Visual Odometry Using A Single 360 Camera"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/11/13/360VO_Research/" title="Research Report of 360VO Visual Odometry Using A Single 360 Camera">Research Report of 360VO Visual Odometry Using A Single 360 Camera</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-11-13T06:12:32.000Z" title="发表于 2022-11-13 14:12:32">2022-11-13</time></span></div><div class="content">Research Report of 360VO: Visual Odometry Using A Single 360 Camera
Abstract—This article is a review and evaluation of the paper 360VO: Visual Odometry Using A Single 360 Camera in the 2022 IEEE International Conference on Robotics and Automation (ICRA). Starts from this article and summarizes the method of it and then presents the related works. Then, some improvement directions are proposed for this article. Finally, the commercial value and social value of the visual slam field are discussed ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/#content-inner">2</a><span class="space">…</span><a class="page-number" href="/page/5/#content-inner">5</a><a class="extend next" rel="next" href="/page/2/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/zzslogo.jpg" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.gif'" alt="avatar"/></div><div class="author-info__name">Zishun Zhou</div><div class="author-info__description">周子顺</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">43</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">39</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">1</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/ZzzzzzS"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/ZzzzzzS" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="mailto:[email protected]" target="_blank" title="Email"><i class="fas fa-envelope"></i></a><a class="social-icon" href="/atom.xml" target="_blank" title="RSS"><i class="fas fa-rss"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">这个人很懒,他什么也没留下</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/2024/06/25/DRL_LeggedgymCartpole2/" title="强化学习仿真环境Legged Gym的初步使用——训练一个二阶倒立摆"><img src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/DRL_cartpole2/cover.jpg" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="强化学习仿真环境Legged Gym的初步使用——训练一个二阶倒立摆"/></a><div class="content"><a class="title" href="/2024/06/25/DRL_LeggedgymCartpole2/" title="强化学习仿真环境Legged Gym的初步使用——训练一个二阶倒立摆">强化学习仿真环境Legged Gym的初步使用——训练一个二阶倒立摆</a><time datetime="2024-06-25T04:00:00.000Z" title="发表于 2024-06-25 12:00:00">2024-06-25</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2024/06/21/DRL_LeggedgymInstall/" title="强化学习仿真器Isaac Gym的安装与配置"><img src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/DRL_installIsaacgym/cover.png" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="强化学习仿真器Isaac Gym的安装与配置"/></a><div class="content"><a class="title" href="/2024/06/21/DRL_LeggedgymInstall/" title="强化学习仿真器Isaac Gym的安装与配置">强化学习仿真器Isaac Gym的安装与配置</a><time datetime="2024-06-21T04:00:00.000Z" title="发表于 2024-06-21 12:00:00">2024-06-21</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2024/05/21/start_rl/" title="机器人控制中的强化学习极简入门指南"><img src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/start_rl/cover.jpg" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="机器人控制中的强化学习极简入门指南"/></a><div class="content"><a class="title" href="/2024/05/21/start_rl/" title="机器人控制中的强化学习极简入门指南">机器人控制中的强化学习极简入门指南</a><time datetime="2024-05-21T04:00:00.000Z" title="发表于 2024-05-21 12:00:00">2024-05-21</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2023/10/14/conclusion-of-entropy/" title="机器学习中的各种熵总结"><img src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/conclusion_of_entropy/th.jpg" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="机器学习中的各种熵总结"/></a><div class="content"><a class="title" href="/2023/10/14/conclusion-of-entropy/" title="机器学习中的各种熵总结">机器学习中的各种熵总结</a><time datetime="2023-10-14T10:40:13.000Z" title="发表于 2023-10-14 18:40:13">2023-10-14</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2023/08/30/wslgperformace/" title="WSL中的GPU原理总结"><img src="https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/wslgpuperformance/logo.png" onerror="this.onerror=null;this.src='https://zzshubimage-1253829354.cos.ap-beijing.myqcloud.com/blog/404.jpg'" alt="WSL中的GPU原理总结"/></a><div class="content"><a class="title" href="/2023/08/30/wslgperformace/" title="WSL中的GPU原理总结">WSL中的GPU原理总结</a><time datetime="2023-08-30T06:12:32.000Z" title="发表于 2023-08-30 14:12:32">2023-08-30</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
<i class="fas fa-folder-open"></i>
<span>分类</span>
</div>
<ul class="card-category-list" id="aside-cat-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E4%BD%9C%E5%93%81/"><span class="card-category-list-name">作品</span><span class="card-category-list-count">1</span></a></li>
</ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/wsl/" style="font-size: 1.1em; color: #999">wsl</a> <a href="/tags/%E6%9C%BA%E5%99%A8%E4%BA%BA/" style="font-size: 1.21em; color: #999ea4">机器人</a> <a href="/tags/%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0/" style="font-size: 1.39em; color: #99a4b4">强化学习</a> <a href="/tags/IAR/" style="font-size: 1.1em; color: #999">IAR</a> <a href="/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/" style="font-size: 1.1em; color: #999">机器学习</a> <a href="/tags/Hacintosh/" style="font-size: 1.1em; color: #999">Hacintosh</a> <a href="/tags/%E4%BD%9C%E5%93%81/" style="font-size: 1.27em; color: #99a0a9">作品</a> <a href="/tags/%E8%93%9D%E7%89%99/" style="font-size: 1.16em; color: #999b9e">蓝牙</a> <a href="/tags/ARM/" style="font-size: 1.5em; color: #99a9bf">ARM</a> <a href="/tags/State-Estimation/" style="font-size: 1.1em; color: #999">State Estimation</a> <a href="/tags/%E9%9B%B7%E8%BE%BE%E5%8E%9F%E7%90%86/" style="font-size: 1.1em; color: #999">雷达原理</a> <a href="/tags/2017%E7%94%B5%E8%B5%9B/" style="font-size: 1.1em; color: #999">2017电赛</a> <a href="/tags/GCC/" style="font-size: 1.1em; color: #999">GCC</a> <a href="/tags/register/" style="font-size: 1.44em; color: #99a7ba">register</a> <a href="/tags/mips/" style="font-size: 1.16em; color: #999b9e">mips</a> <a href="/tags/blog/" style="font-size: 1.21em; color: #999ea4">blog</a> <a href="/tags/%E9%94%99%E8%AF%AF%E6%8A%A5%E5%91%8A/" style="font-size: 1.1em; color: #999">错误报告</a> <a href="/tags/VSCode/" style="font-size: 1.1em; color: #999">VSCode</a> <a href="/tags/BLE/" style="font-size: 1.1em; color: #999">BLE</a> <a href="/tags/%E4%BB%BF%E7%9C%9F%E5%99%A8/" style="font-size: 1.16em; color: #999b9e">仿真器</a> <a href="/tags/Qt/" style="font-size: 1.21em; color: #999ea4">Qt</a> <a href="/tags/mathjax/" style="font-size: 1.1em; color: #999">mathjax</a> <a href="/tags/Linux/" style="font-size: 1.21em; color: #999ea4">Linux</a> <a href="/tags/FPGA/" style="font-size: 1.1em; color: #999">FPGA</a> <a href="/tags/718%E5%88%9B%E6%96%B0%E5%AE%9E%E9%AA%8C%E5%AE%A4/" style="font-size: 1.27em; color: #99a0a9">718创新实验室</a> <a href="/tags/Computer-Vision/" style="font-size: 1.33em; color: #99a2af">Computer Vision</a> <a href="/tags/python/" style="font-size: 1.1em; color: #999">python</a> <a href="/tags/kinetis/" style="font-size: 1.44em; color: #99a7ba">kinetis</a> <a href="/tags/github/" style="font-size: 1.1em; color: #999">github</a> <a href="/tags/%E5%AE%89%E5%8D%93/" style="font-size: 1.16em; color: #999b9e">安卓</a> <a href="/tags/OpenWrt/" style="font-size: 1.16em; color: #999b9e">OpenWrt</a> <a href="/tags/%E6%95%B0%E5%AD%97%E4%BF%A1%E5%8F%B7%E5%A4%84%E7%90%86/" style="font-size: 1.27em; color: #99a0a9">数字信号处理</a> <a href="/tags/docker/" style="font-size: 1.1em; color: #999">docker</a> <a href="/tags/%E4%B8%AA%E4%BA%BA%E6%80%BB%E7%BB%93/" style="font-size: 1.1em; color: #999">个人总结</a> <a href="/tags/hexo/" style="font-size: 1.1em; color: #999">hexo</a> <a href="/tags/MCS51/" style="font-size: 1.1em; color: #999">MCS51</a> <a href="/tags/STM32/" style="font-size: 1.33em; color: #99a2af">STM32</a> <a href="/tags/SLAM/" style="font-size: 1.16em; color: #999b9e">SLAM</a> <a href="/tags/Control/" style="font-size: 1.1em; color: #999">Control</a></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span><a class="card-more-btn" href="/archives/" title="查看更多">
<i class="fas fa-angle-right"></i></a></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/06/"><span class="card-archive-list-date">六月 2024</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/05/"><span class="card-archive-list-date">五月 2024</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/10/"><span class="card-archive-list-date">十月 2023</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/08/"><span class="card-archive-list-date">八月 2023</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/07/"><span class="card-archive-list-date">七月 2023</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/05/"><span class="card-archive-list-date">五月 2023</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/03/"><span class="card-archive-list-date">三月 2023</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/11/"><span class="card-archive-list-date">十一月 2022</span><span class="card-archive-list-count">1</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">43</div></div><div class="webinfo-item"><div class="item-name">本站总字数 :</div><div class="item-count">92.2k</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2024-07-04T05:36:48.250Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2017 - 2024 By Zishun Zhou</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div><div class="footer_custom_text">喵喵喵喵喵</div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="translateLink" type="button" title="简繁转换">繁</button><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside-config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="https://cdnjs.cloudflare.com/ajax/libs/hexo-theme-butterfly/4.13.0/js/utils.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/hexo-theme-butterfly/4.13.0/js/main.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/hexo-theme-butterfly/4.13.0/js/tw_cn.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/fancyapps-ui/5.0.33/fancybox/fancybox.umd.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/instant.page/5.2.0/instantpage.min.js" type="module"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/node-snackbar/0.1.16/snackbar.min.js"></script><div class="js-pjax"></div><script defer="defer" id="fluttering_ribbon" mobile="true" src="https://cdnjs.cloudflare.com/ajax/libs/butterfly-extsrc/1.1.3/canvas-fluttering-ribbon.min.js"></script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><div id="local-search"><div class="search-dialog"><nav class="search-nav"><span class="search-dialog-title">搜索</span><span id="loading-status"></span><button class="search-close-button"><i class="fas fa-times"></i></button></nav><div class="is-center" id="loading-database"><i class="fas fa-spinner fa-pulse"></i><span> 数据库加载中</span></div><div class="search-wrap"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"/></div></div><hr/><div id="local-search-results"></div><div id="local-search-stats-wrap"></div></div></div><div id="search-mask"></div><script src="https://cdnjs.cloudflare.com/ajax/libs/hexo-theme-butterfly/4.13.0/js/search/local-search.min.js"></script></div></div><script src="https://cdn.jsdelivr.net/npm/live2d-widget@^3.1.3/lib/L2Dwidget.min.js"></script><script>L2Dwidget.init({"pluginRootPath":"live2dw/","pluginJsPath":"lib/","pluginModelPath":"assets/","tagMode":false,"debug":false,"model":{"jsonPath":"https://cdn.jsdelivr.net/npm/live2d-widget-model-shizuku/assets/shizuku.model.json"},"display":{"position":"left","hOffset":60,"vOffset":0,"width":150,"height":300},"mobile":{"show":false},"react":{"opacity":1},"dialog":{"enable":true,"hitokoto":true},"log":false});</script></body></html>