主に自分用のメモ。
ずっと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).
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 IDEがインストールされているディレクトリ
- arduino.commandPath : 実際にArduino IDEを起動するための実行ファイル名(上記ディレクトリの直下にあるのが普通?)
ということらしい。
実際、上記のエラーコードは、青い部分がarduino.pathとして当初入力していたもの、赤い部分がarduino.commandPathとして入力していたものだった。
正しく入力していれば確かに、<インストールされている場所><当該場所にある実行ファイル名>と一繋ぎのパスになって辻褄が合う。気がする。
arduino自体はこれを機に最新のものをインストールした。以下のサイトを参考に、公式サイトから.tar.xzファイルをダウンロード、解凍して、/opt/ディレクトリにコピーして、そこでインストール。
nekomemo2.site
したがって、パスは
ということになる。今の所これで大丈夫そう。
下の写真、右側の最上段がcommandPath、最下段がpathになっている。
各種設定
もう一度、本章冒頭で紹介したサイトを参考にボードの選択(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 CodeのGUI右下に小さく"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画面の左下をクリックすると選ぶことができる。(赤枠部分)
ROSを使っているとターミナルから実行するほうが便利なので、とりあえずコード整形と(VS Codeだと複数ターミナルを開いて・・・てのがやりづらい?調べてないけど)
その他、まとめ
とにかく、Python環境ができた。
同じ階層にあるコードの塊がわかりやすいようにインデントレベルを示す線が入る機能があるのだが、理由はわからないがAtomよりVS Codeのそれの方が見やすい気がする。
もう少し色分けを色々してほしいのだけれど・・・
関数を定義する時の色分けは良いのだけれど、たとえばその関数を呼び出す時の色分けとか、ROSのSubscribeを行う時に、メッセージの階層が深くなっていく様子が色でわかったりすると良い(今は真っ白)
settings.jsonを弄ると変えられる?様子だが、コメントの色を変える方法と、もう少し全体の配色テーマ(スクロールバーの色とか)を個別に変える方法しか出てこない。