Phantom Omni的力与力矩操作

*本说明为对Phantom Omni的力与力矩操作
****************虚拟夹具的力读取与控制************************
1、首先力的读取要声明【全局变量】
hduVector3Dd F;//三维矢量力(x,y,z三个方向的力)
2、对力的控制可以采用配置函数Set()与Get()函数;
3、对力觉的控制或读取操作需要放到【回调帧】开始与结束之间,如例子1:
例子1:
hdBeginFrame(hdGetCurrentDevice());


/*******力控制操作********/
Set(HL_DEVICE_FORCE,F);//将期望力F送入设备(注意:虚拟夹具稳定时最大为3.3N)


/*******力读取操作********/
/*******力读取前需要获取设备装态********/
hdGetCurrentDevice();//对设备的力进行读取操作之前,需要先获取设备当前设备状态,否则读取的值不会更新。
Get(HL_DEVICE_FORCE,F)//设备力送入F形参中(注意:此时的力为动态力,有抖动最大可达8N,考虑设备安全不建议尝试)
hdEndFrame(hdGetCurrentDevice());


需要注意的是,对设备进行力操作需要对设备进行外设【安全】配置,否则力与力矩操作无效!一般不能直接进行力或力矩操作。配置方法如下:
1、在【任务调度启动】前配置力的【安全】配置,加入力与具使能函数包,接着例1如下:
hdEnable(HD_OUTPUT_FORCE)//使能与力相关的操作(主要包括对力与力矩的读写)
hdStartScheduler();
.
.
.
hdStopScheduler();
******************************************************************
****************虚拟夹具的力矩控制************************
1、首先力矩的配置要声明【全局变量】
   hduVector3Dd TORQUE;//三维矢量
2、对力矩的配置可以采用配置函数Set();
3、对力觉的操作需要放到【回调帧】开始与结束之间,如例子2:
例子2:
/*******力矩控制操作例子2********/
hdBeginFrame(hdGetCurrentDevice());


/*******力矩配置前要需要获取设备装态********/
hdGetCurrentDevice(Device_Error);//检查设备是否连接通畅,否则配置不会成功。
Set(HD_CURRENT_TORQUE,TORQUE);//外期望力矩TORQUE送入设备(注意:单位为mN.m毫牛米,最大500mN.m)
hdEndFrame(hdGetCurrentDevice());
需要注意的是,对设备进行力与力矩的控制操作需要对设备进行外设【安全】配置,一般不能直接进行力或力矩操作。配置方法同力的函数一样,不再赘述。


****************虚拟夹具的力矩读取************************
1、首先力矩的读取要声明【全局变量】
 hduVector3Dd TORQUE;//三维矢量
2、对力矩的读取需要用到异步调用,这是因为在进行力或力矩操作时不能同时写入和读取,这一点是设备接口不允许的,具体操作如例子3:
例子3:
/*******力矩读取操作********/
/*******力矩读取前要需要【异步任务调度】获取设备参数********/
//在主循环main_Loop调度器中采用异步任回调函数获取
hdScheduleSynchronous(copyDeviceDataCallback, ¤tData,HD_MIN_SCHEDULER_PRIORITY);
Get(HD_CURRENT_TORQUE,TORQUE);//将力矩送入形参TORQUE中
或者写为:
Get(HD_CURRENT_JOINT_TORQUE,TORQUE);//将关节力矩送入形参TORQUE中(依次为关节1,2,等)
需要注意的是,仍对设备进行外设【安全】配置,配置方法同力的函数一样,不再赘述。
*******************************************
*注意:以上操作均是在一条线程下进行操作!
*******************************************

你可能感兴趣的:(Phantom,Omni)