2016年7月8日金曜日

Visual Studio で LEGO の python をデバッグする

 久々更新の今回は、LEGO Mindstorms で Python を使って開発する場合に Visual Studio 2015 を開発環境として利用する方法についてまとめてみようと思います。

 そもそも、LEGO Mindstorms で python を使ったプログラミング環境として、とりあえず、自分が思いつくのは、 純正 LEGO Mindstorms EV3 の OSを ev3dev にして利用するパターン、Dexter Industories社の BrickPi をコントローラにするパターン、Mindsensors社の PiStorms をコントローラにするパータンで、これらで python による開発をする場合を想定します。そういう意味では、LEGO に限らず、Dexter Industories社の GoPiGoロボットやGrovePi なんかでも同じように利用できます。

 まず、Windows 側でソリューションを作成するフォルダの共有を行い、Linux側ユーザからフルコントロールアクセスできるように設定しておきます。たとえば、 pi ユーザをWindows側に作成し、このユーザでフルコントロールアクセスできる共有フォルダ(仮に Workspace とする)を用意しいておきます。

 Linux側で cifsマウントで Windows側の共有フォルダを適宜マウントします。

   cd ~
   mkdir Workspace
   sudo mount.cifs -o username=pi,password=raspberry //winpc_name_or_ip.local/Workspace ~/Workspace

 ev3dev 以外の通常の Debian Jessie Linux環境ではデフォルトでcifsマウントが可能ですが、ev3dev ではcifsマウントを行うには カーネル再構築 が必要です。手間がかかるので Windows側で作成した pythonソースファイルをデバッグ時に ev3dev へコピーする方法もあります。

 次に Linux側に ptvsd (Python Tools for Visual Studio remote Debugging server) をインストールします。ptvsd は pip でインストールできます。

   sudo apt-get update
   sudo apt-get install python-pip
   sudo pip install ptvsd

 もし、Firewallが稼働している場合は、ポート:5678 を開ける必要があります。

 Visual Studio で 「新しいプロジェクト」→「Python」→「Python Application」のように選択して、新しい python プロジェクトを作成します。


 python のソース冒頭付近にデバッグ用の記述を入れます。以下は一例です。

   import ptvsd
   import platform
   ptvsd.enable_attach(secret = 'ptvsd')
   print 'Waiting for attach...'
   if platform.system() != 'Windows' :
       ptvsd.wait_for_attach()

 デバッグ対象のソースを cifsマウントしたものをLinux側から実行するか、Linux側にコピーして実行すると、待ち状態になります。


 次にVisual Studio 側で 「デバッグ」→「プロセスにアタッチ」を選択して、


 「トランスポート」で「Pyton remote (ptvsd)」を選択して、修飾子に secretキー@ホスト名  を入力すると選択可能なプロセスにターゲットのプロセスが表示されるので「アタッチ」ボタンをクリックしてアタッチします。


 デバッグが開始されます。上の画面ではブレークポイントで一時停止して、変数の値を参照しています。