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

本文主要是介绍V-rep(CoppeliaSim)添加相机,与python联合仿真,并使用python读取V-rep中的RGB图与深度图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 前言
  • 在V-rep中构建场景
  • 建立python与V-rep通信

前言

本文主要介绍了如何使用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(). 
  1. 下面是以上面场景为例,写的python脚本,该脚本实现了与vrep的通信,并用OpenCV将vrep相机数据的RGB图和depth图进行了可视化显示:
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 resolutionerrprCode, resolution, rawimage = sim.simxGetVisionSensorImage(clientID, visionSensorHandle, 0, sim.simx_opmode_buffer)sensorImage = []sensorImage = np.array(rawimage, dtype=np.uint8)    #transform the raw image to uint8sensorImage.resize([resolution[1], resolution[0], 3])        # Process the image to the format (256,128,3)cv2.flip(sensorImage, 0, sensorImage)  # image upside downimage = sensorImage# print("image.shape: ", image.shape)return imagedef readDepthSensor():global resolution# 获取 Depth Infosim_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.01zFar = 2depth_img = depth_img * (zFar - zNear) + zNeardepth_img = cv2.flip(depth_img, 0)return depth_imgwhile 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脚本,即可进行显示。
    在这里插入图片描述

这篇关于V-rep(CoppeliaSim)添加相机,与python联合仿真,并使用python读取V-rep中的RGB图与深度图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/548818

相关文章

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超