ros dobot示教程序

Dobot Magician API接口说明V1.2.2版本
1.9HHT功能:

HHT(Hand-hold Teaching)即手持示教。默认情况下,用户按住小臂的圆形解锁按钮,可拖动机械臂到任意位置,松开按钮就可以自动保存一个存点。
1.9.1设置手持示教触发模式
原型 int SetHHTTrigMode (HHTTrigMode hhtTrigMode)
功能 设置手持示教信号触发模式。如果不调用该函数,则默认按键释放时触发
参数 HHTTrigMode:
typedef enum tagHHTTrigMode{TriggeredOnKeyReleased,     //按键释放时触发
TriggeredOnPeriodicInterval     //按键被按下的过程中触发
}HHTTrigMode;
hhtTrigMode:HHTTrigMode 枚举
返回
DobotCommunicate_NoError:指令正常返回
DobotCommunicate_Timeout:指令无返回,导致超时
获取触发模式
1.9.2获取手持示教触发模式
原型: int GetHHTTrigMode (HHTTrigMode *hhtTrigMode)
功能: 获取手持示教信号触发模式
参数: typedef enum tagHHTTrigMode{TriggeredOnKeyReleased,     //按键释放时触发TriggeredOnPeriodicInterval        //按键被按下的过程中定时触发
}HHTTrigMode;
hhtTrigMode:HHTTrigMode 枚举
返回:
DobotCommunicate_NoError:指令正常返回
DobotCommunicate_Timeout:指令无返回,导致超时
1.9.3设置手持示教使能状态
原型: int SetHHTTrigOutputEnabled (bool isEnabled)
功能: 设置手持示教状态
参数: isEnabled:0,去使能。1,使能
返回: DobotCommunicate_NoError:指令正常返回
DobotCommunicate_Timeout:指令无返回,导致超时
1.9.4获取手持示教功能使能状态
原型: int GetHHTTrigOutputEnabled (bool *isEnabled)
功能: 获取手持示教使能状态
参数: isEnabled:0,去使能。1,使能
返回 DobotCommunicate_NoError:指令正常返回
DobotCommunicate_Timeout:指令无返回,导致超时
1.9.5获取手持示教触发信号
原型 int GetHHTTrigOutput(bool *isTriggered)
功能 获取手持示教信号。需调用 SetHHTTrigOutputEnabled 接口后才能使用
参数 isTriggered:0,未触发。1,已触发
返回 DobotCommunicate_NoError:指令正常返回
DobotCommunicate_Timeout:指令无返回,导致超时

由该文档可以得到dobot拖动示教的api,并且给了示例程序,我们只需要按着写就可以了。

vector<Pose> position_teach[10];
//获取示教线程
pthread_t teach_tid;
void *teach_fn(void* arg)
{int ret=*(int *)arg;Pose pose;bool trigered=false;while (ros::ok()){/* code for loop body */GetHHTTrigOutput(&trigered);if(trigered){GetPose(&pose);position_teach[ret].push_back(pose);//ROS_INFO("X: %f Y: %f Z: %f ",pose.x,pose.y,pose.z);}}return NULL;
}//示教服务程序
int teach_count=0;
uint8_t teach_state=0;
bool Dobot_controller::teach__deal(oryxbot_msgs::standard_mode::Request &req,oryxbot_msgs::standard_mode::Response &res)
{ROS_INFO("is ok");if(req.mode==1&&teach_state==0)        //开始示教{//示教模式选择SetHHTTrigMode(TriggeredOnPeriodicInterval);SetHHTTrigOutputEnabled(true);int err;//这里开启了一个线程用来获取示教点err=pthread_create(&teach_tid,NULL,teach_fn,&teach_count);if (err!=0){cout << "Error:unable to create thread," << err << endl;exit(-1);}else{teach_count++;teach_state=1;}}else if(req.mode==0&&teach_state==1) //关闭示教{pthread_cancel(teach_tid);//关闭线程pthread_join(teach_tid,NULL);//等待线程退出ROS_INFO("TEACH FN IS EXIR :\n");SetHHTTrigOutputEnabled(false);teach_state=0;}else if(req.mode==2)    //执行示教点{vector<Pose>::iterator pose_temp;for(pose_temp=position_teach[req.number].begin();pose_temp<position_teach[req.number].end();++pose_temp){vector<float> set_position;set_position.push_back((*pose_temp).x);set_position.push_back((*pose_temp).y);set_position.push_back((*pose_temp).z);set_position.push_back((*pose_temp).r);ROS_INFO("X: %f Y: %f Z: %f ",set_position[0],set_position[1],set_position[2]);if(!set_robot_pose(set_position)) {break;}//下面这个while并没有什么卵用,只是判断到达最终位置了没有,或者到达不了了。Pose current_position; ros::Rate rate(100);uint64_t i=0;float data[3]={0};while(ros::ok()){i++;if(get_robot_pose(&current_position)){float a = fabs(current_position.x - set_position[0]);float b = fabs(current_position.y - set_position[1]);float c = fabs(current_position.z - set_position[2]);float d = fabs(current_position.r - set_position[3]);if(i%50==0){float line=pow(data[0]-a,2)+pow(data[1]-b,2)+pow(data[2]-c,2);if(line<10){break;}     //长时间(0.5s)未移动退出data[0]=a;data[1]=b;data[2]=c;}if(a<0.05 && b<0.05 && c<0.05 && d<0.05){break; }}}}}res.success=true;return true;
}

具体实现程序如上,服务初始化如下:

ros::ServiceServer teach_server = m_handle.advertiseService("teach",&Dobot_controller::teach__deal,this);

用到的服务standard_mode.srv

uint8 number #mode=2的情况下开始第 number 次示教程序
uint8 mode      #mode 0-结束示教;1-开始示教;2-执行示教
---
bool success
string message

程序只给出了一部分,dobot初始化等可以自行实现。

dobot示教程序ros相关推荐

  1. 1至5轴通用示教程序,程序拿去就能用信捷plc程序

    #1至5轴通用示教程序,程序拿去就能用信捷plc程序 信捷PLC与昆仑触摸屏5轴示教程序,自己编写的程序 . 含程序PLC源码,整个程序有结构体用法,自定义寄存器Typedef,子函数,头文件,自动回 ...

  2. 信捷PLC与昆仑触摸屏5轴示教程序

    1至5轴通用示教程序,程序拿去就能用 信捷PLC与昆仑触摸屏5轴示教程序,自己编写的程序 . 含程序PLC源码,整个程序有结构体用法,自定义寄存器Typedef,子函数,头文件,自动回原排序,指针,结 ...

  3. 机械臂控制C语言程序,ROS机械臂开发:MoveIt!编程

    一.编程接口 提供C++.Python.GUI.命令行等接口 move_group节点 Python和C++接口示例 MoveIt关注更多的是plan工作,后面的execute需要控制器执行,Move ...

  4. 机械臂控制C语言程序,ROS下C++控制UR机械臂

    描述 ROS系统下,使用moveit和gazebo搭建UR机械臂控制的仿真环境,并使用C++编写一个节点来控制UR机械臂的移动 ROS系统:kinetic UR5机械臂 电脑系统:Ubuntu16.0 ...

  5. ROS控制桌面机械手Dobot魔术师

    0.引言 本文参考DOBOT官网给的资料,对Dobot做了简单的测试,为后续的移动抓取做准备. 越疆DOBOT魔术师 1.准备工作 这次的测试是在Ubuntu16.04+ROS kinetic环境下的 ...

  6. 在ROS下控制dobot(magician)机械手的滑轨

    在ROS下控制越疆科技dobot(magician)机械手的滑轨 GetQueuedCmdCurrentIndex.srv代码: --- int32 result uint64 queuedCmdIn ...

  7. 如何使用ROS 控制桌面机械手Dobot魔术师?

    Linux系统下, 如何使用Robot OS机器人操作系统(ROS)控制桌面级机械手Dobot Magician呢? 小女子班门弄斧了,将在此Demo中展示给大家,欢迎各位大神交流.本Demo不依赖S ...

  8. 简述工业机器人示教再现的一般步骤_机器人运动轨迹的示教主要是确认程序点的属性,这些属性包括( )。 1位置坐标;2插补方式;3再现速度;4作业点 / 空走点_学小易找答案...

    [单选题]募集设立的股份公司,认股人从( )起不得抽回出资. [填空题]1. Defoe's two important novels are _____________ and __________ ...

  9. 嵌入式的我们为什么要学ROS

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:羽林君 前言 本来是要写一篇STM32移植ROS ...

最新文章

  1. PL/SQL基础篇4(游标)
  2. 解决Dynamic Web Module 3.0 Requires Java 1.6 or newer
  3. 不合法的偏移量 钉钉接口_钉钉服务端api接口使用
  4. 安装多个java后,java版本不对
  5. 毕业设计(论文)-c++小型ftp服务器系统【毕业论文】.doc,毕业设计(论文)-C++小型FTP服务器系统.doc...
  6. Linux unshare命名的一些例子
  7. mysql my.ini my.cnf_Mysql配置文件my.ini/my.cnf
  8. 39所强基计划试点高校已全部公布招生简章
  9. 洛谷P3357:最长k可重线段集问题(网络流)
  10. (转)Delaunay三角剖分
  11. 收藏版: 深度介绍分布式系统原理
  12. kernel panic 分析解决方法
  13. nginx服务无法停止(Windows)
  14. 数据结构考研:线性表,顺序表,有序表,链表,数组的概念的区别与联系(软件工程/计算机/王道论坛)
  15. 回首13我们奋斗在14的路上
  16. Android---WMS核心分析
  17. 数据库SQLServer的视图
  18. 你需要但是找不到的网站,其实不太想分享,有你想要想收藏的
  19. [bzoj1812][IOI2006]riv_多叉树转二叉树_树形dp
  20. 统计|如何理解和进行两个总体方差的假设检验

热门文章

  1. 李沐《动手学深度学习》第二版比赛2-Classify Leaves
  2. 20162316刘诚昊 队列课下作业
  3. 云主机的六大安全威胁
  4. 基础数据结构(二):字典树、并查集、堆、哈希表、字符串的哈希方式、STL的常见容器及其接口
  5. 同花顺_知识_庄家技法_5出货技法
  6. php wss发送,HTTPS 连接WSS问题
  7. “汉语”迟早要淘汰“英语”(精品转贴)
  8. linux 4TB硬盘 只识别2T,win7只识别最多2T的分区,是不是?如果是这样,有啥办法在不分区的状况下就支持4T的硬盘?...
  9. 高性能mysql学习笔记--复制
  10. Linux添加用户练习