v-rep--API

本文详细介绍了v-repAPI中的各种对象类型,包括形状、关节、图形、相机、光源、虚拟对象等,以及如何进行场景管理、仿真控制、模型操作、文件操作、碰撞检测、距离计算和路径创建。同时涵盖了动力学相关函数如力传感器和关节控制。
摘要由CSDN通过智能技术生成

解析c++版本

API官网

v-repAPI是安类堆放的,需要和什么相关的API,只需到与之相关的API处寻找即可。

各种对象类型

解释几个难懂的:

sim.object_dummy_type--亚节点(虚拟对象)

虚拟对象的作用:

详情查看文档的----entities--->Dummies

对象类型

sim.object_shape_type     //枚举值为0
sim.object_joint_type     //枚举值为1,以下递增
sim.object_graph_type
sim.object_camera_type
sim.object_light_type
sim.object_dummy_type
sim.object_proximitysensor_type
sim.object_octree_type
sim.object_pointcloud_type
sim.object_visionsensor_type
sim.object_forcesensor_type

1. `sim.object_shape_type`:表示基于形状的对象类型,例如立方体、球体等。
2. `sim.object_joint_type`:表示关节类型的对象,例如旋转关节、移动关节等。
3. `sim.object_graph_type`:表示图形对象类型,例如模型、点云等。
4. `sim.object_camera_type`:表示摄像头类型的对象,例如透视相机、立体相机等。
5. `sim.object_light_type`:表示光源类型的对象,例如点光源、聚光灯等。
6. `sim.object_dummy_type`:表示虚拟对象类型,例如坐标系。
7. `sim.object_proximitysensor_type`:表示接近传感器类型的对象,用于检测物体的距离和方向。
8. `sim.object_octree_type`:表示八叉树类型的对象,用于高效地存储和查询大型数据结构。
9. `sim.object_pointcloud_type`:表示点云类型的对象,用于表示 3D 点云数据。
10. `sim.object_visionsensor_type`:表示视觉传感器类型的对象,例如相机、激光雷达等。
11. `sim.object_forcesensor_type`:表示力传感器类型的对象,用于检测物体受到的力和力矩。

场景

simGetSelectedID()

获取被选中场景的ID

simGetSceneCount()

获取场景的数量

simSaveScene

保存场景。

simCloseScene

关闭场景

simLoadScene

下载以及保存的场景文件。

仿真

simGetSimulationState()

获取仿真状态;

模型

simSaveModel

保存模型。

simLoadModel

加载已经保存过的模型。

文件

simDoesFileExist

判断文件是否存在。

形状

simImportShape

导入一个形状。

网格---mesh

simImportMesh

导入一个已经存在网格。

simExportMesh

保存一个网格到文件。

纹理

simCreateTexture

创建一个平面形状,然后为这个形状添加纹理。

句柄

simGetObject(path,)

path:对象的路径;

注意:这个接口一定要对象的路径;

simGetObjectHandle(name,...)

这个是老版本的,只需要一个名字。

simGetObjects

获取场景中指定类型对象的索引。

一般用在循环中。

simGetObjectsInTree(int treebaseHandle)

int* simGetObjectsInTree(int treeBaseHandle, int objectType, int options, int* objectCount)

从一个节点开始,获取这个节点以及之下的子对象的指定类型的句柄,并且可以进行排除获取。

treeBaseHandle:开始检索的树的根;

objectType:

共11种类型,枚举值为:0---10

sim_object_shape_type:

哪些对象属于形状呢?

整个机器人,link--连杆,各种形状--rectangle矩形,Cykinder圆柱等;

options:

1,

a:如果第一个参数不是sim_handle_scene,返回的数组句柄中,排除树的根节点,即使是目标对象;

b:如果第一个参数是sim_handle_scene,那么这个1就没有作用,会返回场景中所有对象的句柄。

sim_handle_scene--1---返回所有句柄。

2:

a:只返回第一级子节点对象的句柄;

b:如果第一个参数是sim_handle_scene,那么只会返回没有父亲节点的对象的句柄。

sim_handle_scene---2----没有父亲节点的对象

因为没有joint对象是没有父亲节点的,所以返回为空:

有两个形状对象没有父亲节点:

什么是tree:

v-rep中的对象以及对象中的内部对象,都是以树的方式组织起来的。

simGetObjectFromUid

根据对象唯一标识符获取对象句柄。

simIsHandle

检查常规对象句柄是否仍然有效。

一般对象被销毁时 (例如,以编程方式或通过用户界面),则其相关句柄不再有效 并在使用时触发错误。使用此函数可避免触发错误。

simGetScriptHandleEx

第一个参数,一般都应该是子脚本,枚举定义为1。

所以第二个参数,一般可为-1。

第三个, Can be nullptr.

simGetCollectionObjects

simGetReferencedHandles

simSetReferencedHandles

获取字符串参数

simGetStringParam

只有一个参数:

0,获取执行的coppeliasim执行所在的路径;

获取脚本文件对象的相关参数

simGetScriptStringParam

第二个参数有以下几种枚举值:

sim.scriptstringparam_description---0--String attribute, describes the script

sim.scriptstringparam_name------1------String attribute

sim.scriptstringparam_text--------2-------String attribute

sim.scriptstringparam_textext------3------String attribute

simGetScriptInt32Param

第二个参数有很多值,用的比较多的可能就是:

sim.scriptintparam_objecthandle---获取脚本对象的句柄。

获取标识对象本身的参数

simReadCustomBlock(handle,param,len)

注意:这个接口返回的指针中的字符串没有后缀'\0',所以如果不做处理直接读取其中的字符串,字符串后面部分会出现乱码。

所以需要:

char* param_val=simReadCustomBlock(handle,"TCP",&len)
std::string name=std::string(param_val,len);

simWriteCustomBlock()

写入参数。

对象唯一标识符

名称

simGetObjectName(int handle)

获取对象名称。

simGetObjectAlias(handle,option)

这个和simGetObjectName都可以用来获取对象的名称;只是这个是新版本中的接口;

option默认值为-1,表示仅获取名称,不加任何修饰。

0,如果这棵树下不存同名的对象,同-1;如果存在同名的对象,会以数组的方式返回对象名称和下标;

3,如果这棵树下存在相同对象的名称,返回名称和句柄;否则只需要返回名称;

4,返回名称和句柄;

1,2,用于获取对象的路径;

simSetObjectAlias--设置对象的别名

链接

第三个参数虽然有默认值,但是调用的时候必须设置。

碰撞

simCheckCollision

检查两个实体是否发生碰撞。

simCheckCollisionEx

检查两个实体是否发生碰撞,返回两个实体之间的所有交集。如果实体是对象,则实体的可碰撞标志将被覆盖。

距离

simCheckDistance

检查两个图元之间的最小距离。

如果实体是对象,则实体的可测量标志将被覆盖。如果实体都是相同的集合(即具有相同的集合句柄),则不会根据它们检查相同的对象

路径

simGetExecutablePath()

获取v-rep可执行文件所在的路径。

获取一个指定名称的对象的路径

创建路径

sim.createPath(atrribute,intParams,floatParams,color)

利用老版本的接口。

这个函数仅仅创建一个路径对象,不会在场景中渲染出路径,因为还没有路径控制点,无法渲染。

attribute:

Path object properties (can be combined with the OR operator)

enum { /* Path properties: */
    sim_pathproperty_show_line              =0x0001,
    sim_pathproperty_show_orientation       =0x0002,
    sim_pathproperty_closed_path            =0x0004,
    sim_pathproperty_automatic_orientation  =0x0008,
    sim_pathproperty_invert_velocity_deprecated     =0x0010,
    sim_pathproperty_infinite_acceleration_deprecated   =0x0020,
    sim_pathproperty_flat_path              =0x0040,
    sim_pathproperty_show_position          =0x0080,
    sim_pathproperty_auto_velocity_profile_translation_deprecated   =0x0100,
    sim_pathproperty_auto_velocity_profile_rotation_deprecated      =0x0200,
    sim_pathproperty_endpoints_at_zero_deprecated                   =0x0400,
    sim_pathproperty_keep_x_up                          =0x0800
};

attribute==-1

创建具有默认的路径。

默认属性:

CPathCont_old::CPathCont_old()
{
  ......
_attributes=sim_pathproperty_show_line|sim_pathproperty_show_orientation|sim_pathproperty_automatic_orientation|         sim_pathproperty_show_position|sim_pathproperty_endpoints_at_zero_deprecated|sim_pathproperty_infinite_acceleration_deprecated;
  ......
}

attribute==0

void CPathCont_old::setAttributes(int attrib)
{
    if ((attrib&sim_pathproperty_flat_path)&&((_attributes&sim_pathproperty_flat_path)==0))
    {
        _attributes=attrib;
        for (int i=0;i<getSimplePathPointCount();i++)
            _simplePathPoints[i]->setTransformation(_simplePathPoints[i]->getTransformation(),_attributes);
    }
    _attributes=attrib;
    if ( (_simplePathPoints.size()<3)&&(_attributes&sim_pathproperty_closed_path) )
        _attributes-=sim_pathproperty_closed_path;
    actualizePath();
}

计算出来的结果是不具有任何属性---创建出来的路径看不见。

intParams:

intParams[0]:

指定路径这条线(bezier curve)的宽度,单位:

值的大小限制:
 

void CPathCont_old::setLineSize(int size)
{
    tt::limitValue(1,8,size);
    _lineSize=size;
}
void tt::limitValue(int minValue,int maxValue,int &value)
{
    if (value>maxValue) value=maxValue;
    if (value<minValue) value=minValue;
}

默认情况下,不设置intParams的情况下,line size=1.

intParams[1]:

总的这条曲线的长度的计算方法。

1. `sim.distcalcmethod_dl=0:路径长度=所有线路段长度之和。

2. `sim.distcalcmethod_dac`:路径长度=所有线路段长度和角度之积的加权和。

3. `sim.distcalcmethod_max_dl_dac`:路径长度=所有线路段长度和角度之积的加权和和每段线路长度的最大值之和取较大值。

4. `sim.distcalcmethod_dl_and_dac`:路径长度=所有线路段长度之和与所有线路段长度和角度之积的加权和之和。

5. `sim.distcalcmethod_sqrt_dl2_and_dac2`:路径长度=所有线路段长度的平方和与所有线路段长度和角度之积的加权和的平方和的开方之和。

6. `sim.distcalcmethod_dl_if_nonzero`:路径长度=所有线路段长度,并忽略角度为0的线路段。

7. `sim.distcalcmethod_dac_if_nonzero`:路径长度=所有线路段长度和角度之积的加权和,并忽略线路长度为0的线路段

intParmasp[2]:

reserved----设置为0.

floatParams:

floatParams[0]

路径控制点的大小,单位:

大小的限制范围。

void CPathCont_old::setSquareSize(double size)
{
    tt::limitValue(0.0001,1.0,size);
    _squareSize=size;   
}

floatParams[1]
floatParam[2]
  • floatParams[1]:角度与线性的转换系数。在某些路径计算方法中需要用到,例如 sim.distcalcmethod_dac,表示弧度/米的转换系数。默认值为 0.01,表示角度和线性的单位相差约为1:100。

  • floatParams[2]:虚拟距离缩放因子。该参数用于控制路径的相对缩放大小,只有在使用虚拟相机视角测量路径时才需要设置,表示虚拟和实际距离之间的比例因子。默认值为 1.0

color:

对于这个函数发使用,一般情况下只需要设置attribute属性即可。

sim.insertPathCtrlPoints(pathHandle,options,startIndex,ptCnt,ptData)

在sim.createPath()创建路径路径对象之后,需要调用这个接口创建路径控制点,才会在创建中渲染出路径来(bezier curve)。

pathHandle

sim.createPath创建的路径对象的handle.

options

设置为1:

1,则需要设置的每一个控制点就需要有11个参数值。

2,设置为1时,path变为关闭状态,首尾相连的闭合循环形状。

A path can be open or closed. When closed, it becomes cyclic.

设置为2:

1,则需要设置的每一个控制点就需要有16个参数值。

2,options为2,则我们设置的每一个控制点就是一个bezier curve上的点,因为option为2,则默认两个控制点之间创建的线段就是一条bezier曲线。而不是像option为1时,控制点不是bezier曲线上的点,控制点是用来控制生成bezier曲线的。

option=1/2的关闭状态设置:

1---默认关闭,2--不关闭(但是2不生成bezier曲线)

if (options&1)
            path->pathContainer->setAttributes(path->pathContainer->getAttributes()|sim_pathproperty_closed_path);
        else
            path->pathContainer->setAttributes((path->pathContainer->getAttributes()|sim_pathproperty_closed_path)-sim_pathproperty_closed_path);

路径的开启和关闭也可以用上面的接口设置。

startIndex

新插入的控制点需要插入的起始位置索引。

索引从0开始。

如果插入的起始位置为0,代表修改路径的起始控制点0的位姿。

ptCnt

插入的控制点的数量。

ptData

所有控制点的位姿。

ptData[0]--[2]

控制点的位置:x,y,z.

ptData[3]--[5]

欧拉角表示的控制点的姿态。

ptData[6]

the relative velocity at the control point.

ptData[7]

the virtaul distance at the control point.

控制点的虚拟距离。

什么是虚拟距离?

就是设置的两个控制点之间的距离不是这两个控制点之间真实的距离,设置这个距离只是用来做其他作用的,比如控制物体移动的状态-----看旧文档案例(entities--path--Path position and length caculation methods)

ptData[8]

控制点处的bezier点的数量。

一个控制点的bezier点的数量如何标识?

ptData[9]

0.1---0.99

the bezier interpolation factor 1 at the control point.

控制点处的贝塞尔插值因子1

ptData[10]

0.1--0.99

the bezier interpolation factor 2 at the control point.

控制点处的贝塞尔插值因子2

插值因子:

什么是bezier曲线插值因子

Bezier插值因子指示Bezier曲线部分的起点和终点,Bezier点数表明曲线的详细程度(或平滑程度)。从技术上讲,Bezier点数为1会禁用Bezier曲线插值机制。

插值因子越小,bezier曲线的起始点或者终点越接近控制点。

ptData[11]----option=2使用

控制点的辅助标志。

ptData[12]--[15]----option=2使用

4个辅助值。

_S.path.setup()

sim.createPath新旧接口创建区别

全局搜索:sim.createPath,可以看到旧版本和新版本使用接口的区别。

在这个接口的添加脚本部分,加载了"path_customization"模块。

path_customization

搜索:_S.path.setup()可以看到新版本的路径是怎么设置bezier数据的。

(或者打开build/path_customization.lua文件)

新版本路径lua读取bezier数据

sim.unpackDoubleTable(sim.readCustomDataBlock(handle, 'PATH'))

场景对象

设置对象的父对象

simSetObjectParent(obj_handle,rel_hanbdle,keepInPlace)

重要的是keepInPlace,bool类型值,表示物体的绝对位姿是否需要保持不变,即物体相对于世界坐标系的位姿是否需要保持不变。

false:

相对于世界坐标系的位姿不需要保持,而物体的位姿需要转换到和父对象相同的姿态.

true:

相对于世界坐标系的绝对位姿不变。

只设置父子关系。

绝对位姿和相对位姿

在三维空间中,物体的姿态通常由其位姿(位置和方向)表示。绝对姿态是该物体的世界坐标系下的位姿,也就是说,不考虑其父物体的影响,该物体在场景中的实际位置和方向。相对姿态指相对于父物体的位姿,即该物体相对于其父物体在场景中的位置和方向。

当使用 simSetObjectParent 函数将一个物体添加为另一个物体的子物体时,可以指定物体的绝对姿态是否应保持不变。如果指定为保持不变,那么添加后子物体的位姿不会发生改变,即其绝对姿态依然是其添加前的姿态;如果不保持不变,则子物体相对于其新父物体的位姿将是其旧父物体的位姿相对于新父物体的位姿的组合,即其绝对姿态将发生变化。

具体地说,如果 keepInPlace 参数设置为 true,则父物体不会影响子物体的位姿,子物体将保持站在它添加前的位置和方向不变且相对于父物体仍然保持在相同的位置和方向;如果设置为 false,则其相对位姿会改变,子物体的位姿将基于其添加前的位姿和其新父物体的位姿重新计算。

例如,如果一个机器人模型被添加为一个地图模型的子物体,并保持其绝对姿态不变,则该机器人模型将在场景中保留其原始的位置和方向,而不会受到地图位置或朝向的影响。但如果不保持其绝对姿态不变,则机器人将相对于地图模型移动,并调整其当前的姿态朝向以与父物体的朝向一致。

图形形状

simCreatePrimitiveShape

注意:

创建圆:本质上是椭圆,许哟啊给出短半轴和长半轴;

创建球体:本质上是创建椭圆球,如果要创建球体,必须给出三个一样的值。

圆柱:要给出底圆短半轴和长半轴,和圆柱的高;

颜色

simSetShapeColor()

simSetShapeColor(shapeHandle,colorName,colorComponent,rbgData)

颜色成分:

enum { /* color components */
    sim_colorcomponent_ambient=0,
    sim_colorcomponent_ambient_diffuse=0,
    sim_colorcomponent_diffuse,
    sim_colorcomponent_specular,
    sim_colorcomponent_emission,
    sim_colorcomponent_transparency,
    sim_colorcomponent_auxiliary
};

simSetObjectColor()

动力学--Dynamics

simHandleDynamics

simSetJointTargetPosition

设置关节的目标线性/角度位置。

simSetJointTargetVelocity

设置非球面关节的目标线速/角速度。

simReadForceSensor

读取施加到力传感器的力和扭矩(读取过滤值)

simGetJointForce

获取沿/围绕关节活动轴施加到关节的力或扭矩。

simGetJointTargetForce

获取关节可以施加的力或扭矩。

simSetJointTargetForce

设置关节可以施加的力或扭矩。

simAddForce

给对象添加一个力。

simAddForceAndTorque

向动态启用的形状对象添加力和/或扭矩。

simGetVelocity

获取非静态形状质心的线速度和/或角速度。

simGetLinkDummy

链接到此虚拟的对象句柄。

simSetLinkDummy

simResetDynamicObject

重置动态模拟的对象。

simGetContactInfo

simGetShapeMass

simSetShapeMass

simGetShapeInertia

simSetShapeInertia

simComputeMassAndInertia

simCreateForceSensor

simConvexDecompose

simGetQHull

simGetDecimatedMesh

simIsDynamicallyEnabled

int simGetObjectPotion

获取某个对象相对于某个对象的位置。

官方链接

第二个参数为-1表示获取对象相对于世界坐标系的坐标。

int simGetObejctOrientation

获取某个对象相对于某个对象的姿态。

官方链接

第二个参数为-1表示获取对象相对于世界坐标系的姿态。

float robot_euler[3];
simGetObejctOrientation(handle,-1,robot_euler);

其中 `robot_euler[0]` 表示绕 x 轴的旋转角度,`robot_euler[1]` 表示绕 y 轴的旋转角度,`robot_euler[2]` 表示绕 z 轴的旋转角度,这些角度通常使用欧拉角(Euler angles)表示。
 

simGetObjectPose()

四元素方式获取位置和姿态。

默认输出:

第一个参数| sim.handleflag_wxyzquat,则输出;

 sim.handleflag_wxyzquat

char *simGetObjectName(int handle)

获取某个对象的名字。

int simReleaseBuffer(void* buffer)

用于释放simGetObjectsInTree返回的数组。

int simSetInt32Signal(const char* signalName, int signalValue)

什么是32位信号:

int simGetInt32Signal(const char* signalName, int* signalValue)

对于仿真开发中的场景,simGetInt32Signal() 可以用于获取特定模块或设备中的 32 位带符号整数类型的信号值,通常会被用于数据读取、控制指令的发送等操作中。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
V-REP用户手册是指V-REP仿真软件的用户指南,该软件是一款功能强大的机器人仿真平台。V-REP用户手册提供了关于如何使用V-REP软件的详细指导和说明。用户手册分为多个章节,涵盖了V-REP软件的各个方面。 首先,V-REP用户手册介绍了软件的安装和启动过程,包括了适用于不同操作系统的操作说明。然后,手册详细介绍了软件界面的各个组件和功能,如场景层次结构、物体和模型管理、相机设置等。对于初学者来说,这些内容对于了解软件的基本操作非常有帮助。 此外,V-REP用户手册还提供了关于物理引擎的说明,解释了如何设置和模拟不同类型的物理对象。手册还介绍了如何添加传感器、控制器和动作规划算法,以实现更复杂的仿真任务。手册还提供了关于远程API接口的说明,这使得用户可以通过编程来控制和监控仿真实验。 除了基本功能的介绍,V-REP用户手册还包含了一些高级功能的使用教程,如路径规划、机器人学习和视觉传感器。用户手册还提供了一些常见问题和故障排除的解决方案,以帮助用户解决在使用软件过程中遇到的问题。 总之,V-REP用户手册是一本全面指导用户如何使用V-REP软件的重要参考资料,可以帮助用户快速上手并实现各种机器人仿真任务。无论是对于学生、研究人员还是工程师来说,V-REP用户手册都是一本不可或缺的工具书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值