0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NVIDIA Isaac Sim强化学习实作–让Jetbot自己学会道路驾驶!

jf_cVC5iyAO 来源:易心Microbit编程 作者:易心Microbit编程 2022-12-21 11:27 次阅读

1. 介绍

承续上篇 Isaac Sim 的介绍, 读者对于如何执行 Isaac Sim 以及它最基本的环境已经有了一些初步的了解了,接下来我们就要来玩一下能不能在模拟环境上部署深度学习模型来让 Jetbot 机器人从无到有自己学会道路驾驶,例如下面的范例影片,透过仿真的 Jetbot 镜头看出去,我们可以看到机器人确实有沿着道路在行走!

e6567f52-7f73-11ed-8abf-dac502259ad0.gif

本篇文章是参考 Nvidia 官方的范例教学做成的, 想要进一步了解的读者可以去参考看看哦。

2. 准备道路模型

要让机器人学会道路驾驶,最基本的就是要先有个道路可以让机器人去跑,我们在这边使用乐高的道路平板来拼凑出基本的道路,好让机器人可以学习如直走跟转弯。

2.1. LeoCAD

1.首先,我们必须去下载LeoCAD, 一款专门用来画乐高模型的绘图软件,请点选下方的链接来下载并安装。

e7545b40-7f73-11ed-8abf-dac502259ad0.png

2.安装完成后,启动 LeoCAD,在右边的零件表搜寻一下四种道路平板,

•44336p01 Baseplate 32×32 Road 6-Stud Straight

•44342p01 Baseplate 32×32 Road 6-Stud Curve

•44341p01 Baseplate 32×32 Road 6-Stud T-Junction

•44343p01 Baseplate 32×32 Road 6-Stud Crossroad

e78ca52c-7f73-11ed-8abf-dac502259ad0.png

3.可以试着把四片平板组合起来,看看是不是可以拼成以下的道路图。

e7beb062-7f73-11ed-8abf-dac502259ad0.png

4.那么最后就是把这几件平板输出成COLLADA 档,准备做进一步的转档处理。

e8a3332c-7f73-11ed-8abf-dac502259ad0.png

2.2. Blender

前面提过我们拿到了道路的 COLLADA 檔,这是一种用来在多个3D软件交换用的格式。但是我们还得要用 Blender 再进行一次转档,才能转成可以在 Isaac Sim 渲染的图档。

1.下载并安装 Blender

e8e48f70-7f73-11ed-8abf-dac502259ad0.png

2.将刚刚输出的 COLLADA 档汇到 Blender 中

e92fb0ea-7f73-11ed-8abf-dac502259ad0.png

汇入后应该可以看到道路的图文件显示如下

e955e922-7f73-11ed-8abf-dac502259ad0.png

3.接下来我们将每一块零件的偏移量归零,因为等会要丢到 Isaac Sim 时,会用程序组装出各种可能的道路,所以我们必须确保零件的原点都是一致的。

e99a06d4-7f73-11ed-8abf-dac502259ad0.png

4.从新命名每一个零件,方便我们待会汇入到Isaac Sim 时比较好辨认。

e9cf691e-7f73-11ed-8abf-dac502259ad0.png

5.最后输出图档成 Isaac Sim 可以吃的 fbx 檔。

ea03abd4-7f73-11ed-8abf-dac502259ad0.png

记得要在 Transform 那边选择 Z Up, X Forward。

ea3f088c-7f73-11ed-8abf-dac502259ad0.png

输出完成后,我们就会拿到下面四个图档。

•p44336p01.fbx

•p44342p01.fbx

•p44341p01.fbx

•p44343p01.fbx

2.3. 将图档汇入 Issac sim

接下来我们回到 Isaac Sim 中,我们要把前面的图档汇入到模拟环境中。首先,开启 Isaac Sim 并在左下角的 Content 中建立一个 Omniverse/localhost/Library/Props/Road_Tiles/Parts 的文件夹, 然后在右边的空白字段点右键,选择Import and Convert 来汇入 fbx 档案。

ea5f784c-7f73-11ed-8abf-dac502259ad0.png

假设我们前面的 fbx 档案是存在 Download 这个文件夹,我们就可以将他们全选并上传到 Nucleus 服务器,记得在上传的时候要勾选下面三个选项:

•Import Materials

•Import As Single USD

•Generate Smooth Normals

汇入后如下图

ea92aec4-7f73-11ed-8abf-dac502259ad0.png

最后检查一下是否我们要的四块道路图档都有被正确汇入了。

eacd16ea-7f73-11ed-8abf-dac502259ad0.png

3. 开始训练深度学习的模型

接下来的操作需要使用者有事先汇入 Isaac Sim 的 Asset 套件包,里面有机器学习的范例文件(如果不知道怎么汇入的读者可以去参考我们的上一篇文章: Isaac Sim 的介绍)。

有别于之前的操作都是直接使用 Isaac Sim 的图形化界面, 这次我们启动训练模型的程序方法是必须从终端机开始。首先, 在计算机上打开一个终端机,并输入下面的指令:

cd~/.local/share/ov/pkg/isaac_sim-2021.1.1/

这个的意思是切换目录到前面提到的 Isaac Sim 的 Asset 套件包的安装位置。

然后修改“python_samples/jetbot/road_environment.py” 这只程序,将道路图块的路径 改到我们刚刚放的地方,如下

# 1=I2=L 3=T, 4=X

self.tile_usd= {

0: None,

1: {"asset": nucleus_server +"/Library/Props/Road_Tiles/Parts/p44336p01/p44336p01.usd","offset": 180},

2: {"asset": nucleus_server +"/Library/Props/Road_Tiles/Parts/p44342p01/p44342p01.usd","offset": 180},

3: {"asset": nucleus_server +"/Library/Props/Road_Tiles/Parts/p44341p01/p44341p01.usd","offset": 180},

4: {"asset": nucleus_server +"/Library/Props/Road_Tiles/Parts/p44343p01/p44343p01.usd","offset": 180},

} # list of tiles that can be spawned

3.1. 确保 GPU 的记忆题足够训练模型

笔者的开发环境所用的笔电有的显卡是RTX 3070,但即便是拥有8G的内存还是无法负荷默认的模型训练参数,所以我们会做以下的调整,缩小模型训练时的吞吐量,虽然会模型学习的会比较慢,但至少确保能够正常运作。

我们修改“python_samples/jetbot/jetbot_train.py” , 这只程序是我们用来训练的主程序。 里面有一个地方是可以设定batch size 的大小,这个会决定模型每次训练的吞吐量,以笔者的8G显卡为例,可以设定的最大 batch size 大概是1024。修改如下:

ifargs.loaded_checkpoint == "":

model = PPO(

"CnnPolicy",

env,

verbose=1,

tensorboard_log=args.tensorboard_dir,

policy_kwargs=policy_kwargs,

device="cuda",

n_steps=args.step_freq,

batch_size=1024,

n_epochs=50,

learning_rate=0.0001,

)

另外,在开始训练前,建议关掉所有的 Isaac Sim 的软件,因为那都会重复占用到 GPU 的内存,我们只要保留由终端机执行训练程序所叫起的 Isaac Sim 就好。

一切准备就绪后我们就可以执行下面的指令来开始训练了。

./python.shpython_samples/jetbot/jetbot_train.py

上面的指令会自动叫出仿真的图形化界面,如果读者觉得暂时不需要花费算力去画出模拟的3D图,可以在后面加上 headless 来关闭图形化界面,等训练完一段时间后,再开启图形化界面确认模型的训练的效果也是可以的。

./python.shpython_samples/jetbot/jetbot_train.py --headless

4. 强化学习的训练机制

熟悉深度学习的读者一定知道在让模型去做学习的时候,能否给模型一个好的回馈是学习成败的关键,例如以宠物分类问题来说,我们会给模型看到哪些图片是猫,哪些图片是狗,藉此来让模型去学习。但是对于学习自动驾驶来说,机器人可以做到决策其实复杂度更高,比如说 Jetbot 可以随着时间变化行走的方向跟速度,至于要怎么判断机器人走得好不好,也许我们可以透过机器人的中心点到道路中间的距离来判断,另外,机器人的行走速度可能也是一个我们希望优化的量,好比说我们会希望机器人过弯的时候会懂得抄近路,而不是一味地死守道路中线。

当我们搞定好模型在学习这个问题的回馈之后,我们就可以来看一下具体模型的学习策略。对于强化学习的问题而言,我们没有办法马上知道模型此刻学的行为好或不好,比如说 Jetbot 可能在直线上可以走得很顺,但是一直到转弯处直接跑出界才发现其实它不会转弯。在这个范例程序中,我们主要会用以下的技术来帮助模型的学习:

1.使用 Open AI 所提出的 ProximalPolicy Optimization (PPO) 技术来做有效的强化学习,简单说就是在每一次的训练回合中,都会先生成一个固定模型参数的代打,下去我们的模拟环境跑各种的测试,然后我们再利用这些测试所搜集的数据来生成一个数据集,回过头更新我们之前的模型。其中的精妙之处在于我们不会轻易的将我们正在学的模型一直丢到测试环境中去验证,因为这样会导致模型在学习上很不稳定,同时也没有效率,变成说每次刚更新完的模型走一步测试后,这个资料就只用那么一次而已。

2.使用 Issac Sim 的 DomainRandomization 机制来加强模型的韧性。如果读者仔细观察机器人在学习的过程中其实场景是一直在变化的,我们的环境仿真程序不只会将我们前面的道路图块随机拼凑成不同的环形道路外,道路周遭的背景跟物品也都会随机生成,为的就是尽可能的让机器人适应不同点情况,达到我们真正想要它学习的任务。

5. 检视模型训练的结果

以笔者的经验,模型都需要经过两万多次以上的回合后,Jetbot 在道路上的行为才会收敛到我们所想象的自动驾驶,像是笔者的计算机(Intel i7 CPU + RTX 3070 GPU)大概会需要模型跑个一天的训练才能达到 一个可以接受的表现。

那如果是想要看看我们模型的表现如何,可以先停掉训练的程序,释放出可用的 GPU ,然后执行下面的程序

./python.shpython_samples/jetbot/jetbot_train.py --eval

程序会自动挑选目前为止训练最好的模型参数,然后套用在 Jetbot 跑道路模型的仿真上,如下,读者是否都能够看到自己训练的 Jetbot 都能够沿着道路跑一遍自动驾驶呢?

e6567f52-7f73-11ed-8abf-dac502259ad0.gif

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    206

    文章

    27025

    浏览量

    201374
  • NVIDIA
    +关注

    关注

    14

    文章

    4588

    浏览量

    101702
  • Sim
    Sim
    +关注

    关注

    2

    文章

    227

    浏览量

    39704
  • python
    +关注

    关注

    51

    文章

    4674

    浏览量

    83462

原文标题:NVIDIA Isaac Sim 强化学习实作 – 让 Jetbot 自己学会道路驾驶!

文章出处:【微信号:易心Microbit编程,微信公众号:易心Microbit编程】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用Isaac Gym 来强化学习mycobot 抓取任务

    使用Isaac Gym来强化学习mycobot抓取任务
    的头像 发表于 04-11 14:57 5612次阅读
    使用<b class='flag-5'>Isaac</b> Gym 来<b class='flag-5'>强化学习</b>mycobot 抓取任务

    反向强化学习的思路

    强化学习的另一种策略(二)
    发表于 04-03 12:10

    深度强化学习实战

    一:深度学习DeepLearning实战时间地点:1 月 15日— 1 月18 日二:深度强化学习核心技术实战时间地点: 1 月 27 日— 1 月30 日(第一天报到 授课三天;提前环境部署 电脑
    发表于 01-10 13:42

    将深度学习强化学习相结合的深度强化学习DRL

    深度强化学习DRL自提出以来, 已在理论和应用方面均取得了显著的成果。尤其是谷歌DeepMind团队基于深度强化学习DRL研发的AlphaGo,将深度强化学习DRL成推上新的热点和高度,成为人工智能历史上一个新的里程碑。因此,深
    发表于 06-29 18:36 2.8w次阅读

    强化学习在自动驾驶的应用

    自动驾驶汽车首先是人工智能问题,而强化学习是机器学习的一个重要分支,是多学科多领域交叉的一个产物。今天人工智能头条给大家介绍强化学习在自动驾驶
    的头像 发表于 07-10 09:00 4729次阅读
    <b class='flag-5'>强化学习</b>在自动<b class='flag-5'>驾驶</b>的应用

    什么是强化学习?纯强化学习有意义吗?强化学习有什么的致命缺陷?

    强化学习是人工智能基本的子领域之一,在强化学习的框架中,智能体通过与环境互动,来学习采取何种动作能使其在给定环境中的长期奖励最大化,就像在上述的棋盘游戏寓言中,你通过与棋盘的互动来学习
    的头像 发表于 07-15 10:56 1.7w次阅读
    什么是<b class='flag-5'>强化学习</b>?纯<b class='flag-5'>强化学习</b>有意义吗?<b class='flag-5'>强化学习</b>有什么的致命缺陷?

    当机器人遇见强化学习,会碰出怎样的火花?

    当机器人遇见强化学习,会碰出怎样的火花? 一名叫 Cassie 的机器人,给出了生动演绎。 最近,24 岁的中国南昌小伙李钟毓和其所在团队,用强化学习教 Cassie 走路 ,目前它已学会蹲伏走路
    的头像 发表于 04-13 09:35 2198次阅读
    当机器人遇见<b class='flag-5'>强化学习</b>,会碰出怎样的火花?

    基于Omniverse的NVIDIA Isaac Sim现已发布公测版

    Omniverse是NVIDIA模拟器的根本基础,包括加入了多项新功能的Isaac平台。NVIDIA Isaac Sim目前已发布公测版,您
    的头像 发表于 06-22 14:56 3163次阅读
    基于Omniverse的<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b> <b class='flag-5'>Sim</b>现已发布公测版

    NVIDIA Isaac Sim 2022.1版本的亮点及功能

    NVIDIA 宣布推出2022.1 版 NVIDIA Isaac Sim。作为一种机器人仿真和合成数据生成(SDG)工具,这个 NVIDIA
    的头像 发表于 07-01 11:19 1363次阅读

    NVIDIA AI机器人开发— NVIDIA Isaac Sim入门

    NVIDIA 最新公开课来了,本次将围绕用于开发和训练智能机器人的模拟平台—— NVIDIA Isaac SimNVIDIA
    的头像 发表于 10-19 15:58 1393次阅读

    开发者使用NVIDIA Omniverse和Isaac Sim构建机器人

    应用机器人学博士生 Antonio Serrano-Muñoz 创建了一个 Omniverse 扩展程序,以在 NVIDIA Isaac Sim 中使用机器人操作系统软件。
    发表于 10-21 09:41 454次阅读

    NVIDIA 公开课 | AI 机器人开发第二讲 — Isaac Sim 高阶开发

    NVIDIA 公开课——AI 机器人开发第二讲将于明日上线!本次精彩继续,嘉宾将深入讲解  NVIDIA Isaac Sim 的高阶开发 。 NVI
    的头像 发表于 11-10 11:00 608次阅读

    CES | 用 NVIDIA Isaac Sim 2022.2 模拟未来智能机器人

    NVIDIA 宣布推出  NVIDIA Isaac Sim  的  2022.2 版本 。作为机器人仿真和 合成数据 生成( SDG )工具,该 
    的头像 发表于 01-06 22:30 596次阅读

    强化学习与智能驾驶决策规划

    本文介绍了强化学习与智能驾驶决策规划。智能驾驶中的决策规划模块负责将感知模块所得到的环境信息转化成具体的驾驶策略,从而指引车辆安全、稳定的行驶。真实的
    的头像 发表于 02-08 14:05 1486次阅读

    使用 NVIDIA Isaac 仿真并定位 Husky 机器人

    如何使用 ROS 2 Husky 官方软件包将该机器人导入 NVIDIA Isaac Sim 并创建仿真。 本 Demo 中的 Husky 机器人配备了 NVIDIA Jetson O
    的头像 发表于 12-26 18:05 373次阅读
    使用 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Isaac</b> 仿真并定位 Husky 机器人