当前位置:网站首页>【CoppeliaSim4.3】C#调用 remoteApi控制场景中UR5
【CoppeliaSim4.3】C#调用 remoteApi控制场景中UR5
2022-07-03 07:23:00 【十年一梦实验室】
截图
视频演示
笔记:
一、场景脚本中添加代码,开启服务器:
function sysCall_init()
-- Start remote API server
local port=3000
simRemoteApi.start(port)
corout=coroutine.create(coroutineMain)
end
二、C#客户度连接服务器,并获取关节句柄
_id = Api.Connect(textBoxAddress.Text, (int)numericUpDownPort.Value);
if (Api.IsConnected(_id))
{
for (int i = 0; i < _jointHandle.Length; i++)
{
_jointHandle[i] = Api.GetObjectHandle(_id, _jointPrefix + (i + 1));
}
}
三、从安装目录拷贝include和remoteApi到C#项目,生成dll、lib
目录源位置
目录目标位置
生成的库拷贝到C#项目编译输出目录
四、C#调用C++库
using System;
using System.Runtime.InteropServices;
namespace CoppeliaSimCSharpAPI.TestForm
{
internal class Api
{
[DllImport("CoppeliaSimCSharpAPI.dll")]
public static extern int Connect(string address, int port);
[DllImport("CoppeliaSimCSharpAPI.dll")]
public static extern int Disconnect(int id);
[DllImport("CoppeliaSimCSharpAPI.dll")]
public static extern bool IsConnected(int id);
[DllImport("CoppeliaSimCSharpAPI.dll")]
public static extern int GetJointPosition(int id, int[] jointHandle, float[] position, int jointCount);
[DllImport("CoppeliaSimCSharpAPI.dll")]
public static extern int GetObjectHandle(int id, string objectName);
[DllImport("CoppeliaSimCSharpAPI.dll")]
public static extern int MoveJoint(int id, int[] jointHandle, float[] position, bool inTorqueForceMode, int jointCount);
[DllImport("CoppeliaSimCSharpAPI.dll")]
public static extern int SendInfo(int id, string message, bool blocking);
}
}
五、移动机械臂和获取位置
private void buttonMove_Click(object sender, EventArgs e)
{
var position = new float[]
{
(float)numericUpDownJ1.Value,
(float)numericUpDownJ2.Value,
(float)numericUpDownJ3.Value,
(float)numericUpDownJ4.Value,
(float)numericUpDownJ5.Value,
(float)numericUpDownJ6.Value
};
Api.MoveJoint(_id, _jointHandle, position, true, _jointHandle.Length);
}
private void buttonGetPosition_Click(object sender, EventArgs e)
{
var position = new float[6];
Api.GetJointPosition(_id, _jointHandle, position, _jointHandle.Length);
MessageBox.Show($"{position[0]}\r\n" +
$"{position[1]}\r\n" +
$"{position[2]}\r\n" +
$"{position[3]}\r\n" +
$"{position[4]}\r\n" +
$"{position[5]}",
"Now position");
}
The End
边栏推荐
- 《指环王:力量之戒》新剧照 力量之戒铸造者亮相
- 万卷书 - 价值投资者指南 [The Education of a Value Investor]
- 7.2刷题两个
- Docker builds MySQL: the specified path of version 5.7 cannot be mounted.
- File operation serialization recursive copy
- Interview questions about producers and consumers (important)
- docker建立mysql:5.7版本指定路径挂载不上。
- [untitled]
- Advanced API (local simulation download file)
- When MySQL inserts Chinese into the database, there is a diamond question mark garbled code
猜你喜欢
SecureCRT password to cancel session recording
Flask Foundation
TreeMap
Interview questions about producers and consumers (important)
Homology policy / cross domain and cross domain solutions /web security attacks CSRF and XSS
Distributed transactions
你开发数据API最快多长时间?我1分钟就足够了
Leetcode 198: 打家劫舍
Gridome + strapi + vercel + PM2 deployment case of [static site (3)]
High concurrency memory pool
随机推荐
OSI knowledge sorting
[solved] win10 cannot find a solution to the local group policy editor
Jeecg data button permission settings
Selenium key knowledge explanation
Specified interval inversion in the linked list
La différence entre le let Typescript et le Var
为什么说数据服务化是下一代数据中台的方向?
PdfWriter. GetInstance throws system Nullreferenceexception [en] pdfwriter GetInstance throws System. NullRef
Advanced API (serialization & deserialization)
树莓派更新工具链
sharepoint 2007 versions
3311. Longest arithmetic
The embodiment of generics in inheritance and wildcards
Arduino Serial系列函数 有关print read 的总结
你开发数据API最快多长时间?我1分钟就足够了
IO stream system and FileReader, filewriter
Topic | synchronous asynchronous
Distributed ID
Use of other streams
Use of generics