| 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だとエラーが発生します。本エラーが発生した場合、両製品のバージョンをご確認ください。 
       
       | 
     
  
 
  
    
      現在の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」の名称でヘルプが保存されますが、現行では英語ヘルプのみです。申し訳ございませんが、日本語ヘルプはございません。 
       
       | 
     
  
 
  
    
      運転シミュレーション時に車両の挙動の詳細を保存することはできますか? 
       
      可能です。UC-win/Road SDKにはLogServerと呼ばれるログ出力機能があります。LogServerにアクセスすると、自車だけでなく、交通流やシナリオで生成した車両など全ての車両、及びキャラクタの情報を取得することができます。 
      LogServerを用いてログ出力を行う場合の考え方を以下に示します(図2)。まず、プラグインに作成した関数(コールバック関数)を予めUC-win/Roadに登録します。この状態でシミュレーションを実行すると、環境や交通流、キャラクタの計算や3次元空間の描画を行った後、対象となる全てのモデルに対しコールバック関数が呼ばれます。コールバック関数の中では、対象モデルごとに表1に示す様々なデータにアクセスできますので、これらをCSV形式でファイル出力したり、他のアプリケーションへのデータ伝送が可能になります。 
       
      
      
        
          
              | 
           
          
            | ■図2 LogServerの考え方 | 
           
          
            
            
              
                
                  | LogServerで参照可能なデータの例 | 
                 
                
                  | 基本データ | 
                  シミュレーション時間、モデル名、モデルID、モデル種別 | 
                 
                
                  | 座標、姿勢 | 
                  X座標、Y座標、Z座標、ピッチ角、ヨー角、ロール角、ベクトル | 
                 
                
                  | 動力、速度 | 
                  エンジン回転数、ギヤ番号、車速(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では、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( 'MSPゴシック' ); 
                  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 秋の号掲載) | 
     
    
      
      
       
        | 
     
  
 
       |  
       
        
       
      
              
        
      
       
        
        
        
        
        
      >> 製品総合カタログ 
       
        
      >> プレミアム会員サービス 
      >> ファイナンシャルサポート 
       
      
       
      
       
      
       |