tobot

  • 2025-06-24
  • 发表了主题帖: 基于昉·星光2的BACnet协议研究(补充)

    重新优化了代码,把“锁”的管脚改到了39、40。 执行如下命令 cd /sys/class/gpio  echo 44 > export cd gpio44 echo in > direction   现在流畅度好得多了, [localvideo]bca0d63fd36924a3254836a66d79a338[/localvideo]   关于板卡上的信息输出: 原计划使用spi的门禁电机被人拿走,手边的屏幕max7219和ST7789都没调好,只能使用WS2812凑合,但显示起来很丑。 [localvideo]b077a01f233123341fd45d1ef336813b[/localvideo] [localvideo]5aa01f2695bbfb1deb9f4e9e53322bf6[/localvideo] 而且即使操作了,板卡上的状态已经改变了,还是把信息滚屏完成才改下一条,好蠢。。。   另外,代码是附在帖子里面还是需要上传到哪里?我记得参加之初好像说是原厂要的。。。

  • 2025-06-22
  • 回复了主题帖: MAX7219在昉·星光2上的奇怪显示

    我用这块板子点亮了ws2812,过段时间发

  • 发表了主题帖: 基于昉·星光2的BACnet协议研究

    突然看到群里消息,今天居然是提交最后一天,赶紧把还没彻底完成的项目提交了。赶工可能搞得文字有点乱,过段时间再进一步修改。 在本次昉·星光2的试用过程中,利用板卡上的千兆网口,研究了BACnet协议,并基于这个协议开发了应用。 BACnet是一个建筑内使用的网络协议,在本次实验中,只用到了其中非常少的一部分,重点研究内容包括:协议交互、PDU格式分析与报文构造,使用逻辑分析。 一、协议交互 在开始前,我们先介绍一下BACnet的几种常见动作: 1、某个设备(比如门禁),可以在网络中宣告它的存在,其它设备收到这个报文就能获取这个设备的地址(在以太网上是mac地址,在IP层面是IP地址)。这个过程和发送的报文我们一般叫做i-Am。 2、某个设备(比如管理电脑)如果需要获知某个设备地址用于管理,可以在网络中发送查询(但不一定会收到回应);这个发送过程以及报文,我们称之为who-Is。 3、如果电脑知道门禁的地址,就可以读取门禁的状态,并下一些配置指令。 在BACnet中,i-AM和who-Is都是典型的无证实服务,也都没有确保能够获取结果,在网络中广播,因此交互过程中采用的目标地址一般都是广播地址(本地广播或全局广播):     读、写以及应答理论上都只有点对点的需求,且操作应该有时序要求,因此是有证实服务,且需要带上序号(invoke id)。   在上述过程中的写过程会稍微麻烦一点。 二、报文格式 在BACnet协议中定义了八种不同的PDU,用以传递原语信息。本次实现了其中四种: 1、无证实请求:无证实请求PDU用于传送包含在无证实服务请求原语中的信息,在本次昉·星光2板卡上开发并实现了i-Am和who-Is的用法; 2、复杂确认:复杂确认用于传送响应有证实服务,PDU中除了包含服务请求已经成功执行之外还根据请求内容包含一些其它信息,在本次昉·星光2板卡上开发并实现了应答特定的readProperty、readPropertyMultiple、writeProperty; 3、简单确认:简单确认就比较简单,只是响应有证实服务请求,表示请求已经成功执行,PDU中的信息较少。 4、错误:错误PDU用于传送包含在一个服务响应原语中的信息,这个信息指出前一个服务请求完全失败的原因,也是用于响应有证实服务请求的。   另外由于所用成品工具(BACnetScan)的缺陷,我还单独在电脑上做了一个小工具,可以发送readProperty和writeProperty。       三、门禁系统 目标是使用bacnet控制门的开合,电脑上的小工具可以下发开启或关闭。在BACnetScan可以通过读取door-status属性看到门的状态,有已开(open)、已关(closed)、已锁(locked)、开启中(opening)、关闭中(closing),其中门是否锁住,是读取板卡上管脚电平获取。 大致逻辑是这样的: 事件 执行前v_door_status 显示内容 向控制电脑发送信息 执行后v_door_status 时间到达 Opening open 无 Open 时间到达 Closing closed 无 Closed 收到open请求 Open 不变 属性错误 Open 收到open请求 Closed open... 正常 Opening 收到open请求 Locked 不变 设备运行问题 Locked 收到open请求 Opening 不变 正在进行配置 Opening 收到open请求 Closing 不变 正在进行配置 Closing 收到close请求 Open closing 正常 Open 收到close请求 Closed 不变 属性错误 Closed 收到close请求 Locked 不变 设备运行问题 Locked 收到close请求 Opening 不变 正在进行配置 Opening 收到close请求 Closing 不变 正在进行配置 Closing 轮询检测到昉·星光2板卡的40脚为低电平 Open locked 告警 Locked 轮询检测到昉·星光2板卡的40脚为低电平(与GND相连) Closed locked 告警 Locked 轮询检测到昉·星光2板卡的40脚为低电平 (与GND相连) Opening locked 告警 Locked 轮询检测到昉·星光2板卡的40脚为低电平 (与GND相连) Closing locked 告警 Locked 轮询检测到昉·星光2板卡的40脚为低电平 (与GND相连) Locked 不变 无 Locked 轮询检测到昉·星光2板卡的40脚为高电平(悬空或与VCC相连) Open 不变 无 Open 轮询检测到昉·星光2板卡的40脚为高电平(悬空或与VCC相连) Closed 不变 无 Closed 轮询检测到昉·星光2板卡的40脚为高电平(悬空或与VCC相连) Opening 不变 无 Opening 轮询检测到昉·星光2板卡的40脚为高电平(悬空或与VCC相连) Closing 不变 无 Closing 轮询检测到昉·星光2板卡的40脚为高电平(悬空或与VCC相连) Locked closed 告警 Closed 执行效果: [localvideo]4491796bdf95059adc2f465142fbeae3[/localvideo]     可以看到响应略微有些慢,具体的原因还在分析,也许是python效率的原因。   在BACnetScan上可以看到当前状态,和板卡上代码运行的结果。如下: [localvideo]4f7f9963c13e7d8844a90e6f310a14a3[/localvideo]  

  • 2025-06-16
  • 回复了主题帖: MAX7219在昉·星光2上的奇怪显示

    qwqwqw2088 发表于 2025-6-16 07:47 烧入几个代码都是这样乱码显示,怀疑的硬件哪个地方焊接或连接问题 看问题1,又不太像是焊接问题,倒有点像代码问题(i==t)时候出现异常。。。 看问题2,感觉是缓存出问题了。。。

  • 发表了主题帖: MAX7219在昉·星光2上的奇怪显示

    MAX7219是一种多位LED显示驱动器,采用3线串行接口传送数据,可直接驱动64段LED点阵,支持多块MAX7219串接。   使用昉·星光2驱动这个MAX7219,得到了非常奇怪的显示, 情况一、第i行显示错误: 代码如下: import spidev import time # 初始化SPI接口 spi = spidev.SpiDev() spi.open(1, 0) spi.max_speed_hz = 200000 NUM_CHIPS = 4 # MAX7219寄存器地址 MAX7219_REG_SHUTDOWN = 0x0C MAX7219_REG_INTENSITY = 0x0A #亮度 MAX7219_REG_SCANLIMIT = 0x0B #点阵屏需要全扫描,设置为0x07 MAX7219_REG_DECODEMODE = 0x09 MAX7219_REG_DISPLAYTEST = 0x0F MAX7219_CMD_NOP = 0x0000 MAX7219_REG_DIG0 = 0x01 # 从这里开始是每个数字寄存器的地址 # 初始化 MAX7219 def max7219_init(): spi.xfer2([MAX7219_REG_SHUTDOWN,0x01]*4) spi.xfer2([MAX7219_REG_INTENSITY,0x01]*4) # 设置亮度(0x00-0x0F) spi.xfer2([MAX7219_REG_SCANLIMIT,0x07]*4) # 设置扫描限制为8(8x8点阵) spi.xfer2([MAX7219_REG_DECODEMODE,0x00]*4) spi.xfer2([MAX7219_REG_DISPLAYTEST,0x00]*4) # 清除显示内容 def clear_display(): for i in range(1,9): s = [i,0x0]*4 spi.xfer2(s) # 将每位都设置为 0 def fill_display(): for i in range(1,9): s = [i,0xff]*4 spi.xfer2(s) # 将每位都设置为 1 def show_i(t): for i in range(1,9): s = [i,t]*4 spi.xfer2(s) # 设置第t灯亮 if __name__ == "__main__": max7219_init() clear_display() show_i(1) 当show_i的参数设置为1时,显示如下:   参数设置为2时,显示:   设置为3,显示:   …… 设置为7,       情况二、锁存功能失效 期望显示内容:   代码如下: import spidev import time # 初始化SPI接口 spi = spidev.SpiDev() spi.open(1, 0) spi.max_speed_hz = 500000 NUM_CHIPS = 4 # MAX7219寄存器地址 MAX7219_REG_SHUTDOWN = 0x0C MAX7219_REG_INTENSITY = 0x0A #亮度 MAX7219_REG_SCANLIMIT = 0x0B #点阵屏需要全扫描,设置为0x07 MAX7219_REG_DECODEMODE = 0x09 MAX7219_REG_DISPLAYTEST = 0x0F MAX7219_CMD_NOP = 0x0000 MAX7219_REG_DIG0 = 0x01 # 从这里开始是每个数字寄存器的地址 # 初始化 MAX7219 def max7219_init(): spi.xfer2([MAX7219_CMD_NOP,0x00]*4) # 不操作 time.sleep(0.005) # 等待复位完成 spi.xfer2([MAX7219_REG_SHUTDOWN,0x01]*4) spi.xfer2([MAX7219_REG_INTENSITY,0x01]*4) # 设置亮度(0x00-0x0F) spi.xfer2([MAX7219_REG_SCANLIMIT,0x07]*4) # 设置扫描限制为8(8x8点阵) spi.xfer2([MAX7219_REG_DECODEMODE,0x00]*4) spi.xfer2([MAX7219_REG_DISPLAYTEST,0x00]*4) #spi.xfer2([MAX7219_REG_SHUTDOWN,0x01]*4) #print(dir(spi)) # 清除显示内容 def clear_display(): for i in range(1,9): s = [i,0x0]*4 print(s) spi.xfer2(s) # 将每位都设置为 0 def fill_display(): for i in range(1,9): s = [i,0xff]*4 #print(s) spi.xfer2(s) # 将每位都设置为 1 def opening(): dot_matrix = [ [1, 0x00, 1, 0x00, 1, 0x00, 1, 0x00], # 第一行 [2, 0x04, 2, 0x18, 2, 0x00, 2, 0x00], # 第二行 [3, 0x67, 3, 0x25, 3, 0xC0, 3, 0x00], # 第三行 [4, 0x94, 4, 0xbd, 4, 0x20, 4, 0x00], # 第四行 [5, 0x94, 5, 0xa1, 5, 0x20, 5, 0x00], # 第五行 #[6, 0x67, 6, 0x19, 6, 0x2a, 6, 0x80], # 第六行 #[7, 0x04, 7, 0x00, 7, 0x00, 7, 0x00], # 第七行 #[8, 0x04, 8, 0x00, 8, 0x00, 8, 0x00], # 第八行 ] for dot in dot_matrix: spi.xfer2(dot) if __name__ == "__main__": max7219_init() clear_display() opening() 在这个代码中,只有最后一行显示是正确的,其余显示都有问题,似乎是锁存出问题了(但在上面测试又好像没问题为什么会出现这样的情况,实在搞不明白。) 代码中显示6行   代码中显示5行    

  • 2025-06-11
  • 发表了主题帖: 昉·星光2上的BACnet基础研究

    本帖最后由 tobot 于 2025-6-12 01:01 编辑 BACnet(Building Automation and Control Networks)是专为楼宇自动化系统设计的开放通信协议,由ASHRAE(美国采暖、制冷与空调工程师学会)于1995年制定,较Modbus协议更为复杂,支持多种协议,支持安全性和多点通信,而且由于没有专利费用,支持多厂商设备互联,在各种建筑网络中得到应用。但很可惜,由于行业封闭性,BACnet的研究开放资料不多,协议本身甚至没有规定实现细节,只提供了简单的规则,在python中甚至很难找到现成的轮子可供调用(BAC0和bacpypes几乎没有文档支撑,如果真正需要快速开发,推荐java,用BacNet4j),在本次测评活动中,使用scapy对bytes流进行分析和处理。 在本次昉·星光2的测评中,前期花了不少时间在操作系统上,对应用研究时间确实有限,目前还有10天时间,现将情况汇报如下: 1)完成了Who-is和I-am的研究和实现。 2)完成了ReadProperty和ReadPropertyACK的实现。 3)暂未完成WriteProperty功能。   BACnet用户使用 Who-Is服务确定网络上的BACnet设备,可以读取对象标识符和网络地址或根据对象标识符获取网络地址,设备使用I-am应答。二者均为无证实服务。 目前将昉·星光2板卡作为BACnet设备,监听eth0接口,如果收到Who-is,则将自己的Device对象实例信息发出,这样在客户端就可以建立与设备的连接。 ReadProperty服务则是用来获取Object状态的,这里同样使用监听-应答实现。如下: [localvideo]414f44c9ffbf56367ab5ad869b770fa0[/localvideo]   通过wireshark抓包,也可以看到回应成功  

  • 2025-06-08
  • 发表了主题帖: 昉·星光2的网络功能

    在计划之初,希望用这块板卡开发网络应用,目前进度比较缓慢,先做一个最基础的网络应用(仿一个主机)吧,可以使用icmp功能探测网络连通性,可以做arp解析、可以响应arp请求和icmp请求。如下: 一、构造一个测试路径: 1、增加连接到NFS的IP地址 ip address add 192.168.137.5/24 dev eth0   2、在windows上启用nfs服务,指定目录     3、挂载NFS盘 在昉·星光2板卡上先新建/codetest目录, 输入命令mount -t nfs 192.168.137.1:/d/tmp /codetest   这时只需要修改windows中tmp目录下的文件,在昉·星光2中进行验证就可以了。   二、安装必要的开发环境 由于操作系统自带的python3基本没有可用库,因此还需要重新安装: 1、增加缺省路由 ip route add default via 192.168.137.1 dev eth0   2、修改/etc/resolv.conf文件: nameserver 192.168.1.1 nameserver 223.5.5.5 nameserver 8.8.8.8   3、安装python3-pip apt-get install python3-pip   4、安装scapy pip install scapy   5、检查scapy可调用的网络接口     三、代码验证 尝试编写一个测试代码,在eth0上虚拟一个192.168.137.10的主机。源码: 执行   可以看到确实学习到了192.168.137.1的arp信息。 在192.168.137.1上,也增加了这个host的信息。   而且还可以ping得通。   我们也可以看到在开发板上,并没有相应的192.168.137.10地址。   说明我们在windows主机上看到和测试的192.168.137.10是本代码“模拟”出来的

  • 2025-06-06
  • 发表了主题帖: 昉·星光2使用网络加载系统

    本帖最后由 tobot 于 2025-6-6 23:01 编辑 如前(https://bbs.eeworld.com.cn/thread-1317137-1-1.html)所述,编译完成vmlinuz.efi之后,准备考虑直接通过网络加载,目前结果如下:     看起来是uimg没有加载,导致dtb文件不合适,目前使用dts的编写如下:   在RISC-V架构中,SBI(Supervisor Binary Interface)是用于处理监督模式(S-mode)下的系统调用的接口。当发生陷阱(trap)时,系统会调用陷阱处理程序(trap handler)来处理这些异常。如果在处理陷阱时发生错误,就会产生SBI陷阱错误(SBI trap error)。 搞不定这个的话,估计无盘启动也没戏……

  • 2025-06-03
  • 回复了主题帖: VisionFive2开发板试用-5 Deepseek多架构横向对比

    按介绍,昉·星光2带npu,如果能调用其性能应该还不错。

  • 2025-06-02
  • 发表了主题帖: 昉·星光2的系统编译

    在昉·星光2的前面实验中,发现目前在用的系统无法启动(https://bbs.eeworld.com.cn/thread-1316170-1-1.html),换了TF卡也没解决,于是考虑自己编译,如下: 在windows系统上先安装wsl(过程略)。 从拉取码云上的riscv-gnu-toolchain镜像。 码云地址为:https://gitee.com/mirrors/riscv-gnu-toolchain git clone  https://gitee.com/mirrors/riscv-gnu-toolchain ~/.bashrc文件里增加环境变量   配置 ./configure --prefix=$RISCV  --enable-multilib 尝试make -j8 发现由于.gitmodules文件的链接还是github,如下:   因此make还是会非常慢,在gitee上拉取对应内容 riscv-newlib:https://gitee.com/mirrors/riscv-newlib riscv-binutils:https://gitee.com/mirrors/riscv-binutils-gdb riscv-gdb:https://gitee.com/mirrors/riscv-binutils-gdb(riscv-gdb和riscv-binutils为同一个仓库下的不同分支) riscv-dejagnu:https://gitee.com/mirrors/riscv-dejagnu riscv-glibc:https://gitee.com/mirrors/riscv-glibc riscv-gcc:https://gitee.com/mirrors/riscv-gcc   修改makefile文件,确保符合下载路径   再make一下,耐心等待完成   可以看到bin路径下已经有了64位环境,   查询资料,如果要生成32位环境需要修改config参数 ./configure --prefix=$RISCV --with-arch=rv32gc --with-abi=ilp32d 再make一遍,查看bin目录   文件名里面的unknown是可以删掉的。 这里不用apt-get install gcc-riscv64-linux-gnu的原因是试过了,但没法用(不确定原因)。 再修改/etc/sudoers文件,在secure_path增加环境变量,把刚才的文件目录加进去。   接下来,在github中下载 https://github.com/starfive-tech/linux/archive/refs/heads/visionfive.tar.gz 解压 tar xzvf visionfive.tar.gz 会生成目录linux-visionfive,直接进去 make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- nconfig   直接选择缺省值,F6保存以后,执行 make -j8 ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- 在这一步中,可能会提示有文件缺失,缺失的文件一般都是ubuntu上自带的,可以apt-get install安装。   例如我这里提示缺少了zstd,就使用apt-get install zstd。 多尝试几次就成功了。   调整成功后,在arch/riscv/boot/目录下,会生成vmlinuz文件。   我们知道vmlinuz是Linux 内核的镜像文件,可以被引导程序加载,从而启动Linux系统。接下来准备把这个烧入TF卡,试试能否启动成功。  

  • 2025-05-26
  • 回复了主题帖: 久等了~~2025花灯节活动颁奖啦!

    已确认

  • 2025-05-25
  • 回复了主题帖: 昉·星光2的系统异常

    lugl4313820 发表于 2025-5-25 07:41 换个镜像包试试,一般来讲是卡的问题居多。 我也是这么想的

  • 2025-05-23
  • 回复了主题帖: 昉·星光2的系统异常

    没错,我一开始也是怀疑TF的原因,尝试了3个TF卡,联想32G、netac 64G、大华128G,都卡在相同位置~   同时坏掉的可能性真不大。。。 接下来准备换个版本再试试

  • 发表了主题帖: 昉·星光2的系统异常

    在某次加电的过程中,发现板卡不能正常启动, 打印信息一般会停在   或者   看起来是dev-mqueue.mount损坏。 初步怀疑是TF的问题,取出TF卡放在windows下无法读取,使用DG工具     重新恢复文件,还是不能正常启动。 换了了TF卡,重烧系统还是不行。怀疑板卡内部可能什么寄存器出现了问题。 根据网上搜索:Linux中,POSIX消息队列是一种进程间通信(IPC)机制。它允许不同的进程之间通过消息队列进行数据交换。为了使用POSIX消息队列,首先需要在系统中创建一个消息队列节点,并将其挂载到文件系统的一个特定目录下。这个特定目录通常是/dev/mqueue,而挂载的过程则是通过dev-mqueue.mount服务来完成的,考虑是否修改mount过程,把这个目录挂载在其它位置(比如nfs上)。

  • 2025-05-05
  • 回复了主题帖: 昉·星光2开箱

    吾妻思萌 发表于 2025-5-4 10:42 有无lvds接口呀? 木有。

  • 2025-05-03
  • 发表了主题帖: 昉·星光2开箱

    这次拿到的昉·星光2是一款RISC-V单板计算机,使用JH7110的64位四核SoC,可达1.5G,使用了Imagination的IMG BXE-4-32 MC1 GPU。 从https://debian.starfivetech.com/找到链接,可以看到镜像文件的下载,我这里使用百度网盘获取(https://github.com/starfive-tech/VisionFive2/releases里也有):   手边只有tf卡,因此需要下载SD启动包,从202409/sd目录下找到starfive-jh7110-202409-SD-minimal-desktop-wayland.img.bz2文件,下载到本地后解压,得到img文件,使用Win32DiskImager烧写:   顺便查看一下系统如何使用,可以从网站 https://doc.rvspace.org/VisionFive2/Datasheet/VisionFive_2/gpio_pin_assig.html 上找到使用uart连接的方式(网站虽然略显潦草,比如表格中Pin Name后面有三个Pin Num),但至少可用:   可以看到+5V、GND以及UART TX/RX进行控制线正好是连在一排的,拿根uart线连上:   使用波特率115200,可以看到进入系统 设备正常启动,缺省用户root,密码starfive   进入系统,当然是先看cpu   还有内存   再看看存储空间    

  • 2025-04-28
  • 回复了主题帖: 测评入围名单: 昉·星光 2 (VisionFive 2)高性能RISC-V单板计算机

    个人信息无误,确认可以完成测评分享计划

  • 2025-04-25
  • 回复了主题帖: MuJoCo 机械臂 PPO 强化学习逆向运动学(IK)

    bigbat 发表于 2025-4-25 08:17 这种训练可以训练出各种自适应的动作就好了,例如:使用机械臂摊煎饼 应该可以做到的。。。

  • 2025-04-23
  • 回复了主题帖: 从 LabelImg 到 Label Studio!AI 数据标注神器升级,Web 版真香

    感觉是使用已经做好规则的AI再重新标记,实现labelimg功能

  • 2025-04-02
  • 发表了主题帖: 跟我学:每天5分钟,一个月入门mujoco(1.4)

    书接上回(估计鸽了一个月了吧),上次我们从高空丢下一个红球和一个蓝球,现在我们换两个东西丢下来: [localvideo]1bdd8210a344b2175a36449f67eca30a[/localvideo] 一个恐龙玩具和一个人偶 其中恐龙玩具是stl模型,人偶是从mujoco自带的humanoid.xml里的素材“torso”,使用xml模型剪切出来。 附件: 代码如下: import mujoco import mujoco.viewer import time from xml.dom import minidom def load_xml(xml): dom = minidom.parse(xml) return dom def get_root_element(dom): if dom is not None: root = dom.documentElement return root return None def get_child_elements(root,tag): if root is not None: child_elements = root.getElementsByTagName(tag) return child_elements return None def make_object(dom,obj): newnode = dom.createElement("geom") for k,v in obj.items(): newnode.setAttribute(k,v) return newnode def make_object(dom,obj,file_name,scale = "1 1 1"): root = get_root_element(dom) asset = get_child_elements(root,"asset") if asset == []: asset = dom.createElement("asset") root.appendChild(asset) else: asset = asset[0] mesh = dom.createElement("mesh") mesh.setAttribute("file",file_name) mesh.setAttribute("name",obj["mesh"]) mesh.setAttribute("scale",scale) asset.appendChild(mesh) newnode = dom.createElement("geom") for k,v in obj.items(): newnode.setAttribute(k,v) return newnode def add_object_neo(pnode,newnode,geom_in_body_color=None): if newnode.nodeName == "geom": tmpbody = dom.createElement("body") tmpnode = dom.createElement("joint") tmpnode.setAttribute("type","free") tmpbody.appendChild(tmpnode) tmpbody.appendChild(newnode) pnode.appendChild(tmpbody) if newnode.nodeName == "body": if geom_in_body_color: geoms = get_child_elements(newnode,"geom") for geom in geoms: geom.setAttribute("rgba", geom_in_body_color) pnode.appendChild(newnode) def get_body(obj_file,obj_name): obj_dom = minidom.parse(obj_file) obj_nodes = obj_dom.getElementsByTagName("body") for obj_node in obj_nodes: if obj_node.getAttribute("name") == obj_name: return obj_node if __name__ == "__main__": dom = load_xml("tower.xml") root = get_root_element(dom) pnode = get_child_elements(root, "worldbody")[0] Aristotle = get_body("humanoid.xml","torso") Aristotle.setAttribute("pos","16 1.5 31.6") add_object_neo(pnode,Aristotle,"0 0 .9 1") file_name = "triceratops.stl" triceratops = {} triceratops["type"] = "mesh" triceratops["pos"] = "16 -1.5 30" triceratops["mesh"] = "dino" triceratops["rgba"] = ".9 0 0 1" triceratops["euler"] = "90 0 0" newnode = make_object(dom,triceratops,file_name,".08 .08 .08") add_object_neo(pnode,newnode) model = mujoco.MjModel.from_xml_string(dom.toxml()) data = mujoco.MjData(model) viewer = mujoco.viewer.launch_passive(model, data) viewer.cam.azimuth = 145.0 viewer.cam.distance = 90 viewer.cam.elevation = -5.0 while True: mujoco.mj_step(model, data) viewer.sync() time.sleep(0.001) 好困,不想写代码分析了,把代码注释粘下面:          

最近访客

< 1/6 >

统计信息

已有397人来访过

  • 芯积分:1988
  • 好友:5
  • 主题:127
  • 回复:324

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言