摘要:构建了基于网络通信的遥操作系统,通过人机交互界面完成终端对移动机器人的遥控操作。考虑到视频信息形式单一,在移动机器人遥操作系统中采用WingMan Strike Force 3D操纵杆为操作者提供与机器人周围环境相匹配的力信息以提高操作的可靠性。利用Visual c++ 6.0进行编程,采用DirectInput组件实现操纵杆与上位机之间的连接。实验表明,带有力反馈的遥操作在移动机器人越障等实际作业中有效可行。 关键词:遥操作;无线通信;移动机器人;力反馈;DirectInput
1引言
遥操作在人难以到达或接近的环境下移动机器人控制中发挥了越来越重要的作用。在遥操作中,操作者通过操纵杆、键盘或鼠标对远处的机器人进行操作。传统的机器人遥操作主要依靠下位机传回的二维视频信息,将远程环境的视觉信息实时反馈给操作者。由于视频反映的信息形式单一,操作者很难根据视频信息获取系统的精确状态信息;此外,仅凭视频信息也不容易掌握诸如机器人遇到障碍物或视频传输故障等突发事件。为此,本文提出采用Logitech公司的WingMan Strike Force 3D力反馈操纵杆为操作者提供与机器人周围环境相匹配的力信息以提高操作的可靠性,从而使操作者借助力反馈有效地感知远程状态,进而完成操作任务.
2移动机器人遥操作系统
2.1系统组成
移动机器人遥操作系统主要由操纵杆、上位机系统、下位机系统等3部分组成,其示意图如图1所示。上位机主要由一台奔腾Ⅳ笔记本电脑、无线路由器和遥控装置组成。下位机系统则包括关节履带式移动机器人本体和PC104嵌入式计算机控制系统,它通过通信系统获得上位机的遥控命令,根据传感器获知的环境和运动载体的姿态信息控制移动机器人的运动,同时将环境和载体姿态信息传送回上位机。下位机的控制系统主要包括左右驱动轮运动控制、左右前摆臂的运动控制、两个摄像机的控制以及相关传感器的数据采集(如对GPS定位、对电子罗盘航向信号的采集等)以及与上位机的通信系统。

图1 系统组成示意图
2.2无线通信系统
无线通信系统常用的有基于网络和基于卫星遥操作系统。基于网络通信的遥操作系统通信距离较近,传输速率大,适合智能化程度不太高的遥操作通信,而基于卫星通信的遥操作系统通信距离较远,传送速率较小,适合智能化程度较高的遥操作通信。鉴于实际情况本例中选用基于网络的无线通信系统,其原理图如图2所示。

图2 基于网络的无线通信系统
2.3 人机交互系统
移动机器人在执行任务时,其运动、加减速、转弯等动作均由终端进行控制,操作者通过操作杆操作屏幕上的人机界面,相应的控制信息通过无线局域网,被移动机器人服务器接收并解释为前进、后退、转弯等动作,然后再把控制信息传送给下位机[1]。同时,移动机器人作业时所感受到的视、听、距离信息通过接口和无线网络反馈给终端显示计算机,使操作者能看到移动机器人周围的信息,利于操作者根据现场反馈的信息做出下一步任务的精确规划。人机交互系统是实现这一功能不可缺少的重要组成部分。它的功能有:处理移动机器人的反馈信息,形象、逼真地将移动机器人的环境信息显示出来;通过操作杆实时地与移动机器人上的服务器进行数据交互,完成终端对移动机器人的遥控操作。移动机器人终端人机交互系统界面如图3所示。

图3 人机交互系统界面
3力反馈操纵杆与上位机的接口
在移动机器人临场感遥操作中目前主要集中在视觉、空间定位和姿态等研究上,关于触觉和力反馈的研究还不多见[2]。随着人机交互接口智能化的进一步发展,特别是关于视觉、听觉的研究已经取得一定成果之后,为了更真实地达到“身临其境”,提高人在机器人遥操作中的“沉浸”感,必须增加力的反馈,实现触觉的模拟,从而使人机交互更加真实、自然。为此,本文在遥操作中应用了力反馈技术。
力反馈技术源自美国军方,起初被用于训练士兵模拟射击和驾驶作战工具[3]。其后,游戏开发者将其移植到游戏的设计中。目前,支持力反馈技术的产品主要有微软公司的Sidewinder Force Feedback和Logitech公司的WingMan Force两种操纵杆。其中WingMan Strike Force 3D是Logitech最高端的操纵杆产品。它采用了Logitech最新最强的力反馈系统,让用户体验最真实的“力”美学。独特的滚轮按钮方便开关切换;精准的旋转握把设计可以更准确地控制方向,同时握把的锁定开关可让用户随时关闭旋转功能。另外具有两个8方向视点切换钮,和握把与底座上的9个可编程按钮,这都是其他操纵杆所不能比拟的。
为了实现WingMan Strike Force 3D操纵杆与上位机之间的连接,利用Visual c++6.0进行编程,采用DirectX 8.0以上版本的DirectInput组件[4],其编程步骤如下所述。
3.1初始化
在对输入设备使用之前,必须对其进行初始化,而且通常在程序启动时进行。初始化一般包括创建接口、创建设备、设置数据格式、设置设备属性等步骤,其程序如下:
HRESULT hr;
//创建DirectInput接口
if( FAILED( hr = DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&g_pDI, NULL ) ) )
return hr;
//创建设备
hr=g_pDI->CreateDevice( pdidInstance->guidInstance, &g_pJoystick, NULL );
/*设置数据格式:从设备中获取数据前,必须先设置其数据格式,将不同的输入设备获取的数据区分开来。*/
if( FAILED( hr=g_pJoystick->SetDataFormat( &c_dfDIJoystick2 ) ) )
return hr;
/*设置协作度:设置协作级别,协作级别设定了其他程序可否以独占模式获得设备以及当前程序是否可以在任何时候访问数据。*/
if( FAILED( hr = g_pJoystick->SetCooperativeLevel( hDlg, DISCL_EXCLUSIVE | DISCL_FOREGROUND ) ) )
return hr;
//设置设备属性
if( pdidoi->dwType & DIDFT_AXIS )
{
DIPROPRANGE diprg; diprg.diph.dwSize=sizeof(DIPROPRANGE);
diprg.diph.dwHeaderSize=sizeof(DIPROPHEADER);
diprg.diph.dwHow = DIPH_BYID;
diprg.diph.dwObj = pdidoi->dwType;
// Specify the enumerated axis
// Set the range for the axis
diprg.lMin = -1000;
diprg.lMax=+1000; if( FAILED( g_pJoystick->SetProperty( DIPROP_RANGE, &diprg.diph ) ) )
return DIENUM_STOP;
}
3.2获得设备
在对设备初始化之后,为了获得对操纵杆的实际访问以获取设备数据,必须先得到设备,利用函数Acquire()可以完成这个任务。
hr = g_pJoystick->Acquire();
while( hr == DIERR_INPUTLOST )
hr = g_pJoystick->Acquire();
3.3获得数据
获得操纵杆设备后,利用轮询的方式调用GetDeviceState函数来检测操纵杆输入的数据。
DIJOYSTATE2 js;
hr = g_pJoystick->Poll();
if( FAILED( hr = g_pJoystick->GetDeviceState( sizeof(DIJOYSTATE2), &js ) ) )
return hr;
for( i = 0; i < 128; i++ )
{
if ( js.rgbButtons[i] & 0x80 )
wsprintf( strText, "%02d", i );
}
3.4力反馈的实现
首先获得力反馈设备,然后通过调用CreateEffect函数创建其对象实例,然后释放原来效果,接着设置力反馈效果(本例中为常力效果),其程序如下:
if(g_pJoystick==NULL)
{ if(FAILED(InitDirectInput(hDlg)))
return !S_OK;
} if(FAILED(hr=g_pJoystick->EnumObjects( EnumAxesCallback, (void*)&g_dwNumForceFeedbackAxis, DIDFT_AXIS ) ) )
return hr;
if( g_dwNumForceFeedbackAxis > 2 ) g_dwNumForceFeedbackAxis = 2;DWORD rgdwAxes[2] = { DIJOFS_X, DIJOFS_Y };
LONG rglDirection[2] = { 0, 0 };
DICONSTANTFORCE cf;
cf.lMagnitude=10000;
DIENVELOPE DIEnvelopeStruct;
DIEnvelopeStruct.dwSize=sizeof(DIENVELOPE);
DIEnvelopeStruct.dwAttackTime = 5000;
DIEnvelopeStruct.dwAttackLevel = 0;
DIEnvelopeStruct.dwFadeTime = 5000;
DIEnvelopeStruct.dwFadeLevel = 0;
/////////////////
if(pEffects==NULL)
{
DIEFFECT eff;
ZeroMemory( &eff, sizeof(eff) );
eff.dwSize =sizeof(DIEFFECT); eff.dwFlags=DIEFF_POLAR|DIEFF_OBJECTOFFSETS;
eff.dwDuration = 5000000;
eff.dwSamplePeriod= 0;
eff.dwGain = DI_FFNOMINALMAX;
eff.dwTriggerButton= DIEB_NOTRIGGER;
eff.dwTriggerRepeatInterval = 0;
eff.cAxes = g_dwNumForceFeedbackAxis;
eff.rgdwAxes = rgdwAxes;
eff.rglDirection = rglDirection;
eff.lpEnvelope = &DIEnvelopeStruct;
eff.cbTypeSpecificParams=sizeof(DICONSTANTFORCE);
eff.lpvTypeSpecificParams = &cf;
eff.dwStartDelay= 0;
if(FAILED(hr=g_pJoystick->CreateEffect(GUID_ConstantForce, &eff, &pEffects, NULL )))
return hr;
}
if(NULL==pEffects)
return E_FAIL;
//释放原来效果
if(pEffects)
pEffects->Unload();
SAFE_RELEASE( pEffects );
//设置常力效果
ConstantForce(hDlg);
g_pJoystick->Acquire();
if(pEffects )
pEffects->Start( 1, 0 );
4.结论
实验表明,通过视频信息与WingMan Strike Force 3D力反馈操纵杆相结合的遥操作系统可以获得机器人周围的环境信息,为操作者提供良好的触觉感应,提高了操作的可靠性。图4分别为运用本文提出的遥操作系统实现的关节履带式移动机器人越过砖块和上楼梯的情形。

图4
参考文献
[1] 徐正飞.未来轻武器智能作战平台研究[博士后报告].北京:北京理工大学,2004,11
[2] 杨元栋,杨泽红,贾培发.虚拟现实力反馈设备的设计与实现.计算机工程与应用,2001(23):151~153
[3] 史英海,王越超.基于Internet的力反馈技术研究.机器人,2004,26(4):330~335
[4] Microsoft DirectX 8.0 (c++) HTML Help. Microsoft Corp. 2000,10
|