V-rep(CoppeliaSim)添加相机,与python联合仿真,并使用python读取V-rep中的RGB图与深度图

目录

前言

本文主要介绍了如何使用python与V-rep联合仿真,并用OpenCV可视化V-rep中视觉传感器所能看到的 RGB图深度图 ,效果图如下。

在V-rep中构建场景

本文使用的V-rep版本是3.5:

  1. 打开V-rep,并将任意一个目标(如机械臂)拖入到场景中。
  2. 添加视觉传感器 ,在场景的空白处点击右键 -->Add -->Vision Sensor --> Perspective projection ,并将相机旋转合适的角度,使其能够看到机械臂,此时视觉传感器的名称为Vision_sensor
  3. 点击最右侧竖直工具栏图标按钮的脚本配置 按钮,点击右上角Insert new script 按钮,点击Child script(non-threaded)按钮创建脚本。点击Scripts 中的Associated object ,在下拉菜单中选择Vision_sensor ,将脚本与相机关联。

  4. 双击场景层次结构菜单栏中Vision_sensor 的图标,注意不要点击文字。在弹窗中设计图像分辨率大小,如512*512(一定要是2的幂次方)。

  5. 点击Vision_sensor 后面的书签按钮,弹出Lua脚本,添加simRemoteApi.start(19997) ,此处的19997 为端口号。

建立python与V-rep通信

  1. sim.py , simConst.py , remoteApi.dll(Windows) ,或 remoteApi.dylib(Mac os)remoteApi.so(Linux) 复制到python项目文件夹中。

其中,sim.py , simConst.py在vrep的安装目录中,具体在"programming/remoteApiBindings/python"下。 **remoteApi.dll(Windows)**在"programming/remoteApiBindings/lib/lib/Windows"下。

  1. python与vrep通信

    ① 调用import sim加载库;
    ② 利用sim.simxStart()建立客户端;
    ③ 调用以"simx"为前缀的vrep远程API函数;
    ④ 停止仿真:sim.simxFinish().

  2. 下面是以上面场景为例,写的python脚本,该脚本实现了与vrep的通信,并用OpenCV将vrep相机数据的RGB图和depth图进行了可视化显示:

python 复制代码
import sim
import time
import sys
import cv2
import numpy as np

#关闭之前的连接
sim.simxFinish(-1)

# 获得客户端ID
clientID = sim.simxStart('127.0.0.1',19997,True,True,5000,5)
print("Connection success!!!")

if clientID != -1:
    print('Connected to remote API server')
else:
    print('Connection not successful')
    sys.exit('Could not connect')

# 启动仿真
sim.simxStartSimulation(clientID,sim.simx_opmode_blocking)
print("Simulation start")

# 使能同步模式
sim.simxSynchronous(clientID,True)

# 获得对象的句柄
ret, targetObj = sim.simxGetObjectHandle(clientID,'target',sim.simx_opmode_blocking)
errorCode,visionSensorHandle = sim.simxGetObjectHandle(clientID,'Vision_sensor',sim.simx_opmode_oneshot_wait)
errprCode,resolution,rawimage = sim.simxGetVisionSensorImage(clientID,visionSensorHandle,0,sim.simx_opmode_streaming)



def readVisionSensor():
    global resolution
    errprCode, resolution, rawimage = sim.simxGetVisionSensorImage(clientID, visionSensorHandle, 0, sim.simx_opmode_buffer)
    sensorImage = []
    sensorImage = np.array(rawimage, dtype=np.uint8)    #transform the raw image to uint8
    sensorImage.resize([resolution[1], resolution[0], 3])        # Process the image to the format (256,128,3)
    cv2.flip(sensorImage, 0, sensorImage)  # image upside down
    image = sensorImage
    # print("image.shape: ", image.shape)
    return image

def readDepthSensor():
    global resolution
    # 获取 Depth Info
    sim_ret, resolution, depth_buffer = sim.simxGetVisionSensorDepthBuffer(clientID, visionSensorHandle, sim.simx_opmode_blocking)
    depth_img = np.asarray(depth_buffer)
    depth_img.shape = (resolution[1], resolution[0])
    zNear = 0.01
    zFar = 2
    depth_img = depth_img * (zFar - zNear) + zNear
    depth_img = cv2.flip(depth_img, 0)
    return depth_img

while True:
    # 获得对象的位置,并输出
    ret, arr = sim.simxGetObjectPosition(clientID,targetObj,-1,sim.simx_opmode_blocking)

    image = readVisionSensor()
    depth = readDepthSensor()
    print(depth)
    cv2.imshow("image", image)
    cv2.imshow("depth", depth)
    cv2.waitKey(1)
    saveFile = ".\image.jpg"  # 保存文件的路径
    cv2.imwrite(saveFile, depth)  # 保存图像文件


    if ret == sim.simx_return_ok:
        print(arr)

    # time.sleep(2)

# 退出
sim.simxFinish(clientID)
print('Program end')
  1. 先运行vrep仿真,再运行python脚本,即可进行显示。
相关推荐
小鹿( ﹡ˆoˆ﹡ )8 分钟前
Matplotlib 绘图艺术:从新手到高手的全面指南
python·matplotlib
小鹿( ﹡ˆoˆ﹡ )12 分钟前
深入探索 Seaborn:高级绘图的艺术与实践
python·信息可视化
hummhumm12 分钟前
Oracle 第29章:Oracle数据库未来展望
java·开发语言·数据库·python·sql·oracle·database
聪明的墨菲特i20 分钟前
Django前后端分离基本流程
后端·python·django·web3
wainyz21 分钟前
Java NIO操作
java·开发语言·nio
工业3D_大熊26 分钟前
【虚拟仿真】CEETRON SDK在船舶流体与结构仿真中的应用解读
java·python·科技·信息可视化·c#·制造·虚拟现实
喵叔哟29 分钟前
重构代码之用委托替代继承
开发语言·重构
lzb_kkk35 分钟前
【JavaEE】JUC的常见类
java·开发语言·java-ee
SEEONTIME35 分钟前
python-24-一篇文章彻底掌握Python HTTP库Requests
开发语言·python·http·http库requests
Bearnaise35 分钟前
PointMamba: A Simple State Space Model for Point Cloud Analysis——点云论文阅读(10)
论文阅读·笔记·python·深度学习·机器学习·计算机视觉·3d