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 の消し方
まずは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が出るまでの辛抱です.
一応メモとして残しておきました.