Skip to content

Commit 3defd8c

Browse files
committed
Migrate from V-REP to CoppeliaSim.
1 parent dc255b5 commit 3defd8c

34 files changed

+628
-403
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,5 +98,5 @@ ENV/
9898
# mypy
9999
.mypy_cache/
100100

101-
pyrep/backend/_v_rep_cffi*
101+
pyrep/backend/_sim_cffi*
102102

.travis.yml

+8-8
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ before_install:
1111
- sudo apt-get install qt5-default qttools5-dev-tools
1212
install:
1313
- cur=`pwd`
14-
# Pull V-REP
15-
- wget http://coppeliarobotics.com/files/V-REP_PRO_EDU_V3_6_2_Ubuntu16_04.tar.xz
16-
- tar -xf V-REP_PRO_EDU_V3_6_2_Ubuntu16_04.tar.xz
17-
- export VREP_ROOT="$cur/V-REP_PRO_EDU_V3_6_2_Ubuntu16_04"
18-
- echo $VREP_ROOT
19-
# $VREP_ROOT/platforms needed otherwise will get:
14+
# Pull CoppeliaSim
15+
- wget http://www.coppeliarobotics.com/files/CoppeliaSim_Edu_V4_0_0_Ubuntu16_04.tar.xz
16+
- tar -xf CoppeliaSim_EDU_V4_0_0_Ubuntu16_04.tar.xz
17+
- export COPPELIASIM_ROOT="$cur/CoppeliaSim_EDU_V4_0_0_Ubuntu16_04"
18+
- echo COPPELIASIM_ROOT
19+
# COPPELIASIM_ROOT/platforms needed otherwise will get:
2020
# qt.qpa.plugin: Could not load the Qt platform plugin "xcb"
21-
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$VREP_ROOT:$VREP_ROOT/platforms
22-
- export QT_QPA_PLATFORM_PLUGIN_PATH=$VREP_ROOT
21+
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$COPPELIASIM_ROOT:$COPPELIASIM_ROOT/platforms
22+
- export QT_QPA_PLATFORM_PLUGIN_PATH=$COPPELIASIM_ROOT
2323
- pip3 install -r requirements.txt
2424
- python3 setup.py install
2525
# command to run tests

README.md

+28-12
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
# PyRep [![Build Status](https://travis-ci.com/stepjam/PyRep.svg?token=bQxtiYV3p3bPYhzWMoLi&branch=master)](https://travis-ci.com/stepjam/PyRep) [![Documentation Status](https://readthedocs.org/projects/pyrep/badge/?version=latest)](https://pyrep.readthedocs.io/en/latest/?badge=latest)
22

33

4-
__PyRep is a toolkit for robot learning research, built on top of the virtual
5-
robotics experimentation platform ([V-REP](http://www.coppeliarobotics.com/)).__
4+
__PyRep is a toolkit for robot learning research, built on top of [CoppeliaSim](http://www.coppeliarobotics.com/) (previously called V-REP).__
5+
6+
__NOTE:__ V-REP has recently been changed to CoppeliaSim.
7+
If you had an old version of V-REP/PyRep installed, you should removing all
8+
references of V-REP from your bashrc/zshrc (VREP_ROOT, LD_LIBRARY_PATH,
9+
QT_QPA_PLATFORM_PLUGIN_PATH), and then re-run through the installation section.
610

711
- [Install](#install)
812
- [Getting Started](#getting-started)
@@ -12,14 +16,15 @@ robotics experimentation platform ([V-REP](http://www.coppeliarobotics.com/)).__
1216
- [Planned Future Updates](#planned-future-updates)
1317
- [Contributing](#contributing)
1418
- [Projects Using PyRep](#projects-using-pyrep)
19+
- [What Happened to V-REP?](#what-happened-to-v-rep?)
1520
- [Citation](#citation)
1621

1722

1823
## Install
1924

20-
In addition to the PyRep API, you will aso need to download the latest version of V-REP [from the downloads page](http://www.coppeliarobotics.com/downloads.html).
25+
In addition to the PyRep API, you will aso need to download the latest version of CoppeliaSim [from the downloads page](http://www.coppeliarobotics.com/downloads.html).
2126

22-
Once you have downloaded V-REP, you can pull PyRep from git:
27+
Once you have downloaded CoppeliaSim, you can pull PyRep from git:
2328

2429
```bash
2530
git clone https://github.com/stepjam/PyRep.git
@@ -29,12 +34,13 @@ cd PyRep
2934
Add the following to your *~/.bashrc* file: (__NOTE__: the 'EDIT ME' in the first line)
3035

3136
```bash
32-
export VREP_ROOT=EDIT/ME/PATH/TO/V-REP/INSTALL/DIR
33-
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$VREP_ROOT
34-
export QT_QPA_PLATFORM_PLUGIN_PATH=$VREP_ROOT
37+
export COPPELIASIM_ROOT=EDIT/ME/PATH/TO/COPPELIASIM/INSTALL/DIR
38+
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$COPPELIASIM_ROOT
39+
export QT_QPA_PLATFORM_PLUGIN_PATH=$COPPELIASIM_ROOT
3540
```
3641

37-
__Remember to source your bashrc after this:__ ```source ~/.bashrc```.
42+
__Remember to source your bashrc (`source ~/.bashrc`) or
43+
zshrc (`source ~/.zshrc`) after this.
3844

3945
Finally install the python library:
4046

@@ -46,7 +52,7 @@ python3 setup.py install --user
4652
You should be good to go!
4753
Try running one of the examples in the *examples/* folder.
4854

49-
_Although you can use V-REP on any platform, communication via PyRep is currently only supported on Linux._
55+
_Although you can use CoppeliaSim on any platform, communication via PyRep is currently only supported on Linux._
5056

5157
#### Running Headless
5258

@@ -69,7 +75,7 @@ Below are some problems you may encounter during installation. If none of these
6975
## Getting Started
7076

7177
1. First take a look at [Usage](#usage) and the examples in the *examples/* folder to see if PyRep might be able to accelerate your research.
72-
2. Take a look at the V-REP [tutorials](http://www.coppeliarobotics.com/helpFiles/en/tutorials.htm).
78+
2. Take a look at the CoppeliaSim [tutorials](http://www.coppeliarobotics.com/helpFiles/en/tutorials.htm).
7379

7480
## Usage
7581

@@ -109,7 +115,7 @@ object.set_position([x, y, z])
109115

110116
Robots are designed to be modular; arms are treated separately to grippers.
111117

112-
Use the robot ttm files defined in robots/ttms. These have been altered slightly from the original ones shipped with V-REP to allow them to be used with motional planning out of the box.
118+
Use the robot ttm files defined in robots/ttms. These have been altered slightly from the original ones shipped with CoppeliaSim to allow them to be used with motional planning out of the box.
113119
The 'tip' of the robot may not be where you want it, so feel free to play around with this.
114120

115121
```python
@@ -234,8 +240,9 @@ Pull requests welcome for bug fixes!
234240
## Projects Using PyRep
235241

236242
If you use PyRep in your work, then get in contact and we can add you to the list!
237-
243+
238244
- [RLBench: The Robot Learning Benchmark & Learning Environment, arxiv 2019](https://arxiv.org/abs/1909.12271)
245+
- [Learning One-Shot Imitation from Humans without Humans, arxiv 2019](https://arxiv.org/abs/1911.01103)
239246
- [Task-Embedded Control Networks for Few-Shot Imitation Learning, CoRL 2018](https://arxiv.org/abs/1810.03237)
240247
- [Transferring End-to-End Visuomotor Control from Simulation to Real World for a Multi-Stage Task
241248
, CoRL 2017](https://arxiv.org/abs/1707.02267)
@@ -244,6 +251,15 @@ If you use PyRep in your work, then get in contact and we can add you to the lis
244251

245252
- Georges Nomicos (Imperial College London) for the addition of mobile platforms.
246253

254+
## What Happened to V-REP?
255+
256+
Coppelia Robotics discontinued development of __V-REP__. Instead, they now focus
257+
their efforts on __CoppeliaSim__. CoppeliaSim is 100% compatible with V-REP.
258+
See more information [here](http://coppeliarobotics.com/helpFiles/en/versionInfo.htm#coppeliaSim4.0.0).
259+
260+
PyRep is fully compatible with both V-REP and CoppeliaSim.
261+
262+
247263
## Citation
248264

249265
```

cffi_build/cffi_build.py

+21-20
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@
55

66
# Get PYREP root and find the needed files to compile the cffi lib.
77

8-
if 'VREP_ROOT' not in os.environ:
9-
raise RuntimeError('VREP_ROOT not defined.')
8+
if 'COPPELIASIM_ROOT' not in os.environ:
9+
raise RuntimeError('COPPELIASIM_ROOT not defined.')
1010

11-
if not os.path.exists(os.environ['VREP_ROOT']):
12-
raise RuntimeError('VREP_ROOT defined, but is not a valid path.')
11+
if not os.path.exists(os.environ['COPPELIASIM_ROOT']):
12+
raise RuntimeError('COPPELIASIM_ROOT defined, but is not a valid path.')
1313

1414
ffibuilder = FFI()
1515

1616
ffibuilder.cdef("""
1717
1818
// ==============
19-
// v_repTypes.h
19+
// simTypes.h
2020
// ==============
2121
2222
// Various types used in the interface functions:
@@ -84,7 +84,7 @@
8484
8585
8686
// ==============
87-
// v_rep.h
87+
// sim.h
8888
// ==============
8989
9090
simInt simRunSimulator(const simChar* applicationName,simInt options,simVoid(*initCallBack)(),simVoid(*loopCallBack)(),simVoid(*deinitCallBack)());
@@ -233,8 +233,6 @@
233233
simVoid* simSendModuleMessage(simInt message,simInt* auxiliaryData,simVoid* customData,simInt* replyData);
234234
simVoid* simBroadcastMessage(simInt* auxiliaryData,simVoid* customData,simInt* replyData);
235235
simChar* simGetModuleName(simInt index,simUChar* moduleVersion);
236-
simChar* simGetScriptSimulationParameter(simInt scriptHandle,const simChar* parameterName,simInt* parameterLength);
237-
simInt simSetScriptSimulationParameter(simInt scriptHandle,const simChar* parameterName,const simChar* parameterValue,simInt parameterLength);
238236
simInt simFloatingViewAdd(simFloat posX,simFloat posY,simFloat sizeX,simFloat sizeY,simInt options);
239237
simInt simFloatingViewRemove(simInt floatingViewHandle);
240238
simInt simAdjustView(simInt viewHandleOrIndex,simInt associatedViewableObjectHandle,simInt options,const simChar* viewLabel);
@@ -501,8 +499,6 @@
501499
simChar* simOpenTextEditor(const simChar* initText,const simChar* xml,simInt* various);
502500
simChar* simPackTable(simInt stackHandle,simInt* bufferSize);
503501
simInt simUnpackTable(simInt stackHandle,const simChar* buffer,simInt bufferSize);
504-
simInt simSetVisionSensorFilter(simInt visionSensorHandle,simInt filterIndex,simInt options,const simInt* pSizes,const simUChar* bytes,const simInt* ints,const simFloat* floats,const simUChar* custom);
505-
simInt simGetVisionSensorFilter(simInt visionSensorHandle,simInt filterIndex,simInt* options,simInt* pSizes,simUChar** bytes,simInt** ints,simFloat** floats,simUChar** custom);
506502
simInt simSetReferencedHandles(simInt objectHandle,simInt count,const simInt* referencedHandles,const simInt* reserved1,const simInt* reserved2);
507503
simInt simGetReferencedHandles(simInt objectHandle,simInt** referencedHandles,simInt** reserved1,simInt** reserved2);
508504
simInt simGetShapeViz(simInt shapeHandle,simInt index,struct SShapeVizInfo* info);
@@ -518,6 +514,8 @@
518514
simInt simSetJointDependency(simInt jointHandle,simInt masterJointHandle,simFloat offset,simFloat coeff);
519515
simInt simSetStringNamedParam(const simChar* paramName,const simChar* stringParam,simInt paramLength);
520516
simChar* simGetStringNamedParam(const simChar* paramName,simInt* paramLength);
517+
simChar* simGetUserParameter(simInt objectHandle,const simChar* parameterName,simInt* parameterLength);
518+
simInt simSetUserParameter(simInt objectHandle,const simChar* parameterName,const simChar* parameterValue,simInt parameterLength);
521519
522520
523521
@@ -700,14 +698,16 @@
700698
simInt simLoadUI(const simChar* filename,simInt maxCount,simInt* uiHandles);
701699
simInt simSaveUI(simInt count,const simInt* uiHandles,const simChar* filename);
702700
simInt simHandleGeneralCallbackScript(simInt callbackId,simInt callbackTag,simVoid* additionalData);
703-
//simInt simRegisterCustomLuaFunction(const simChar* funcName,const simChar* callTips,const simInt* inputArgumentTypes,simVoid(*callBack)(struct SLuaCallBack* p));
704701
simInt simRegisterCustomLuaVariable(const simChar* varName,const simChar* varValue);
705702
simInt simRegisterContactCallback(simInt(*callBack)(simInt,simInt,simInt,simInt*,simFloat*));
706703
simInt simRegisterJointCtrlCallback(simInt(*callBack)(simInt,simInt,simInt,const simInt*,const simFloat*,simFloat*));
707704
simInt simGetMechanismHandle(const simChar* mechanismName);
708705
simInt simHandleMechanism(simInt mechanismHandle);
709706
simInt simHandleCustomizationScripts(simInt callType);
710-
//simInt simCallScriptFunction(simInt scriptHandleOrType,const simChar* functionNameAtScriptName,SLuaCallBack* data,const simChar* reservedSetToNull);
707+
simInt simSetVisionSensorFilter(simInt visionSensorHandle,simInt filterIndex,simInt options,const simInt* pSizes,const simUChar* bytes,const simInt* ints,const simFloat* floats,const simUChar* custom);
708+
simInt simGetVisionSensorFilter(simInt visionSensorHandle,simInt filterIndex,simInt* options,simInt* pSizes,simUChar** bytes,simInt** ints,simFloat** floats,simUChar** custom);
709+
simChar* simGetScriptSimulationParameter(simInt scriptHandle,const simChar* parameterName,simInt* parameterLength);
710+
simInt simSetScriptSimulationParameter(simInt scriptHandle,const simChar* parameterName,const simChar* parameterValue,simInt parameterLength);
711711
// Deprecated end
712712
713713
""")
@@ -716,26 +716,27 @@
716716
cffi_path = os.path.join(cwd, 'cffi_build')
717717

718718
ffibuilder.set_source(
719-
"pyrep.backend._v_rep_cffi",
719+
"pyrep.backend._sim_cffi",
720720
"""
721-
#include "v_rep.h" // the C header of the library
721+
#include "sim.h" // the C header of the library
722722
""",
723-
libraries=['v_rep'],
724-
library_dirs=[os.environ['VREP_ROOT']],
723+
libraries=['coppeliaSim'],
724+
library_dirs=[os.environ['COPPELIASIM_ROOT']],
725725
include_dirs=[cffi_path])
726726

727727
# For some reason, cffi makes it such that it looks for libv_rep.so.1
728728
# rather than libv_rep.so. So we add a symlink.
729-
path = os.path.join(os.environ['VREP_ROOT'], 'libv_rep.so')
729+
path = os.path.join(os.environ['COPPELIASIM_ROOT'], 'libcoppeliaSim.so')
730730
if not os.path.exists(path + '.1'):
731731
print('creating symlink: %s -> %s' % (path + '.1', path))
732732
os.symlink(path, path + '.1')
733733

734734
# Copy lua functions to the VREP_ROOT
735-
print('copying lua file: %s -> %s' % ('pyrep/backend', os.environ['VREP_ROOT']))
736-
lua_script_fname = 'vrepAddOnScript_PyRep.lua'
735+
print('copying lua file: %s -> %s' % ('pyrep/backend',
736+
os.environ['COPPELIASIM_ROOT']))
737+
lua_script_fname = 'simAddOnScript_PyRep.lua'
737738
copyfile(os.path.join('pyrep/backend', lua_script_fname),
738-
os.path.join(os.environ['VREP_ROOT'], lua_script_fname))
739+
os.path.join(os.environ['COPPELIASIM_ROOT'], lua_script_fname))
739740

740741
if __name__ == "__main__":
741742
ffibuilder.compile(verbose=True)

cffi_build/v_rep.h renamed to cffi_build/sim.h

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
// ==============
3-
// v_repTypes.h
3+
// simTypes.h
44
// ==============
55

66
// Various types used in the interface functions:
@@ -68,7 +68,7 @@ typedef int (*jointCtrlCallback)(int,int,int,const int*,const float*,float*);
6868

6969

7070
// ==============
71-
// v_rep.h
71+
// sim.h
7272
// ==============
7373

7474
simInt simRunSimulator(const simChar* applicationName,simInt options,simVoid(*initCallBack)(),simVoid(*loopCallBack)(),simVoid(*deinitCallBack)());
@@ -217,8 +217,6 @@ simInt simUnloadModule(simInt pluginhandle);
217217
simVoid* simSendModuleMessage(simInt message,simInt* auxiliaryData,simVoid* customData,simInt* replyData);
218218
simVoid* simBroadcastMessage(simInt* auxiliaryData,simVoid* customData,simInt* replyData);
219219
simChar* simGetModuleName(simInt index,simUChar* moduleVersion);
220-
simChar* simGetScriptSimulationParameter(simInt scriptHandle,const simChar* parameterName,simInt* parameterLength);
221-
simInt simSetScriptSimulationParameter(simInt scriptHandle,const simChar* parameterName,const simChar* parameterValue,simInt parameterLength);
222220
simInt simFloatingViewAdd(simFloat posX,simFloat posY,simFloat sizeX,simFloat sizeY,simInt options);
223221
simInt simFloatingViewRemove(simInt floatingViewHandle);
224222
simInt simAdjustView(simInt viewHandleOrIndex,simInt associatedViewableObjectHandle,simInt options,const simChar* viewLabel);
@@ -485,8 +483,6 @@ simInt simCheckOctreePointOccupancy(simInt octreeHandle,simInt options,const sim
485483
simChar* simOpenTextEditor(const simChar* initText,const simChar* xml,simInt* various);
486484
simChar* simPackTable(simInt stackHandle,simInt* bufferSize);
487485
simInt simUnpackTable(simInt stackHandle,const simChar* buffer,simInt bufferSize);
488-
simInt simSetVisionSensorFilter(simInt visionSensorHandle,simInt filterIndex,simInt options,const simInt* pSizes,const simUChar* bytes,const simInt* ints,const simFloat* floats,const simUChar* custom);
489-
simInt simGetVisionSensorFilter(simInt visionSensorHandle,simInt filterIndex,simInt* options,simInt* pSizes,simUChar** bytes,simInt** ints,simFloat** floats,simUChar** custom);
490486
simInt simSetReferencedHandles(simInt objectHandle,simInt count,const simInt* referencedHandles,const simInt* reserved1,const simInt* reserved2);
491487
simInt simGetReferencedHandles(simInt objectHandle,simInt** referencedHandles,simInt** reserved1,simInt** reserved2);
492488
simInt simGetShapeViz(simInt shapeHandle,simInt index,struct SShapeVizInfo* info);
@@ -502,6 +498,8 @@ simInt simApplyTexture(simInt shapeHandle,const simFloat* textureCoordinates,sim
502498
simInt simSetJointDependency(simInt jointHandle,simInt masterJointHandle,simFloat offset,simFloat coeff);
503499
simInt simSetStringNamedParam(const simChar* paramName,const simChar* stringParam,simInt paramLength);
504500
simChar* simGetStringNamedParam(const simChar* paramName,simInt* paramLength);
501+
simChar* simGetUserParameter(simInt objectHandle,const simChar* parameterName,simInt* parameterLength);
502+
simInt simSetUserParameter(simInt objectHandle,const simChar* parameterName,const simChar* parameterValue,simInt parameterLength);
505503

506504

507505

@@ -684,12 +682,14 @@ simInt simGetUIPosition(simInt uiHandle,simInt* position);
684682
simInt simLoadUI(const simChar* filename,simInt maxCount,simInt* uiHandles);
685683
simInt simSaveUI(simInt count,const simInt* uiHandles,const simChar* filename);
686684
simInt simHandleGeneralCallbackScript(simInt callbackId,simInt callbackTag,simVoid* additionalData);
687-
simInt simRegisterCustomLuaFunction(const simChar* funcName,const simChar* callTips,const simInt* inputArgumentTypes,simVoid(*callBack)(struct SLuaCallBack* p));
688685
simInt simRegisterCustomLuaVariable(const simChar* varName,const simChar* varValue);
689686
simInt simRegisterContactCallback(simInt(*callBack)(simInt,simInt,simInt,simInt*,simFloat*));
690687
simInt simRegisterJointCtrlCallback(simInt(*callBack)(simInt,simInt,simInt,const simInt*,const simFloat*,simFloat*));
691688
simInt simGetMechanismHandle(const simChar* mechanismName);
692689
simInt simHandleMechanism(simInt mechanismHandle);
693690
simInt simHandleCustomizationScripts(simInt callType);
694-
//simInt simCallScriptFunction(simInt scriptHandleOrType,const simChar* functionNameAtScriptName,SLuaCallBack* data,const simChar* reservedSetToNull);
695-
// Deprecated end
691+
simInt simSetVisionSensorFilter(simInt visionSensorHandle,simInt filterIndex,simInt options,const simInt* pSizes,const simUChar* bytes,const simInt* ints,const simFloat* floats,const simUChar* custom);
692+
simInt simGetVisionSensorFilter(simInt visionSensorHandle,simInt filterIndex,simInt* options,simInt* pSizes,simUChar** bytes,simInt** ints,simFloat** floats,simUChar** custom);
693+
simChar* simGetScriptSimulationParameter(simInt scriptHandle,const simChar* parameterName,simInt* parameterLength);
694+
simInt simSetScriptSimulationParameter(simInt scriptHandle,const simChar* parameterName,const simChar* parameterValue,simInt parameterLength);
695+
// Deprecated end

pyrep/backend/vrep.py renamed to pyrep/backend/sim.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
from .vrepConst import *
2-
from ._v_rep_cffi import ffi, lib
1+
from .simConst import *
2+
from ._sim_cffi import ffi, lib
33
import numpy as np
44

55

File renamed without changes.

pyrep/backend/utils.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import sys
44
from contextlib import contextmanager
55
from typing import List, Tuple
6-
from pyrep.backend import vrep
6+
from pyrep.backend import sim
77
from pyrep.objects.object import Object
88
from pyrep.objects.shape import Shape
99
from pyrep.objects.dummy import Dummy
@@ -20,20 +20,20 @@ def to_type(handle: int) -> Object:
2020
:param handle: The internal handle of an object.
2121
:return: The sub-type of this object.
2222
"""
23-
t = vrep.simGetObjectType(handle)
24-
if t == vrep.sim_object_shape_type:
23+
t = sim.simGetObjectType(handle)
24+
if t == sim.sim_object_shape_type:
2525
return Shape(handle)
26-
elif t == vrep.sim_object_dummy_type:
26+
elif t == sim.sim_object_dummy_type:
2727
return Dummy(handle)
28-
elif t == vrep.sim_object_path_type:
28+
elif t == sim.sim_object_path_type:
2929
return CartesianPath(handle)
30-
elif t == vrep.sim_object_joint_type:
30+
elif t == sim.sim_object_joint_type:
3131
return Joint(handle)
32-
elif t == vrep.sim_object_visionsensor_type:
32+
elif t == sim.sim_object_visionsensor_type:
3333
return VisionSensor(handle)
34-
elif t == vrep.sim_object_forcesensor_type:
34+
elif t == sim.sim_object_forcesensor_type:
3535
return ForceSensor(handle)
36-
elif t == vrep.sim_object_proximitysensor_type:
36+
elif t == sim.sim_object_proximitysensor_type:
3737
return ProximitySensor(handle)
3838

3939

@@ -56,7 +56,7 @@ def script_call(function_name_at_script_name: str,
5656
:param bytes: The input bytes to the script (as a string).
5757
:return: Any number of return values from the called Lua function.
5858
"""
59-
return vrep.simExtCallScriptFunction(
59+
return sim.simExtCallScriptFunction(
6060
function_name_at_script_name, script_handle_or_type, list(ints),
6161
list(floats), list(strings), bytes)
6262

0 commit comments

Comments
 (0)