毫秒级接收ABB机器人当前位置
向右滑动查看毫秒级炸裂效果
肖小湿哥哥,炸裂效果看不懂。
●●●
没有切水果般的炸裂感
seq是序号,懂了伐!
tm是时间戳,懂了伐!
pos:xyz就是机器人当前位置
懂了伐!
嗨呀!知佐咯,我看到每条记录的tm就是相差4,
也就是4毫秒(ms)就看到一条位置数据呀,好厉害的机器人啊!仿佛用头开西瓜的炸裂感!好想买台机器人回家开西瓜啊!
●●●
END
等
等
等
等等!还没有结束下面是无废话的正文
Externally Guided Motion(以下简称EGM)
ABB机器人方便客户外部直接引导/获取机器人位置等信息而设置的高级接口。
EGM提供3种特性
EGM Position Stream
RAPID任务中机械单元的当前和计划位置发送至外部系统。
速度能达到250Hz(最快4ms一个位置)。
EGM Position Guidance
可以实现机器人沿着某件外部装置所生成的路径移动(即可以变相实现外部路径直接规划)。
机器人可接收xyzabc笛卡尔坐标或a1-a6关节坐标。
最快能达到4ms。
EGM Path Correction
用某件外部装置提供的测量值来修改/校正所编写的机器人路径。
速度为48ms的倍数。
EGM Position Stream仅可用于Udp单播通信。其能够让机器人控制器定期发送机械单元(例如机器人、定位器、导轨..)的计划和实际位置数据。
通过Google Protobuf 定义文件 egm.proto来详细说明信息内容。用户可在IRC5控制器的高优先级网络环境(以此确保高达250赫兹的稳定数据交换)下运行周期通信通道(UDP)。
各运行任务必须配备一个通信通道。
EGM Position Stream可与EGM Position Guidance一同使用。
敲黑板,开始上课如何利用EGM Position Stream实现前文的炸裂效果
01机器人配置
1.进入示教器-控制面板-配置-主题-communication-Transmission Protocal
2.进入新建一个项目,命名例如为UCdevice
3.类型选择UDPUC,Remote Address为远程server的ip地址。使用EGM Stream时,通常机器人为client。
4.若有多个Server(设备)需要传送数据,设置端口如下。
5.在机器人创建代码如下:
PROC UDP_TEST1()
VAR egmident egmID1;
EGMGetId egmID1;
EGMSetupUC ROB_1,egmID1,"default","UCdevice"\Pose;
! 使用UCdevice设备,名字为前文配置设备名字,使用defaul配置。
! 如果发送数据格式为xyz q1-q4,选择类型为Pose
! 如果发送数据格式为a1-a6,选择类型为Joint
EGMStreamStart egmID1\SampleRate:=4
! 开始输出,采样率为4ms
MoveAbsJ jpos20,v100,z20,tool0;
MoveAbsJ jpos10\NoEOffs,v1000,fine,tool0;
! 移动机器人
EGMStreamStop egmID1;
! 停止输出
EGMReset egmID1;
ENDPROC
6.EGM sensor protocol使用Google Protocol Buffers来进行编码,并把UDP则作为一则传送协议。选择Google Protocol Buffers的原因是其具有速度和语言中立性方面的优势。由于所发送的数据是高频发送的实时数据,且一旦丢失数据包,那么重新发送这些数据也无济于事,所以选择了UDP作为传送协议。
7.Google Protocol Buffers或Protobuf能非常高效地对数据进行串行化/去串行化。Protobuf大致上比 XML快10到100倍。互联网上有大量关于Protobuf的信息。02PC端配置及范例代码1.下载protobuf-csharp,并解压。
https://code.google.com/p/protobuf-csharp-port/.
或者通过互联网搜索protobuf-csharp
2.解压缩文件中是否有tools文件夹且文件夹内有以下文件。
若没有,则进入解压缩文件的build文件夹,点击运行
则会产生build_outputs文件夹,内有tools文件夹及上述文件。
3.在安装有robotstudio的pc上,进入如下路径
C:\ProgramData\ABB Industrial IT\Robotics IT\DistributionPackages\ABB.RobotWare-6.08.0134\RobotPackages\RobotWare_RPK_6.08.0134\utility\Template\EGM,找到egm.proto文件。
4.在安装在步骤2中的tools文件夹内,新建一个egm文件夹。
5.将egm.proto文件复制到一个步骤4中创建的egm文件夹,如~\protobuf-csharp-port-2.4.1.555\build_output\tools\egm。
6.启动Windows控制台(windows搜索框输入CMD)
利用相关语句转到如下路径:~\protobuf-csharp-port-2.4.1.555\build_output\tools
7.在该Windows控制台输入以下内容,利用egm.proto文件生成一份EGM C#文件(egm.cs)
protogen .\egm\egm.proto --proto_path=.\egm
在tools文件夹下则会生成egm.cs文件
8.在Visual Studio中创建一项C# Windows控制台应用,比如EgmSensorApp。
9.确认VS中已经安装NuGet,若没有,则在Visual Studio中点击工具,然后点击扩展名管理器,转至在线,找到NuGet Package Manager extension,然后点击下载
10.在使用NuGet的C# Windows Console应用的解决方案中安装protobuf-csharp。必须在Visual Studio中打开该解决方案。
11.在Visual Studio中依次选择工具、Nuget数据包管理器和数据包管理器控制台。
在控制台中输入如下代码:
类型PM>Install-Package Google.ProtocolBuffers
12.在使用在Visual Studio项目中添加所生成的文件egm.cs(添加现有项目)
13.将示例代码复制到Visual Studio Windows Console应用文件(EgmSensorApp.cpp),然后依次编译、链接和执行。
实例代码可以从如下路径
C:\ProgramData\ABB Industrial IT\Robotics IT\DistributionPackages\ABB.RobotWare-6.08.0134\RobotPackages\RobotWare_RPK_6.08.0134\utility\Template\EGM获取egm-sensor.cs代码范例
14.范例代码为pc收取机器人数据并发送数据到机器人,在测试时,可以先将以下pc发送代码注释(即暂不执行)。
EgmSensor.Builder sensor = EgmSensor.CreateBuilder();
CreateSensorMessage(sensor);
using (MemoryStream memoryStream = new MemoryStream())
{
EgmSensor sensorMessage = sensor.Build();
sensorMessage.WriteTo(memoryStream);
// send the udp message to the robot
int bytesSent = _udpServer.Send(memoryStream.ToArray(),
(int)memoryStream.Length, remoteEP);
if (bytesSent < 0)
{
Console.WriteLine("Error send to robot");
}
}
15.范例代码仅输出了机器人发送过来的序号和时间戳(4ms一次),可以添加如下代码,显示机器人的实时反馈位置。
Console.WriteLine("Seq={0} tm={1} pos= {2}",
robot.Header.Seqno.ToString(), robot.Header.Tm.ToString(), robot.FeedBack.Cartesian.Pos);
16.先运行C#代码,再启动机器人侧代码。
炸裂出现了!!
完
戳原文,更有源码工作站下载! |