粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

ROSを新しくインストールする (含 Anacondaとの競合解決)

ROSのバージョンが古くなったり,ある程度いじった後いろいろとセットアップが面倒になった際に綺麗サッパリ掃除して最初からやり直したいという時にこの手順を踏みました.

アンインストール

以下のガイドに従って,
Uninstall and reinstall ROS - ROS Answers: Open Source Q&A Forum

sudo apt-get purge ros-<distribution>-*

この後,sudo apt autoremove を要求されたので実行して関連パッケージを削除しました.

インストール

ROS のサーバからのデータの受信を許可

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

鍵の設定?

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

この後一度,sudo apt-get update をかまします.

kineticのインストール<2017年9月現在>
ディストリビューションのおすすめは年度が進むごとに変わります.
また,そろそろROS2が出るのでその頃にはこの記事は時代遅れになっているかもしれません.

sudo apt-get install ros-kinetic-desktop-full

rosdepの設定です(私はここでエラーが発生しました(後述))

sudo rosdep init   
rosdep update

setupをします.

source /opt/ros/kinetic/setup.bash

このコードは毎回必要になるのでbashrcに記述しておくのが良いでしょう.

その後,pythonのパッケージをインストールします.

sudo apt-get install python-rosinstall  

ここまでなんの問題もなければ順調でしょう.後はチュートリアルやってね.

エラーが起きる場合:AnacondaとROSのコンフリクト

さて,AnacondaとROSが共存している私の環境では非常にこれは辛い問題です.
ROSは近々2になるしTensorflowを使わない限りROSのPythonパッケージを使えば十分な気もしますが,果たしてどうしのいだものか.

どうやら似たようなことをStackOverflowにて発見.
Conflict with ROS Python and Conda - ROS Answers: Open Source Q&A Forum

Try1: Remove Conda from PATH

上の参考記事において最も簡単と書いてあったこの手法を試してみるとします.

Path の消し方

stackoverflow.com

まずはanacondaのPathを調べます.

echo $PATH

私の場合は以下にありました.は自分のユーザ名です.多分晒しても平気だと思われます.

/opt/ros/kinetic/bin:/home/<user>/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

一応中身を確認すると,condaのコマンドやpython3,ipythonなどがありまして...
Pathを削除したらこれらに絶対Pathを与えてアクセスする必要があります.うーんこれは良い解決策か?

次にこのPathを削除するにはescape sequenceを交えて以下のように書きます.(ちなみにうまく行かなかった)

PATH=`echo $PATH | sed -e 's/:\/home\/<user>\/anaconda3\/bin\/$//'`

確認してみるとん?消えてない.ということでより確実な方法を使います.先ほどのPATHから該当箇所をぬいて

export PATH=/opt/ros/kinetic/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

これで完了です.さようならanaconda

.bashrcの中身を無効化

以下の部分をコメントアウト

# added by Anaconda3 4.2.0 installer
#export PATH="/home/<user>/anaconda3/bin:$PATH"
# added by user 
#export PYTHONPATH="/home/<user>/anaconda3/lib/python3.5/site-packages:$PYTHONPATH"

これを忘れると次回起動時に同じ感じになります.

Try1の続き:ワークスペースを一度綺麗にする

未だにPythonのPathが残っている模様...?

Pythonのパッケージの確認

>> which python
/usr/bin/python

一応pythonがシステム標準のものになっているということを確認.

この時点でうまく行くと思われるので以下の解説に従い,一度catkin_ws以下をお掃除.
https://groups.google.com/forum/#!topic/ros-japan-users/DwmvcM9X5jU

rm -fr ~/catkin_ws/devel ~/catkin_ws/build

この後,もう一度catkin_makeを行うことで成功.

余談:anacondaは動くのか?

試しにfullpathを与えてpythonを駆動してみました.

user:~/catkin_ws⟫ /home/<user>/anaconda3/bin/python
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul  2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
>>> import numpy

ふぅ〜.cvやtensorflowへはアクセスできないみたい?ですね.これはおそらくバージョンや参照先の違いとかのせいでしょう.numpyとかは正しくimportできているように見えます.見えるだけかも.
Python2系なのは不満ですがros2が出るまでの辛抱です.

一応メモとして残しておきました.