LoginSignup
11
19

More than 5 years have passed since last update.

ubuntu16.04 + ROS + pythonのこまごましたところ

Last updated at Posted at 2018-10-10

はじめに

研究の環境を完全に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

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
11
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
19