NI-USRPとUHDの共存には注意が必要

こんにちはドルフィンシステム福島です。

今日のネタはハマる人はハマるというお話です。
なにせ私は解決まで1年間掛かってしまいました。というお話です。

USRPをNIの環境と一緒に、UHDもインストールしている方は必見です。

ドルフィンシステムでは、一緒に働いてくれるエンジニアを募集しています!
ご興味のある方はお気軽にご連絡ください!
メールはこちら→info@dolphinsystem.jpにお送りください。
お待ちしています。

N310のGetting Started Guideを元に試すとエラー

N310という昨年発売されたUSRP。
4入力4出力で単体動作もするという優れもの。
弊社のフェージングシミュレータ Rivieraコアを実装すれば、4x4 MIMOフェージングシミュレータが動くかなぁ、と考えていち早く入手したもの(日本ナショナルインスツルメンツよりも早かった)。



購入してからまず試すのはGetting Started Guide
ファームの更新やらドライバのインストールやらをこなして、イーサネットに優先で接続。問題なくsshログインも出来た。

さて次はPCからのアクセスを試す。
まずは、uhd_find_devices.exeでネット上のUSRPを取得。問題なく見つけた。
次はuhd_usrp_probeで接続しているN310の情報を取得・・・

あれ、エラーだ。何だろう。


何か手順を間違えたかな?
もう一度Getting Started Guideを初めから見直してみよう。

・・・手順は問題ない。

ネットワークの設定がおかしいのかな?

・・・問題ない。

もう一度最初からGetting Started Guideをやってみるか。

・・・相変わらずエラーだ。

Ettus Researchサポートとのやりとり開始

仕方ないのでサポートに連絡。

N310は日本ナショナルインスツルメンツ経由で購入しますが、Ettusブランドで販売されているので、サポートは開発元のEttus Research。
Ettus Researchのサポート窓口にメールで状況を知らせると、数日後にメールが返ってきます。
こちらも仕事の合間を縫って、指示された内容を試して数日後にメールを返します。

まず疑われたのは、Windowsファイアウォール。
ファイアウォールがネットワークを遮断してしまっているのではないか?ということでオフにして試しましたがダメ(これはもちろん既に試していたが・・・)。
次は、PCにインストールしているUHDのバージョン。最新に更新してから試して欲しいとのことで試してもダメ。
よくよく調べてみるとUHDの古いバージョンで試していた事が発覚。
原因を探るとEttusのホームページに張られている最新版UHDへのリンクが間違っているということもありました。
その後、N310のファームウェアや設定項目の見直し・・・などなど延々と続きます。
ポツポツ断続的にメールのやりとりを繰り返し、気づけばもう1年。

途中に、この問題の対策を施したUHDのバージョンアップも行われましたが、全然動きは変わらず。

で、今年4月から担当者変更。
今度はソフトウェアが担当の方のようです。

やりとりすること1ヶ月・・・・

やっと解決しました。

解決したその原因は?

そ、その原因は、
なんと環境変数

uhd_usrp_probeなどのツールが動作する際に参照しているXMLファイルがあって、そこにはUSRP上で動作しているレジスタのアドレスや型(int or double等)が記載されています。
このXMLファイルが格納されているパスが環境変数に設定されているのですが、これが違っていました。

まったく間違っていたというわけではなく、同じPCにインストールされていたNI-USRPドライバ側のパスを参照していました。

下図のUHD_RFNOC_DIRという変数にXMLファイルのパスが書かれています。

UHDをインストールすると、UHDのインストール先のパスが設定されます。


NI-USRPドライバをインストールすると、以下のようにNI-USRP側のパスが設定されます。


実はNI-USRPドライバにもuhd_usrp_probeコマンドなどが同梱されており、UHDと同名の環境変数を使っています。なので、UHD側のuhd_usrp_probeを起動すると、NI-USRPドライバ側のXMLファイルを参照してしまってエラーが出ていたのです。

NI-USRPドライバとUHDの共存の問題点

通常、UHDでサポートしているUSRPとNI-USRPドライバでサポートしているUSRPは概ね同じ型番のものがサポートされています。
ですが、NI-USRPドライバでサポートしていないUSRPというものもあります。
例えば、

  • B200mini
  • E310
  • N310

などのBシリーズの一部やEmbeddedシリーズと、最新のNシリーズです。
逆にUHDでサポートしていないのは、
NI USRP-2974
等があります。

で今回のエラーは、

  • N310はNI-USRPドライバではサポートしていないので、
  • N310に対応したレジスタの設定値がXMLファイルには書かれておらず、
  • エラーが発生
していました。

環境変数についてのまとめ

環境変数はインストーラーがインストール時にシステムのプロパティを変更して設定します。
既に同名の環境変数が存在している場合は、上書きはしないようです。
この動作仕様によりシステムに設定されている環境変数がちぐはぐになる可能性がありますので、注意してください。
コマンドプロンプトを起動し setコマンドを実行することで確認することが出来ます。

NI-USRP

NI-USRP 21.0をインストールするとデフォルトで以下の環境変数がシステムに設定されます。

UHD_IMAGES_DIRC:\Program Files (x86)\National Instruments\NI-USRP\images\
UHD_RFNOC_DIRC:\Program Files (x86)\National Instruments\NI-USRP\RFNoC\

UHD

UHD(64bit)をインストールするとデフォルトで以下の環境変数がシステムに設定されます。

UHD_IMAGES_DIRC:\Program Files\UHD\share\uhd\images\
UHD_RFNOC_DIRC:\Program Files\UHD\share\uhd\rfnoc\
UHD_PKG_PATHC:\Program Files\UHD\share\uhd\


Windows上でUHDを使用する際の起動コマンドを作る

毎回環境変数を設定するのも面倒なので、UHDを使用する際にコマンドプロンプトを開くときに環境変数が自動設定されるようにしてみます。
以下の文字列をuhd_shell.cmdというファイル名でデスクトップに保存します。

@echo off
set UHD_IMAGES_DIR=C:\Program Files\UHD\share\uhd\images\
set UHD_PKG_PATH=C:\Program Files\UHD\share\uhd\
set UHD_RFNOC_DIR=C:\Program Files\UHD\share\uhd\rfnoc\
cd %HOMEPATH%

次にデスクトップで右クリックして新規作成→ショートカットを選択し、「項目の場所」に、
cmd.exe /k "C:\Users\ユーザ名\Desktop\uhd_shell.cmd"
と入力し次へボタンを押します。
次の画面のショートカット名は適当に"uhd_shell"等としておきます。

作成したショートカットからコマンドプロンプトを起動すると環境変数が設定されたコマンドプロンプトが起動するようになります。

まとめ

  • NI-USRPドライバとUHDは同じ環境変数を参照している
  • 環境変数内で設定されているパスがNI-USRPドライバとUHDで異なる
今回のエラーはちょっと分かりづらいですね。

私はNI-USRPドライバの方は詳しいですが、UHDはさほど詳しくありません。
逆にEttus Researchの方は、UHDを中心に対応策を考えてくれていました。
この境界線上で発生したミスマッチが解決に1年間も時間を使ってしまったのだと思います。

UHDかNI-USRPドライバのどちらか一方だけがインストールされているPCで試してみれば良かったのですが・・・
途中でPCを変えて試したりもしていたのですが、弊社のPCはデフォルトでNI-USRPドライバがインストールされているので、どれで試しても現象は一緒でした(笑)

というわけで、次回は今回の問題と解決の糸口をつかめたUHDの環境変数周りをご紹介します。

このような面倒なことは避けたい!という方はドルフィンシステムへご相談ください。
私たちドルフィンシステムは、お客様の様々な要望に答えられるような知見の蓄積・環境の構築を行い、最適な無線システムを提案していけるよう努力しております。

SDRを用いた無線システムのご要望はドルフィンシステムへ

以上、ドルフィンシステム福島でした。

ドルフィンシステムでは、一緒に働いてくれるエンジニアを募集しています!
ご興味のある方はお気軽にご連絡ください!
メールはこちら→info@dolphinsystem.jpにお送りください。
お待ちしています。



コメント