Support Topics
支援主题 / UC-win/Road 售后服务、技术支持相关信息
UC-win/Road SDK(开发组件)
FAQ 常见问题

 前言
UC-win/Road SDK是开发在UC-win/Road上运行的插件,用于提供程序库、API的软件开发包,大学、汽车相关企业及其他各类型用户可使用它进行研究开发、功能自定义等。此者,我们从用户常见的提问中,针对SDK相关的常见问题和应用功能以Q&A的形式进介绍。

 版本的差异
通过SDK开发的插件,如下所示出现报错,发生无法识别的现象。这是什么原因?

■图1 实行时的报错信息

上述报错的发生是由于UC-win/Road本体和UC-win/Road SDK的版本不一致引起的。两产品的版本必须完全一致,略有不同也无法正常运行。例如UC-win/Road本体是Ver.7.1.0,SDK是Ver.7.1.1,便会发生报错。本报错发生时请确认两产品的版本。

 关于Delphi的版本
现在的UC-win/Road SDK仅对应Delphi2010吗?

UC-win/Road SDK运用Embarcadero公司的Delphi进行开发,根据版本不同所对应的Delphi版本也不同。具体而言,Ver.8是Delphi XE2专用,Ver.7以前为Delphi2010专用。Delphi的版本不同时,无法进行插件的建立,实行,所以请务必确认版本。另外,持有Delphi XE2、XE3时,可同时使用旧版的Delphi。详情请向Embarcadero公司咨询。

 关于帮助
UC-win/Road SDK有中文帮助吗?

UC-win/Road SDK安装后,按安装文件夹下保存有名为「UC-winRoad_SDK_x.xx.xx.chm」的帮助文件,目前只有英文帮助。

 LOG功能的使用方法
驾驶模拟时车辆的举动可以详细保存吗?

可以。UC-win/Road SDK中具有被称为LogServer的LOG输出功能。访问LogServer不但可以获取自车,交通流、原创生成的车辆等所有车辆及特征人物的信息均可取得。
运用LogServer进行LOG输出时,其考虑方法如下所示(图2)。首先,插件作成的函数(调回函数)事先登记到UC-win/Road。在此状态下实行模拟,进行环境、交通流、特征人物的计算、三维空间的描绘后,相对成为对象的所有模型调回函数被调用。调回函数中每个对象模型如表1所示,因为可以访问各种数据,这些可以按CSV格式文件输出,或传送到其他的应用程序。

■图2 LogServer的考虑方法
LogServer中可参考的数据例
基本数据 模拟时间、模型名、模型ID、模型类别
坐标、姿勢 X坐标、Y坐标、Z坐标、Pitch角、Yaw角、Roll角、矢量
动力、速度 引擎旋转数、档位序号、车速(km/h, m/s)、速度限制
输入 方向盘角、油门开度、刹车量、自动驾驶的有无
距离 行驶距离、到道路始端的距离、到道路端部的距离
■表1 参照可能的数据例

另外,UC-win/Road SDK的样品例子中,云公用了下述LogServer功能。请参考并用于开发。
  • ControlVehicleInFrontPlugin
  • InteractionSample
  • LogExportPlugin

 控制自车的方向操控、油门、刹车的方法
运用外部控制器的方向操控、油门、刹车的检出值可以进行UC-win/Road的车辆控制吗?

可以。SDK中,驾驶模拟时为了控制自车,用户界面里准备了IF8MainDriver。IF8MainDriver可取得现在行驶中的道路的路线、位置、车道线等各类信息。此外,方向操控、油门、刹车值提供以任意值书写替换的功能(表2)。例子的源代码记载如下,敬请参考。另外,这些控制在plgTransientWorldMove中进行TransientWorldMoveProc()型的回调函数的登记,或运用Delphi标准功能的时间功能(TTimer)进行注册。

车辆控制功能
SetSteering 指定方向操控的舵角。0.0为直行。-1.0为左最大舵角、1.0为右最大舵角
SetThrottle 油门开度在0.0~1.0的范围指定。1.0为全开
SetBrake 刹车量在0.0~1.0的范围指定。1.0为最大踏力
■表2 IF8MainDriver的车辆控制功能
var
   appService : IF8ApplicationService;
   driver : IF8MainDriver;
begin
Supports(ApplicationService, IF8ApplicationService, appSerice);
driver := appService.MainForm.driver;
if Assigned(driver) then
   begin
   driver.SetSteering(SteeringValue);
   driver.SetThrottle(Accelvalue);
   driver.SetBrake(Brakevalue);
   end;
end;

 主画面上描绘字符串的方法
UC-win/Road的主画面上想要显示任意文本,可以实现吗?

可以。UC-win/Road SDK中,为了在主画面的显示屏上通过OpenGL进行各种描绘,准备有被称为PaintHUD的函数。其中通过调用SDK的文本显示程序库功能,可继续宁文本显示。下述记载了相关代码。再者,关于PaintHUD的处理,请参考SDK的样品插件中的SpeedMeterPlugin。

procedure ????.PaintHUD;
   var
       sp : TPoint3D;
       wp : TPoint3D;
       cw : Integer;
   ch : Integer;
begin
cw := winRoadApplication.mainForm.openGL.Width;
ch := winRoadApplication.mainForm.openGL.Height;

F8TextResetSettings;
F8TextSetFontName( 'Sinsun' );
F8TextSetFontSize( 40 );          // 像素单位
F8TextSetFontColor( clRed );

F8Text2DModeBegin( cw, ch );       // 指定画面大小
F8TextSetAlignment( _alignCenter );    // 字符串的标准位置
F8TextStartFrom( 0.5 * cw, 5 );       // 书写位置

glDisable( GL_LIGHTING );
glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glColor4d( 0.0, 0.5, 1.0, 0.5 );

glBegin( GL_QUADS );
glVertex3f( 0.0, 0.0, -1.0 );
glVertex3f( 0.0, 2 * 40 + 10, -1.0 );
glVertex3f( cw, 2 * 40 + 10, -1.0 );
glVertex3f( cw, 0.0, -1.0 );
glEnd;

F8TextOut( 'Message Test' );     // 描绘

F8Text2DModeEnd;          // 结束
glEnable( GL_LIGHTING );
glDisable( GL_COLOR_MATERIAL );
end;

 结束语
这次的支援主题中对常见问题及应用SDK的各种功能做了介绍。今后也考虑提供各种形式的信息。
另外,在此处省略详细说明,产品复数的样品代码实现了丰富多彩的功能,敬请参考利用。本公司发行的下述书籍中同样记载了运用SDK进行开发的各种例题,敬请参考利用。


(Up&Coming '12 秋季号刊载)

FORUM8