首页 > 解决方案 > BeamNG:VStates 未排队

问题描述

我正在使用 BeamNG.research 并使用 Python3.6 和客户端 BeamNGPy 与之通信。

当前的应用程序能够:

但是我在检索车辆的当前 vstate 时遇到了问题。当我发现 vstate 被正确请求时,收集这些请求结果的 beamngs 队列的 put 方法被调用,但队列保持为空,因此我无法获得当前的 vstate。

import time
import beamngpy

BEAMNG_BASEDIR = '<BeamNG_basedir>'
BEAMNG_X64_BINARY = '<BeamNG_64bit_binary>'

with beamngpy.beamng.BeamNGPy('localhost', 64256, userpath='<BeamNGUserpath>',
                              binary=BEAMNG_X64_BINARY, console=True) as bpy:
    bpy.load_scenario('levels/west_coast_usa/scenarios/my_first_scenario.json')
    time.sleep(10)
    bpy.start_scenario()
    bpy.vcontrol({
        'throttle': 1.0,
        'steering': 0.5,
        'gear': 1
    })

    for _ in range(3):
        bpy.req_vstate(800, 600)
        time.sleep(1)
    for i, vstate in enumerate(bpy.poll_all()):
        vstate['img'].save(f'<outputPath>/{i:02}.png')

编辑:我意识到错误发生在 BeamNG.research 的 lua 文件中。更准确地说<beamNG_basedir>/lua/ge/extensions/util/researchAdapter.lua,第 180 行。调用Engine.getColorBufferBase64(width, height)失败并显示以下消息。

025.668|E|GameEngineLua:Exception|lua/ge/extensions//util/researchAdapter.lua:180: attempt to call field 'getColorBufferBase64' (a nil value)
=============== Stack Traceback >> START >>
(1) field C function 'getColorBufferBase64'
(2) Lua upvalue 'getVehicleState' at file 'lua/ge/extensions//util/researchAdapter.lua:180'
  Local variables:
  width = number: 800
  height = number: 600
  state = table: 0x01e121142160  {clutch:0, rot:-111.05878753658, steering:-0, vel:table: 0x01e1143b6920 (more...)}
  vdata = table: 0x01e120efaaf8  {vel:vec3(-0.000107339,9.26956e-05,-8.04267e-05), active:true, dirVecUp:vec3(-0.00877159,0.00343826,0.999956) (more...)}
  (*temporary) = nil
  (*temporary) = number: 1.02085e-311
  (*temporary) = number: 800
  (*temporary) = number: 600
  (*temporary) = number: -0.933169
  (*temporary) = number: -0.359309
  (*temporary) = number: 1.02085e-311
  (*temporary) = number: -0.359309
  (*temporary) = number: 0
  (*temporary) = number: -1
  (*temporary) = string: "attempt to call field 'getColorBufferBase64' (a nil value)"
(3) Lua local 'handler' at file 'lua/ge/extensions//util/researchAdapter.lua:220'
  Local variables:
  msg = table: 0x01e121049f10  {type:ReqVState, width:800, height:600}
  width = number: 800
  height = number: 600
(4) Lua upvalue 'handleSocketInput' at file 'lua/ge/extensions//util/researchAdapter.lua:289'
  Local variables:
  message = table: 0x01e121049f10  {type:ReqVState, width:800, height:600}
  msgType = string: "handleReqVState"
  handler = Lua function 'handleReqVState' (defined at line 210 of chunk lua/ge/extensions//util/researchAdapter.lua)
(5) Lua function 'onUpdate' at file 'lua/ge/extensions//util/researchAdapter.lua:310' (best guess)
  Local variables:
  dt = number: 0.0329248
(6) Lua field 'hook' at file 'lua/common/extensions.lua:454'
  Local variables:
  func = string: "onUpdate"
  funcList = table: 0x01e1211f8780  {1:function: 0x01e11437dc98, 2:function: 0x01e11434a720, 3:function: 0x01e11426daf8 (more...)}
  (for index) = number: 5
  (for limit) = number: 12
  (for step) = number: 1
  i = number: 5
(7) Lua function 'update' at file 'lua/ge/main.lua:362' (best guess)
  Local variables:
  dtReal = number: 0.0329248
  dtSim = number: 0.033
  dtRaw = number: 0.0329855
--------------- << END <<

标签: pythonluabeamng

解决方案


推荐阅读