ABB 机械臂的部分代码
abb端socket通讯代码:
MODULE connect_pcTASK PERS tooldata tool100:=[TRUE,[[0,0,0],[0,0.70711,0,0.70711]],[1.3,[0,0,150],[1,0,0,0],0,0,0]];VAR robtarget P100:=[[1000,0,500],[1,0,0,0],[-1,0,-1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];VAR num posedatab{7};VAR bool okb;VAR pos pos1b;VAR num Eangle{3};VAR string strtrans;VAR string strrot;VAR string str;VAR string PC_adressb;!192.168.125.1//127.0.0.1;!虚拟机地址127.0.0.1,真实机械臂地址为192.168.125.1VAR string IRC5_adressb:="192.168.125.1"; CONST num pro_portb :=8885;VAR socketdev server_socketb;VAR socketdev client_socketb;VAR socketstatus statusb;VAR num peek_valueb:=65;VAR num p:=5;VAR pose objectb;!errorVAR string str_datab;VAR string str_databb:="[1,1000.1,0.2,300.3,0,90,0]";VAR num retry_nob:=0;PROC main3()intialb;!MoveAbsJ [[0,0,0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]\NoEOffs,v300,z50,tool0;WHILE TRUE DOstr_datab:="[1,1000.1,0.2,300.03,0,90,0]";TRAN;SocketSend client_socketb\str:=str;!发送位姿,第一次发送的是P100初始值Receivedatab;!接受数据,第一位为校验位,后六位为位姿Moveitb;ENDWHILEsocketclose server_socketb;!关闭socketclose client_socketb;ENDPROCPROC Moveitb()!??IF posedatab{1}=1 OR posedatab{1}=2 THENMoveJ P100,v50,fine,tool0;ELSEMoveL Offs(P100,200,0,0),v20,fine,tool100;ENDIFENDPROCPROC TRAN()Eangle{1}:=EulerZYX(\X,P100.rot);!姿态四元数转欧拉角Eangle{2}:=EulerZYX(\Y,P100.rot);Eangle{3}:=EulerZYX(\Z,P100.rot);strrot:=ValToStr(Eangle);strtrans:=ValToStr(P100.trans);!位值类型转stringstr:=strtrans+strrot;!字节合并ENDPROCPROC Receivedatab()SocketReceive client_socketb\Str:=str_datab\Time:=200;!接收字符串TPWrite"inputvlaue="+str_datab;!示教器上显示okb:=strtoval(str_datab,posedatab);!字符串转数字变量IF okb=TRUE THENP100.trans.x:=posedatab{2}*1000;!位置赋值P100.trans.y:=posedatab{3}*1000;P100.trans.z:=posedatab{4}*1000;IF posedatab{1}=1 THENobjectb.rot:=OrientZYX(posedatab{7},posedatab{6},posedatab{5});!欧拉角转四元数P100.rot:=objectb.rot;ELSEIF posedatab{1}=2 THENobjectb.rot:=OrientZYX(0,0,posedatab{5});P100.rot:=objectb.rot;ENDIFELSETPWrite "DATA ERROR.";ENDIFENDPROCPROC intialb()socketclose server_socketb;SocketCreate server_socketb;IF RobOS() THEN!TheRobOS() is just for testing if the code is running on a real controller or a VirtualcontrollerSocketBind server_socketb,IRC5_adressb,pro_portb;ELSESocketBind server_socketb,"192.168.125.1",pro_portb;ENDIFSocketListen server_socketb;!listen inputSocketAccept server_socketb,client_socketb\ClientAddress:=PC_adressb\Time:=30;!SocketSend client_socket\Str:="serverwithip-address"+IRC5_adress;statusb:=SocketGetStatus(server_socketb);IF statusb=SOCKET_CREATED THENTPWrite "Instruction SocketCreate has been executed";ELSEIF statusb=SOCKET_CLOSED THENTPWrite"Instruction SocketClose has been executed";ELSEIF statusb=SOCKET_BOUND THENTPWrite"Instruction SocketBind has been executed";ELSEIF statusb=SOCKET_LISTENING THENTPWrite"Instruction SocketListen or SocketAccept has been executed";ELSEIF statusb=SOCKET_CONNECTED THENTPWrite"Instruction SocketConnect,SocketReceive or SocketSend has been executed";ELSETPWrite"Unknown socket status";ENDIFERRORIF ERRNO=ERR_SOCK_TIMEOUT THENRETRY;ELSEIF ERRNO=ERR_SOCK_CLOSED THENsocketclose server_socketb;RETRY;ELSE!No error recovery handlingENDIFENDPROC
ENDMODULE
pc端socket通讯代码:(这一份是手眼标定的时候使用,只用修改position数组内容,相机采集图片的函数换成自己的就行)
#include<WINSOCK2.H>
#include<STDIO.H>#include<iostream>
#include<cstring>
using namespace std;#pragma comment(lib,"ws2_32.lib")void CaptureImages1(const string& rgb_folder, const string& tof_folder)
{int frame = 0;cv::namedWindow("OpenCV Display Window", cv::WINDOW_NORMAL); // other options: CV_AUTOSIZE, CV_FREERATIOcv::namedWindow("ToF Intensity", cv::WINDOW_NORMAL); // other options: CV_AUTOSIZE, CV_FREERATIOint i = 0;sensors::BaslerTOF tofCamera;sensors::BaslerRGB rgbCamera;rgbCamera.start();tofCamera.start();std::cout << "ABB通讯客户端程序." << endl;std::cout << "创建tcp客户端中..." << endl;WORD sockVersion = MAKEWORD(2, 2);WSADATA wsd;//加载套接字if (WSAStartup(sockVersion, &wsd) != 0){std::cout << "创建失败,请重试";return;}else{SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建套接字if (sclient == INVALID_SOCKET){std::cout << "invalid socket!";return;}sockaddr_in serAddr;serAddr.sin_family = AF_INET;serAddr.sin_port = htons(8885);PCWSTR src = TEXT("192.168.125.1");InetPton(AF_INET, src, &serAddr.sin_addr.s_addr);//serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//服务器地址,虚拟机地址为127.0.0.1if (connect(sclient, (sockaddr*)&serAddr, sizeof(serAddr)) == SOCKET_ERROR){ //连接失败std::cout << "connect error !";closesocket(sclient);return;}std::cout << "success" << endl;while (rgbCamera.isGrabbing()&&i<9){bool brgb = rgbCamera.grabImages();bool btof = tofCamera.grabImages();if (brgb && btof) {cv::Mat rgb = rgbCamera.getRGBMap();double factor = 0.3;cv::Mat outImg;cv::resize(rgb, outImg, cv::Size(), factor, factor);cv::imshow("OpenCV Display Window", outImg);cv::Mat intensity = tofCamera.getIntensityMap();cv::imshow("ToF Intensity", intensity);while (int c = cv::waitKey(10)){if (c == 's'){//float r1 = 0, r2 = 0, r3 = 0;float position[48] = { 0.06483,-0.16373,1.11918,-94.66,-30.01,177.08,0.05403,-0.16,1.11941,-104.88,-30.29,175.24,0.03095,-0.15406,1.14088,-89.16,-37.47,152.1,0.06645,-0.16408,1.15401,-92.58,-30.54,177.04,0.07179,-0.15373,1.14292,-120.81,-24.08,-167.41,0.11183,-0.14032,1.17467,-122.13,-4.46,-147.65,0.00929,-0.21911,1.16927,-123.81,-0.72,178.38,-0.01208,-0.22469,1.18641,-111.88,-6.51,166.18 };float x = position[6 * i], y = position[6 * i + 1], z = position[6 * i + 2], rx = position[6 * i + 3], ry = position[6 * i + 4], rz = position[6 * i + 5];char recData[127];int ret = recv(sclient, recData, 127, 0);if (ret > 0 && i > 0){recData[ret] = 0x00;std::cout << "当前位姿:" << recData << endl;// save ToF Intensity imageostringstream stringStream;stringStream << rgb_folder << "/frame_" << frame << ".jpg";std::string file_path = stringStream.str();bool bwrite_jpg = cv::imwrite(file_path, rgb);if (!bwrite_jpg)std::cout << "cannot save rgb images." << endl;stringStream.str("");stringStream.clear();stringStream << tof_folder << "/frame_" << frame << ".png";file_path = stringStream.str();bool bwrite_png = cv::imwrite(file_path, intensity);if (!bwrite_png)std::cout << "cannot save intensity images." << endl;frame++;}if (i < 8) {char data[100];sprintf_s(data, "[%d,%f,%f,%f,%f,%f,%f]", 1, x, y, z, rx, ry, rz);//第一位为校验位,二至四四位置,五至七是欧拉角send(sclient, data, strlen(data), 0);std::cout << "发送位姿" << data << endl;}i++;Sleep(3000);}if (c == 'q'){rgbCamera.stop();tofCamera.stop();}break;}}}closesocket(sclient);WSACleanup();}tofCamera.stop();rgbCamera.stop();}
小功能的rapid代码
!***************************************************** ! set speed!***************************************************** FUNC speeddata shifting(num base)IF base = 0 THEN RETURN v100;ELSEIF base = 1 THEN RETURN v300;ELSEIF base = 2 THEN RETURN v600;ELSE RETURN v1000;ENDIFENDFUNC
!***************************************************** ! detect reachable
!***************************************************** FUNC bool IsReachable(robtarget pReach, PERS tooldata ToolReach, PERS wobjdata WobjReach)! Check if specified robtarget can be reach with given tool and wobj.! ! Output:! Return TRUE if given robtarget is reachable with given tool and wobj! otherwise return FALSE!! Parameters:! pReach - robtarget to be checked, if robot can reach this robtarget! ToolReach - tooldata to be used for possible movement! WobjReach - wobjdata to be used for possible movementVAR bool bReachable;VAR jointtarget jntReach;bReachable := TRUE;jntReach := CalcJointT(pReach, ToolReach\Wobj:=WobjReach);RETURN bReachable;ERRORIF ERRNO = ERR_ROBLIMIT THENbReachable := FALSE;TRYNEXT;ENDIFENDFUNC
! return robot postion
FUNC robtarget Robot_Position()VAR robtarget p1; p1 := CRobT(\Tool:=tool0 \WObj:=wobj0);RETURN p1;ENDFUNC
ABB 机械臂的部分代码相关推荐
- ABB机械臂和RobotStudio编程简介
ABB机械臂和RobotStudio编程简介 机械臂 ABB机械臂 ABB示教器 RobotStudio与编程简介 RobotStudio简介与安装 RobotStudio使用 RAPID程序指令 机 ...
- Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路...
Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路 先看一看我的代码运行结果. 代码运行起来初始化状态: 点击开始按钮,唱片机的机械臂匀速接近唱片磁盘,同时唱片磁盘也 ...
- ROS中下载abb机械臂文件
工具:ubuntu16.04.ros kinetic 一.创建abb的工作空间 mkdir -p ~/abb_ws/src cd ~/abb_ws/src catkin_init_workspace ...
- 基于STM32与TB6600的机械臂项目(代码开源)
前言:本文为手把手教学STM32的机械臂项目--Robot Arm,本次项目采用的是STM32作为MCU.该机械臂的基础模型为国外开源项目,诸多前辈经过长时间的验证与改进,其机械臂精度 ...
- ABB机械臂乱弹1-ABB机器人选项功能
ABBSystemOptions:选项功能 Industrial Networks 现场总线 709-1 DeviceNet Master/Slave 必备888-2 PROFINET Control ...
- ABB irb 1200机械臂robot studio控制方法
公司项目:两个机械臂+龙门,进行控制柜器件的装配 第一步:下载并解压RobotStudio6.08安装包. 链接: https://pan.baidu.com/s/1ZzbmFs1nsUfTDh2-N ...
- python机械臂仿真_使用VTK与Python实现机械臂三维模型可视化
三维可视化系统的建立依赖于三维图形平台, 如 OpenGL.VTK.OGRE.OSG等, 传统的方法多采用OpenGL进行底层编程,即对其特有的函数进行定量操作, 需要开发人员熟悉相关函数, 从而造成 ...
- 机器人学回炉重造(1-2):各种典型机械臂的正运动学建模(标准D-H法)
文章目录 写在前面 三连杆平面机械臂 平行四边形操作臂 闭链结构 例:平行四边形操作臂 球形臂 拟人臂 球腕 斯坦福机械臂 带球形手腕的拟人化机械臂 DLR机械臂 参考文献 写在前面 本文所有机械臂均 ...
- 六轴机械臂DIY(一)机械臂DIY总体规划
一直想搞一个六轴机械臂玩玩,查了查网上的资料,发现这个开源项目已经较为成熟,但没有一个总体的教程.正好我可以记录一下我接下来的DIY过程,作为一个项目日记.(当然不确定项目会不会烂尾) 本项目参考gi ...
- Dobot机械臂木块分拣
机器人工程实践 1.实验题目:基于opencv的木块分拣实验 1.1实验目的:掌握编写c++程序脚本并部署到硬件设备的能力:内置API配合opencv来操作机械臂进行物块的分拣 2.实验软件环境的搭建 ...
最新文章
- 这所211大学,迎来80后女科学家任副校长
- linux cat EOF 变量自动解析问题
- OVS datapath主流程分析(二十一)
- python通过requirements.txt文件批量安装依赖包的实现步骤
- MySQL之优化器、执行计划、简单优化
- 眼压与角膜厚度的关系
- WordPressmodown收费模板
- 容量耦合系数模型_使用Fluent电芯仿真模型进行结构设计优缺点分析
- NVIDIA官方指南:libav编译支持Nvidia Codec(结果失败)
- AMD R9 280x tri-x vapor-x OC 刷新BIOS来节能降温
- 科学巨星的美丽轨迹——走近博弈论大师纳什
- 文件服务器和nas区别,nas和ftp服务器的区别
- 差分法求一阶导数二阶导数,matlab
- php 表示每月一号,关于适合每月一号发的说说
- Dubbo 3.0新特性记录
- 正版现货黄金怎么区分(上)
- 计算机夏令营英语怎么说,“夏令营”英语怎么说
- oracle vpd策略,oracle vpd 策略查询
- 人工智能在技术发展和落地应用等方面都获得了诸多突破
- java有丰富的库,【判断题】Java有丰富的库供我们调用
A. 正确
B. 错误