这几天打算使用Vrep机器人仿真平台做实验,但却在获取激光雷达测量数据的过程中遇到了困难:机器人所使用的雷达由两个vision sensor组成,但Vrep的remoteAPI没有接口可以直接获取传感器的深度数据,更没有接口直接得到雷达的测量数据。琢磨了几天,终于解决了这个困难,以下是我使用python获取Vrep场景内激光雷达测量数据的操作步骤。
一、在Scene中添加一个激光雷达
打开Model browser -> components -> sensor,从中选择一个激光雷达(以Hokuyo URG 04LX UG01_Fast.ttm为例)。
2、修改脚本中的LUA代码
双击脚本,在function sysCall_init() 的最后添加代码以开启remoteAPI端口:
simRemoteApi.start(19999)
将function sysCall_sensing() 增加一些代码(新增的代码后标记了“added”,整份代码的解释放在文章最后):
function sysCall_sensing()
measuredData={}
ranges = {} ---------------------------------------------------added
if notFirstHere then
-- We skip the very first reading
sim.addDrawingObjectItem(lines,nil)
showLines=sim.getScriptSimulationParameter(sim.handle_self,'showLaserSegments')
r,t1,u1=sim.readVisionSensor(visionSensor1Handle)
r,t2,u2=sim.readVisionSensor(visionSensor2Handle)
m1=sim.getObjectMatrix(visionSensor1Handle,-1)
m01=simGetInvertedMatrix(sim.getObjectMatrix(sensorRef,-1))
m01=sim.multiplyMatrices(m01,m1)
m2=sim.getObjectMatrix(visionSensor2Handle,-1)
m02=simGetInvertedMatrix(sim.getObjectMatrix(sensorRef,-1))
m02=sim.multiplyMatrices(m02,m2)
if u1 then
p={0,0,0}
p=sim.multiplyVector(m1,p)
t={p[1],p[2],p[3],0,0,0}
for j=0,u1[2]-1,1 do