はじめに
研究の環境を完全にubuntuに移行しようと思い、ubuntu+ROSを入れないといけなかったのでその時の困ったところのメモです
インストール自体はすんなり行くと思うのですが、pythonのこまごましたところに少し詰まったのでそこ話
環境
- ubuntu 16.04 LTS
- ROS - kinetic
ubuntuインストールで詰まったところ
たくさんのサイトがいろいろパーティションとかについてはコメントしてくれてますが、まず、BIOSに辿りつけないという事案が発生
これについては、パソコンごとに違います
自分のパソコンが何なのかを調べてみてください
del
を押すもの
F~
を押すもの
などなど
また、bootのmenuも各パソコンによって違いそうです
適するものがなくても、基本的にはboot optionの一番上を、CD/DVDにしてみたり、Flashdiskにしてみたりするとうまくいきます
よくわからない名前が出ている場合は、HDDの型番だったりします
検索してみてください
ROSで詰まったところ
特にないと思います
基本的には公式のドキュメントを参考にしてください
gitとgithub
- https://git-scm.com/book/ja/v1/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-%E6%9C%80%E5%88%9D%E3%81%AEGit%E3%81%AE%E6%A7%8B%E6%88%90
- https://qiita.com/suthio/items/2760e4cff0e185fe2db9
pythonのこまごました話
よく知られているように、ubuntu16.04はpython2.7と3.5がデフォルトで入ってます
なので、そのままでいいやーって人は特に問題ないと思うのですが、
なんかふとpython3.6使いたいなぁって思って、(全くやる必要ない気もしますが笑とりあえずやってみる)
下記サイトを見ながらやると、
すっかりうまく行った気になります
pyenvを使うのも手だとは思いますが
pathを書き換えると、ROSのpath設定の方に影響が出そうなのでやめときます
pyenvを使っているのは下記の例
が参考になります
システムのpythonを触りたくない人は絶対こっちのほうがいいような気はしています笑
ライブラリ開発したい場合はpyenvなのかな
で、インストールしたはいいんですが
pip3を使うときに注意点があります
pip3で何かをインストールするとpython3.6へと入りますが
sudo apt-get python3-.......
でやると、python3.5に入るというめんどくさい事案が発生
というかそもそもこの
sudo apt-getとpipの違いは何なの?
まず違いから調べてみました
https://askubuntu.com/questions/431780/apt-get-install-vs-pip-install
によれば、apt-getとpip3の違いは
PyPIはPythonパッケージのインデックスです - Pythonモジュールのリポジトリです。
pipPyPIからパッケージを直接ダウンロードしてインストールするために使用されます。PyPIはPython Software Foundationによってホストされています。Pythonパッケージのみを扱う特別なパッケージマネージャです。
だそうで、
- バージョンの管理ができるかできないか
- システムのどこにインストールするかを指定できるかできないか
が大きな違いっぽい(aptはできない、pip3はできる)
pip3のほうが良いのかは疑問ですが
違いはそんなになさそうなので気にしなくてもよさそう
では、上記の問題を解決していきましょう
python3 --version
を見るとpython3.5にリンクされていることがわかるので
シンボリックを使って修正します
のサイトが参考になりますが
mkdir -p $HOME/bin
ln -s /usr/bin/python3.6 $HOME/bin/python3
にしてしまえばいいというわけです
見てみると、python3.6にできました
正直正しいかわかりませんが笑
まぁできたので良かったです
ROSはpython2系?
そもそもROS-kineticはどこのpythonを見てるんだろうかと気になりました
というのもkineticは確か、python2系を推奨しているような気がしていたからですが、python3系で書いてる人もいたような。。。
こういう時は試してみます
roscore
して
# !/usr/bin/env python
# license removed for brevity
import rospy
rospy.init_node('Python')
while not rospy.is_shutdown():
str = "hello world %s"%rospy.get_time()
rospy.loginfo(str)
print(3/2)
で違いがありそうなやつを見てみます
3系⇒2系は基本的なレベルの構文による違いはありません
なので、3系のつもりで書いても基本的にはエラーは出ないと思います
2系はprint()しても回ります
これやると
0
って出てきます
3系ならこれ小数点ででてくるので、つまり、2系なのね
まぁ2系って書いてあるのでそうだろうとは思ってましたが。。
演算するときは気をつけたほうが良さそうですね
まぁそもそも
sysのpathを見てみると
['', '/opt/ros/kinetic/lib/python2.7/dist-packages'...
ってなっているので、そりゃそうか
しかもrosの中身みにいったら(上記のpathの中)
python2.7しかありませんね
python3系でどうしてもやりたい人は
多分方法があるはず
ということで探してみます
で同じような人がいる
リンクされているところに行ってみると
Note: Be careful installing python3, you should update python3 alternative to python3.5 before installing and using pip3!
This is not recommended as usual, but it seems difficult to run rospy from python3 normally. (It requires full recompile of all ROS packages.) Below hack will allow run python3, at least for cozmo_driver.py. I don't know the true risk to do that.
sudo apt-get install python3-yaml
sudo pip3 install rospkg catkin_pkg
Note: To get further python3 compat a local version of "transformations.py" is included!
って書いてある
わぉ。。。要は、ROSのパッケージをpython3の中に完全に入れ込む必要があるので、むずかしいって言ってますね
やめておくのが良さそうです
ROSで毎回コマンドうつのめんどくさい
なんでこれ毎回うつの。。。
source ./devel/setup.bash
という方は
を参考におねがいします
bashrcはログイン時に読まれるやつなのでそれでいけます
ROS以外でopenCVが謎に使えない
opencvを入れる時にROSがもともと入ってると,インストールされるのに
単にubuntuでpython3系で使いたいときにROSのPathが邪魔して,
python3.6(python3.5)
import cv2
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
ってなり、opencvが使えない(たぶんROSの方のopencvが呼ばれてよくわかんないことになっている気がする)という問題が発生します
pythonの優先順位が勝手に変更されてるみたいですね。。。
つまり,ROS上でOpenCVを使う場合は何にも問題ないですが
単に,UbuntuPCでPython3系でopencvを使いたい場合,使えません
なので、ROSへのmodule探索pathを除去してあげます
import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
import cv2
こうやるしかないっぽい。。。
しかも注意して欲しいのは
この方法以外でやるとROSが回らなくなったりします
なのでめんどくさいですが、これは仕方ないかも
Fontどこいった?
windows+anacondaで、Times new romanのフォントがmathfontに反映されずに困っていたことを改善した話はここに書いてあります
まぁLinuxでもとやってみると
UserWarning: findfont: Font family
['Times New Roman'] not found. Falling back to DejaVu Sans
(prop.get_family(), self.defaultFamily[fontext]))
はい
フォント見つかりません
またこれかと思っていたら
を参考にしてください
sudo apt-get install msttcorefonts -qq
でうまくいきます
ちなみに、了解が押せなくて焦った方
十字キーで移動できますのでご安心を
あとすごくどうでもいいかもしれませんが
import matplotlib
matplotlib.font_manager...
ってやるとうまくいきませんので
import matplotlib.font_manger as font
としましょう
気づいたらpipが使えなくなっていた
2系しか使えないし、2系にいろいろいれとこうかなぁとおもって
pipをつかっていろいろいれようとすると
あれ
python3系になる
pip --version
pip 18.1 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)
。。。
問題ですが
ubuntuであれば
python2 -m pip --version
python2 -m pip install ....
で改善します!
こうなりたくない方は、pyenvの使用をおすすめします
参考 pyenvを使いたい方
ROSを入れていた場合のトラブルについて
https://qiita.com/koooooo/items/b21d87ffe2b56d0c589b
がとてもわかり易いと思います
基本的にはpyenvでローカルに設定するのがいけてるかと
疑問になるのはモジュールだと思います
バージョンは管理できてもpip3等でインストールしたものはどうなっているのか
中の記事にも書いてあると思いますが
普通にpyenvで作ったものは、なにもはいってない状態なのでお得意のpip等々でやるのがよさそうですね
ちなみに多くのサイトでも書かれていますが
全体のバージョンを変える
pyenv global 3.5.2
ローカル環境で異なるバージョン使う
pyenv local 3.4.1
システムに標準搭載されてるものに戻す
pyenv global system
補足 ROSのpythonについて
ubuntuを入れてROSを入れたあとに
echo $PYTHONPATH
とすると
/opt/ros/kinetic/lib/python2.7/dist-packages
と出てくると思います
これは、pythopathにはROSのpython(おそらくシステムのpython2.7を呼ぶようにしてある)がはいってますよといっている
もちろん /usr/bin に入っているデフォルトpythonについては、呼ぶことができるのでいいんですけど
これのせいで、もしくはおかげで、ROSのpythonの優先度が一番高くなってそう
visual codeのフォント
vcのフォントをubuntuにしたので変えたいなぁと思い
でいろいろやってみるとできます
ちなみにubuntuはfontは
/usr/share/fonts/
の下にディレクトリをフォント名で作成します
$ sudo mv Ricty-Bold.ttf Ricty-BoldOblique.ttf Ricty-Oblique.ttf Ricty-Regular.ttf RictyDiscord-Bold.ttf RictyDiscord-BoldOblique.ttf RictyDiscord-Oblique.ttf RictyDiscord-Regular.ttf /usr/share/fonts/Ricty
fontの有効化
$ fc-cache -fv
vccodeの有効化
"editor.fontFamily": " 'Ricty' ",
"editor.fontSize": 16,
色いろインストール
管理者権限インストール
$ pip3 install --user tensorflow
python-controlに必要なもの
$ sudo apt-get install gfortran
$ sudo apt-get install libblas-dev libatlas-dev liblapack-dev
$ sudo apt-get install libopenblas-dev
$ pip3 install --user slycot