Isaac Sim Docker 中使用 Python 脚本

笔记,记录个人尝试过程

主要目的:

  1. 直接在代码中运行仿真程序,并对某传感器帧率进行固定化设置,添加噪声等操作。

  2. 试多个场景的并行处理,和多用户/账户在远程Docker中的并行使用。

  3. 对车辆模型、车辆动力学等进行精细化处理。

原因:

  1. 当前设备不支持多场景多小车多传感器同时运行,硬件不足,需要远程使用别的服务器。

  2. 若不支持同时多场景同时运行,可以远程服务器中开一个仿真地图,本机开一个仿真地图。

  3. 我觉得不会不支持的...先试试看

尝试了用python独立脚本开启直播流和打开场景,但其它脚本无法同步使用。改,换使用扩展。

Isaac Sim教程07 拓展编程Extension_isaac sim extension-CSDN博客

大佬的博客中,很多代码中的意义都翻译了。

在扩展的ui_builder.py中,只有_setup_scene函数是对场景的具体设置,其它都是些ui界面的设置,和重置场景等功能,场景中已经有了完善的内容,不需要在此处添加机器人和一些执行逻辑,全都注释掉。

python 复制代码
    def _setup_scene(self):
        """
        LOAD 可加载此实例
        """
        usd_file = "/usd_path"

        # 加载已有场景
        open_stage(usd_path = usd_file)
        world = World()

        # # 加载ur10e模型
        # robot_prim_path = "/ur10e"
        # path_to_robot_usd = "omniverse://localhost/NVIDIA/Assets/Isaac/4.1/Isaac/Robots/UniversalRobots/ur10e/ur10e.usd"
        # # Do not reload assets when hot reloading.  This should only be done while extension is under development.
        # if not is_prim_path_valid(robot_prim_path):
        #     create_new_stage()
        #     add_reference_to_stage(path_to_robot_usd, robot_prim_path)
        # else:
        #     print("Robot already on Stage")
        # # 创建新的舞台
        # create_new_stage()
        # # 添加光源到舞台
        # self._add_light_to_stage()
        # # 将ur10e机械臂的USD参考添加到舞台
        # add_reference_to_stage(path_to_robot_usd, robot_prim_path)

        # # 创建固定的立方体
        # self._cuboid = FixedCuboid(
        #     "/Scenario/cuboid", position=np.array([0.3, 0.3, 0.5]), size=0.05, color=np.array([255, 0, 0])
        # ) 
        # # 实例化ur10e机械臂的Articulation
        # self._articulation = Articulation(robot_prim_path)

        # 获取世界实例
        # world = World.instance()

        # # 添加Articulation和Cuboid到世界中
        # world.scene.add(self._articulation)
        # world.scene.add(self._cuboid)

在原本的_setup_scenario函数中,调用了scenario.py中的逻辑,我将此处机械臂的运动逻辑改为了差速驱动轮的计算逻辑。

python 复制代码
    def _setup_scenario(self):
        """
        原本用来控制机械臂做循环移动(圆周)
        改成了轮式里程计的发布
        """
        None

        self._reset_scenario()

        # UI management
        self._scenario_state_btn.reset()
        self._scenario_state_btn.enabled = True
        self._reset_btn.enabled = True

isaac sim 扩展仅支持异步发布 rostopic,这里可看官方教程:在扩展中使用ros:
Custom Message --- Omniverse IsaacSim

python 复制代码
import asyncio
import rospy

try:
    rospy.init_node("hello", anonymous=True, disable_signals=True, log_level=rospy.ERROR)
except rospy.exceptions.ROSException as e:
    print("Node has already been initialized, do nothing")

async def my_task():
    from std_msgs.msg import String
    pub = rospy.Publisher("/hello_topic", String, queue_size=10)

    for frame in range(10):
        pub.publish("hello world " + str(frame))
        await asyncio.sleep(1.0)
    pub.unregister()
    pub = None

asyncio.ensure_future(my_task())
相关推荐
曲径海盗3 小时前
【Python 学习第 53 天】列表基础
python·学习笔记·编程入门
Dumbness3 小时前
群里 @ 机器人发"查订单",指令一条都没命中:微信群机器人在路由前漏掉的几步归一化
python·微信
用户1614840955454 小时前
用 M4 Pro 跑羽毛球视频 AI 分析(二):TrackNet MPS 加速 3.2 倍、卡尔曼滤波补漏与自动回合剪辑
python
用户4019925568614 小时前
基于对话树回溯的社媒评论流买方意图识别与噪音过滤实践
python
用户0332126663674 小时前
使用 Python 加密或解密 PDF 文档
python
小七-七牛开发者4 小时前
让 Go 走得更远:用 LLGo 打通 Go 与 C/C++/Python 生态
python·编程·编译器·llvm·llgo
CyrusYiVPP6 小时前
实测 Ollama 本地部署:我用 Python 搓了个离线问答机器人,Qwen4 27B 一到换个模型名就能用
人工智能·python
2601_967980116 小时前
Python中flatten( )函数及函数用法详解
python·numpy·数组操作·flatten函数·列表处理
xbzb6 小时前
自定义 yum 软件源:Linux 上 createrepo,Windows 上纯 Python 也能造
linux·运维·windows·python·yum·createrepo
我不会起名字3228 小时前
K8s Pod 反复重启 CrashLoopBackOff:从 exit code 到根因的 5 步排查
云原生·容器·kubernetes·k8s