カエデ自動機械

ちょっとしたものづくりや電子工作のメモなど。技術開発とは今は呼べないかな。

Ubuntu18.04LTSにVS Codeを入れてC++とArduinoとPythonが使えるようにする

主に自分用のメモ。
ずっとatomを使っていたのだけれど、c++の環境がどうにも上手く行かなかった(コード補完機能が不便だった)ので。

まだあまり長期間は使っていないけど、概ね気に入っています。

前提環境、従来の環境と問題点

ubuntuのバージョン
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.4 LTS
Release:	18.04
Codename:	bionic
従来の環境

atomを使ってpythonのコード(実行はターミナルから)、arduino IDEを使ってarduinoコードを書いていた。
最近platformIO-ideを導入してarduino開発をatomでやることを試したりしていた。

問題点

c++をちょっとだけ使いたくなって勉強し始めたのだけれど、どうにも環境が上手く入らない。実行環境やコード整形(uncrustify)は使えるようになったのだけれど、コード入力補完機能が上手く使えず苦しんだ。

具体的には

  • autocomplete-uncrustifyみたいなパッケージを入れたけど、ctrl + spaceを押さないと候補が出てこない(自動で出てくる方法があるのか?)
  • しかも補完後のカーソルが、途中まで入力した部分のままになる。例えば、"open_abcrover" と入力したくて、"open_a" まで入力したところで補完すると、"open_a▲bcrover" とカーソルの位置が▲の位置のままで、その後カーソルを移動しないと入力が続けられない。
  • 別の系にしようとclangという形態があるらしいということがわかったのだけれど、こちらは謎のエラーが出る。
  • 上記エラーは調べると少しだけ同じ問題に苦しむ人が居るのだが、解決策を見てもピンとこず。(clangの設定ファイルに特定の文言を書き込めば良いと言われたのだが、その設定ファイルが見つからない)

というわけで前から名前だけは聞いていたVS Codeを試してみたくなった。



VS Codeの導入

以下のサイトから.debファイルをダウンロード。
code.visualstudio.com

ダウンロードした.debファイルをubuntu softwareで開いて、installを選択して終了。

以下のサイトを参考にさせてもらった.
qiita.com


無事インストールできた。入れたバージョンは1.44.1。

$ code --version
1.44.1
a9f8623ec050e5f0b44cc8ce8204a1455884749f
x64

とりあえず一安心。



C++環境の導入

エクステンションのインストール

引き続き上記のサイトを参考に3つのextensionsを導入する。

  • C/C++
  • CMake
  • CMake Tools

なお、ビルド環境自体は既に入っていた。

$ gcc --version
gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gdb --version
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".

$ cmake --version
cmake version 3.10.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).
ワークスペース作成

元々Atomの時に開発に使っていたディレクトリをそのままワークスペースとした。

ビルド、デバッグ環境のセットアップ

上記のサイトの通り作業する(ディレクトリ名だけは、上記ではcpp_cmakeとしているが、自分がワークスペースとして指定したディレクトリ名を使う必要がある?)

もしかしたらcpp_cmakeを使わなければならない場所があったような・・・? メモを控えるのを忘れてしまった。

構築完了

とにかく、環境構築が完了した。F5を押せばコンパイル、実行ができる。
コード自動整形、オートコンプリートもすこぶる快調で満足している。

Atomに比べて、(デフォルトの)背景色は同じような濃いめのグレーなのだけれど、文字色はVS Codeの方が鮮やかで読みやすい気がした。
Atomも設定を弄れば変えられるのかも知れないけど、VSCodeに移植したくなってしまった。



Arduino開発環境の構築

これが苦労した。というか未だになんで動いているのかちょっとわからない。
とにかく以下を参考に色々やってみた。
k99-tech.com

拡張機能の導入

extensions からArduino for Visual Studio Codeを導入する。似たような名前のものが複数種類あって焦るが、Microsoftが提供するものを導入する。

パスを通す

どうやら、Arduino IDEとしての機能は、既にPCにインストールされている純正(というのかな)のArduino IDEから引っ張ってくるらしい(?)
というわけで、そのIDE関連のパスを通す必要がある。

VS Code左下の歯車マーク → Settings → Extensions → Arduinoと選んでいくと選ぶ場面がある。これが入力されていない、または誤っている状態でも、後述のやり方でArduinoのコード自体は開けたと思うが、コンパイル等しようとすると以下のようなエラーが出る。

vscode arduino Please check the "arduino.commandPath" in the User Settings.Requires a restart after change.Cannot find the command file:/opt/arduino-1.8.12/usr/local/bin/arduino

ここで結構ハマったが、以下のサイトが参考になった。
github.com

パスは2種類、arduino.pathというものとarduino.commandPathというものがあるが、どうやら、

ということらしい。

実際、上記のエラーコードは、青い部分がarduino.pathとして当初入力していたもの、赤い部分がarduino.commandPathとして入力していたものだった。
正しく入力していれば確かに、<インストールされている場所><当該場所にある実行ファイル名>と一繋ぎのパスになって辻褄が合う。気がする。

arduino自体はこれを機に最新のものをインストールした。以下のサイトを参考に、公式サイトから.tar.xzファイルをダウンロード、解凍して、/opt/ディレクトリにコピーして、そこでインストール。
nekomemo2.site

したがって、パスは

ということになる。今の所これで大丈夫そう。

下の写真、右側の最上段がcommandPath、最下段がpathになっている。

f:id:ktd-prototype:20200418020432j:plain
設定状況

各種設定

もう一度、本章冒頭で紹介したサイトを参考にボードの選択(Arduino Mega)、シリアルポートの選択(ttyACM0)をしていくと、ワークスペースにお馴染みのArduinoサンプルコードが追加されている。.inoファイルを開いてみると、ちゃんとコンパイルが通るようになっていた。

既存のArduinoコードの編集、ライブラリの導入

ココらへんから雲行きが怪しくなってくる。行き当たりばったりすぎてあまり人様には見せられない。

今まで自律ローバーを動かすために使っていたコードを試しに開いてみて、とりあえず問題になったのが、最初にincludeしているライブラリ群がすべて見つからないと表示されてしまう。

サンプルコードのコンパイルは通るので、追加で導入したAdafruitとかのライブラリが見つからないのが問題ではないかと思った。
よくよく見てみると、ディレクトリ構造のツリービューに、サンプルコード側には、VS Codeが勝手に追加したと思われる

という1ディレクトリ2ファイルが入っていて、ここでボード情報、シリアルポート情報、ライブラリパスなんかを持ってきているらしい。

とりあえず、このディレクトリをまるごと、コンパイルしたいArduinoコードと同じディレクトリに移してみた。

という構成になる。加えて、以下のサイトを参考に、c_cpp_properties.json"path" の情報として以下を書き加えてみた。
github.com

"browse":{
                "path":[
                    "/opt/arduino-1.8.12/libraries",
                    "/home/ktd/Arduino/libraries"
                ]
            },

よくわからないけど、とりあえずコンパイルArduinoへのアップロードはできるようになった。
ボードの選択は、VS CodeGUI右下に小さく"select your board"とか出ていて、そこから選べる。

一度コンパイルを通すと、僕が.vscodeをコピーしたディレクトリの上位ディレクトリにも同じように.vscodeというディレクトリが生成されている。

しかも、上記に書き加えた browse > path という部分を消したり、それで再起動したりしてもコンパイルが通るようになっている。

気づかないだけで、他の解決要因があったのかもしれない。


余談

なんのコードであろうと、adafruit circuit playgroundがおかしいみたいな謎のエラーが出る。
ライブラリが見つからないとかじゃなくて、中身がおかしいというエラー。

以下を参考にしたが、そもそもそんなライブラリ使った覚えもないので、削除してしまった。一応それで解決はした。
forum.arduino.cc


とりあえずここまで

釈然とはしないが、当面は良しとした。
アップロードまで可能なArduinoIDEとして使えるようになったし、純正IDEと異なりコード補完機能が使えるので便利だ。
タブ分けとかをどうやってやるのかはまだ試していない。



Python環境構築

そもそものPC側の構築

qiita.com
を参考に構築する。

python3.3以降だとデフォルトでvenvというパッケージが入っており、作業環境ごとにパッケージインストールができるらしいが、普段はROSを使うために2.7.17を使っていて、venvは使えない。
virtualenvを使って2.7.17の環境を構築し、作業環境を区切って個別に使うことにした。

$ pyenv versions
* system (set by /home/ktd/.pyenv/version)
  2.7.17
  2.7.17/envs/open_abcrover
  anaconda3-5.0.1
  open_abcrover

open_abcroverというのが今回新しく準備した環境で、今作っている自律ローバーのプロジェクト名。

VS Code上でPython環境の構築

以下のサイトを参考に環境構築を行う。
elephantcat.work


VS Codeには拡張機能としてPythonのパッケージを入れた。これだけで基本的には完了らしい。

ただ、PC全体として、前節でvirtualenvを使って新しく作ったpython開発環境に色々とパッケージが入っていなかったので、該当環境に対してターミナルからpip install でrospkgやpyserial等のパッケージを入れ直した。コードのエラー検知としてpylintも入れた。

コード整形は、VS Code側が勝手に(ターミナル側から作業環境に直接)autopep8を入れてくれた。

$ /home/ktd/.pyenv/versions/open_abcrover/bin/python -m pip install -U autopep8
(中略)
Successfully installed autopep8-1.5.1 pycodestyle-2.5.0

pyenvで作ったpython開発環境は、VS Code上で実行する際にどれを使って実行するかどうかをVS Code画面の左下をクリックすると選ぶことができる。(赤枠部分)
f:id:ktd-prototype:20200418172737j:plain

ROSを使っているとターミナルから実行するほうが便利なので、とりあえずコード整形と(VS Codeだと複数ターミナルを開いて・・・てのがやりづらい?調べてないけど)

その他、まとめ

とにかく、Python環境ができた。
同じ階層にあるコードの塊がわかりやすいようにインデントレベルを示す線が入る機能があるのだが、理由はわからないがAtomよりVS Codeのそれの方が見やすい気がする。

もう少し色分けを色々してほしいのだけれど・・・
関数を定義する時の色分けは良いのだけれど、たとえばその関数を呼び出す時の色分けとか、ROSのSubscribeを行う時に、メッセージの階層が深くなっていく様子が色でわかったりすると良い(今は真っ白)

settings.jsonを弄ると変えられる?様子だが、コメントの色を変える方法と、もう少し全体の配色テーマ(スクロールバーの色とか)を個別に変える方法しか出てこない。