机器人位姿反馈控制开发日志

概要

这篇帖子记录了我开发机器人位姿反馈控制系统所碰到的问题

硬件

  • KUKA KR 16 R1610机器人
  • KUKA KR_C4控制柜
  • API Radian激光跟踪仪
  • 1.5英寸靶球
  • Windows电脑
  • 网线

前情提要

WinSock2.h设置recv()超时
API部分开发
KUKA RSI接口开发
KUKA部分开发
C++库Eigen学习1:普通矩阵和数组操作
Eigen文档学习
C++多线程标准库学习

验证机器人和激光跟踪仪的属性页是否兼容

按照激光跟踪仪的属性页设置机器人的属性页,看看是否报错

结论:没问题

关于交互界面

可以用一个switch结构外加一个整形路径变量来做交互界面

apidevice.h与WinSock2.h冲突

由于apidevice.h中用到了winsock.h,会与WinSock2.h冲突,故需要把WinSock2.h放在前面

WinSock2.h和winsock.h冲突
apidevice.h与WinSock2.h冲突

环境变量

API部分需要用到动态链接库,故需要设置环境变量

Visual Studio设置环境变量
设置环境变量

熟悉函数编写的一些规范

看其他人写的库大量会用到const,故了解了一下

C++函数的参数类型中为什么要加const
函数编写的一点规范

Eigen代码编码保存问题

Eigen库使用中文编码保存时会报C4819警告,我用的解决方案如下

Visual Studio 2017 警告C4819解决方案
C4819

项目路径设置

由于项目每天都会备份一次,为了不每次都修改路径,于是了解了一点VS中宏的用法

Visual Studio常用宏

API的库中connect函数用到的函数指针必须为static

对应的,函数内部的变量也需要为static

this不能在常量表达式中使用

API的库导致的bind函数冲突

API库的头文件中不知道为什么用了

using namespace std

导致后面使用bind的时候其实用的是std::bind,导致问题

目前把头文件中的前述语句删了,貌似还可以正常用

C++11中std:bind()与SOCKET bind()冲突问题
bind冲突

线程控制需要给socket通讯的recv函数设置超时时间

由于控制线程是否结束是通过每次循环的开始处检查标志位实现的,因此如果recv函数一直卡着的话线程没法正确退出

所以这里给他设置了一个超时时间,主线程修改标志位之后,即使卡在了recv处,也会因为超时进入到下一个循环,并检查标志位

WinSock2.h设置recv()超时
recv函数超时设置

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据