V-rep 使用RemoteApi交互C++程序


V-rep是如何通過remoteAPI的交互,只需要一行代碼simExtRemoteApiStart()。

以ABB為例,在新場景中直接從現有模型中拖出abb的模型。

1.1 ABB 機械臂

在Scene窗口中Abb元素的右邊有一個小本子的標志,雙擊打開編譯腳本。

1.2 程序界面

里面的代碼已經編譯好啦,V-rep的代碼示弱語言,內容主要分為幾大塊,以if(sim_call_type == xxxx)then  .... end 為分界。

 表示仿真開始,仿真中,仿真暫停,仿真結束等等不同的狀態。在不同的狀態里寫入相應的指令就好啦。

而初始化調用RemoteApi需要在初始化過程中,調用simExtRemoteApiStart(3000)。 其中3000表示端口號。端口號只要不與已有進程沖突就可以了,具體可以查詢端口使用的列表。

 

 1.3 添加RemoteApi

這里我們通過C++連接V-rep。首先我們先找到v-rep的根目錄里的programming引入include和RemoteApi兩個文件夾。想了解更多可以以bubbleRobClient中的例程為例。

我們這里在VS中創建一個自己的C++控制台程序。

這里要添加預處理:

WIN32
NDEBUG
_CONSOLE
NON_MATLAB_PARSING
MAX_EXT_API_CONNECTIONS=255zasda

 

 

 

注意添加附加包含目錄,要包括inclue和remoteapi兩個文件夾,添加頭文件

#include <stdio.h>
#include <stdlib.h>

extern "C" {
#include "extApi.h"

}

其中Port是之前定下的端口號:3000。

使用simxStart函數開啟RemoteApi的通信。返回值int,判斷是否能夠連接。

使用simxGetObjectHandle函數添加需要讀取的ObjectHandle。

使用simxGetObjectPosition函數獲得handle的位置信息。

 

例程如下:

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

extern "C" {
#include "extApi.h"
}


int main()
{
	int Port = 3000;
	int PositionControlHandle;
	simxChar* Adresse = "127.0.0.1";
	float position[3];


	int clientID = simxStart(Adresse, Port, true,true,2000,5);

	if (clientID != -1) 
	{
		printf("V-rep connected.");
		extApi_sleepMs(300);
		while (simxGetConnectionId(clientID) != -1)
		{
			simxGetObjectHandle(clientID,"IRB140_manipulationSphere", &PositionControlHandle, simx_opmode_oneshot);
			simxGetObjectPosition(clientID,PositionControlHandle,-1,position, simx_opmode_oneshot);
			printf("(%f,%f,%f)\r\n",position[0],position[1],position[2]);
		}

		simxFinish(clientID);
	}
	else {
		printf("V-rep can't be connected.");
		extApi_sleepMs(300);
	}

    return 0;
}

  

更多函數用法及參數見v-rep使用手冊,RemoteApi中C++部分及Server部分介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM