Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

環境構築方法について #51

Merged
merged 2 commits into from
Jul 25, 2019
Merged

Conversation

k-okada
Copy link
Contributor

@k-okada k-okada commented Jul 18, 2019

  • 一般論ですが,環境構築は wstoolrosdep だけで行えるようにするのがよいと思います.https://github.com/YOODS/rovi/blob/israfel/Install.sh のように特殊な環境設定法に依存すると,このパッケージの環境設定に手間取ってしまう上に,他のソフトとインテグレーションして動かそうとしたときに,トラブルの原因になります.これはロボットソフトでは良くあるトラブル例ですが,ROSの良いところは,通信形式とかライブラリ以前に,この問題に着目して,誰が作ったパッケージでも同じ手順で開発環境を構築できる点にあると思っています.

 例:https://moveit.ros.org/install/source/
 例:https://github.com/jsk-ros-pkg/jsk_robot/tree/master/jsk_fetch_robot#setup-environment

  • ただ実際には色々難しいところがあります.aravis, python(pip), npm, /etc/sysctl.confあたりが難しい点ですが, まずは一回おいておいて簡単なところから進めていきたいと思います.

  • 33bec14 で rovi.rosinstall ファイルを作成しました.これで,

mkdir -p ws/src
cd ws/
wstool  init src
wstool merge -t src https://raw.github.com/k-okada/rovi/fix_install/rovi.rosinstall # mergeされたら修正する.
wstool update -t src #  Error processing 'aravis'  と表示されるが後で対処する.
rosdep install -y --from-paths src --ignore-src --rosdistro kinetic

で一通り環境設定が可能になります.
これでInstall.sh の以下の部分は代替出来ます.

git clone https://github.com/YOODS/camera_aravis.git

git clone https://github.com/RethinkRobotics-opensource/rosnodejs

git clone -b devel https://github.com/YOODS/rqt_param_manager.git

  • Eigen について

以下で3.3.4をインストールしていますが,これは何か理由があるでしょうか? apt で入る 3.3.-beat1-1(3.2.92) で足りない機能はなにになるでしょうか?簡単なところであれば3.3.4から必要な部分だけど,パッケージに含めるのが良いと思います.0633600 も参照ください.

rovi/Install.sh

Lines 46 to 50 in 1f73606

wget http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz
tar xvzf 3.3.4.tar.gz
mkdir include
mv eigen-eigen-5a0156e40feb/Eigen/ include
rm -rf eigen-eigen-5a0156e40feb/ 3.3.4.tar.gz

  • pythonを含んだパッケージの開発について

以下でpythonのファイルをdevelスペースにコピーしていますが,catkin_python_setup の書き方に従って現状lib/python2.7以下にあるPythonのコードをsrc/rovi_utils 以下に置けば(3209e57),これらのファイルにアクセスできるようになるはずです.
http://docs.ros.org/jade/api/catkin/html/user_guide/setup_dot_py.html

cp lib/python2.7/*.py ../../devel/lib/python2.7/dist-packages

但し,この場合は既においてあるpythonのコードで

-import tflib
+from rovi_utils import tflib

と変更する必要があります(YOODS/rovi_utils@ad00db8)
ただ,この方が名前衝突も割けられますし良い変更かと思います.

  • グローバルスペースへのスクリプトのインストールについて

以下でrosrun ... ではなく直接コマンドを打てばプログラムが立ち上がるようにしているかと思います.

sudo cp launch/rovirun.sh /usr/local/bin

pythonのコードとしてみなせば,setup.pyに書いておくという方法があります.

https://github.com/ros-visualization/rqt/blob/da0b62e2995/rqt_gui/setup.py#L10

今回は
tf_lookup.pyは既に書いてあるので,

https://github.com/YOODS/rovi_utils/blob/edd282462/setup.py#L9

これで,rosrun無しで動くようになっています.(インストールされている場所は /home/user/rovi_ws/devel/bin/tf_lookup.py)

もう一つは以下のようにcmakeのinstallコマンドを使う方法です.python以外場合はこちらを使うのが一般的です.

https://github.com/ros-visualization/rviz/blob/f9b357fdc0bfea5361e27b506059e62eab1f861b/src/rviz/CMakeLists.txt#L185-L186

こうすればdebファイルが作成されたときには,rosrun無しで実行できるパスにファイルがコピーされます.

開発中もこの環境をつくりたければ,catkin buildの前でにcatkin config --installとします(https://catkin-tools.readthedocs.io/en/latest/verbs/catkin_config.html )ただ,この場合全てのパッケージできちんとcmakeのinstall命令を書かかないと行けなくなるので,ココは後回しにして先に進むのが良いと思います.(debファイルを作成する際にはこれは必須になります)

  • aravisについて

aptでは入らないライブラリを使った開発もROSでは対象になっており,幾つかの方法が試されています.(初期の例 http://wiki.ros.org/ROS/Tutorials/Wrapping%20External%20Libraries ) ,基本はライブラリのソースツリーに package.xmlCMakeLists.txt を置けばROSのパッケージと同じように開発環境に組み込むことが出来ます.

現状のwstool update はpythonのtarfileモジュールのバージョンからtar.xzに対応していないため

cd ~/ws/src
wget http://ftp.gnome.org/pub/GNOME/sources/aravis/0.6/aravis-0.6.0.tar.xz
tar -xvf aravis-0.6.0.tar.xz

として,このデレクトリの中に以下のファイルを置けばcatkin buildでコンパイル出来ます.
https://gist.github.com/d321b6fa8fd3503ba1e395b6651206c6

もう一つの方法はaravisのリリースリポジトリを作ることです.これは将来的にdebでリリースした際に必要になるものかとおもいます.やり方は http://wiki.ros.org/bloom/Tutorials/ReleaseThirdParty を参考にするのですが,aravis-release というリポジトリを作成し,そこに以下のファイルを追加します.

https://gist.github.com/a013458a4e0008b40fc1528ee98096d7

ただ,これはtar.xzがpython2では対応していないので,もし,ソースツリーをhttps://github.com/AravisProject/aravis/tree/ARAVIS_0_6_0
から持ってきてよければ,

https://gist.github.com/cfff59b21da0332f275ee2c74be8d20f

を利用します.

後はこのディレクトリで

git-bloom-release kinetic

とします,ここで,git push --all && git push --tags を行うよう指示がありますが,それをすると,rovi.rosinstallでこの以下のdebian/kinetic/xenial/aravisディレクトリを指定するとpackage.xml, CMakeLists.txt入りのソースツリーがダウンロードできます.

またここで,

git checkout debian/kinetic/xenial/aravis 
dpkg-buildpackage -rfakeroot -uc -b

とすると,debファイルも作成されます.

上に書いたようにrosdep install ...として全ての必要なパッケージをインストールする,というコンセプトからすると,pipのパッケージについては以下のようにしてpackage.xmlにかいてrosdep installでインストールさせるというのがただいいやり方かと思います.

  <exec_depend version_eq="5.7" >ipython-pip</exec_depend>
  <exec_depend version_eq="4.10">ipykernel-pip</exec_depend> 
  <exec_depend>open3d-python-pip</exec_depend> 

新しいpipのパッケージについては以下のようにしてpull requestを出します.
ros/rosdistro#21779

上のようにバージョン固定でインストールする方法についても以下でpull requestをだしました
ros-infrastructure/rosdep#694
ros-infrastructure/rosdep#693

ただ,これをしても/usr/local に入れたpythonのモジュールと他の人のアプリケーションがコンフリクトする,など問題が起こることは多々あるかと思います.

また,この方法でパッケージを作ってもdeb化した際にはpipのモジュールが含まれずに使いづらいものになるかと思います.

他のやり方としては
https://github.com/pyros-dev/catkin_pip や https://github.com/locusrobotics/catkin_virtualenv
があります,こちらのほうがpipのインストール先がワークスペースに限られるなど,メリットがあるかもしれません.

  • npm について

こちらもpipと同様でdeb化した際に問題になるので,可能であればpython/c等の言語でプログラムを書くことを強くおすすめしますが(あるいはjsのコード自体をパッケージに含める)
開発用にrosdep install でnpmもインストールできるようなpull requestを以下におきました.
ros-infrastructure/rosdep#692

  • あとは,/etc/sysctl.conf ですが,

" | sudo tee -a /etc/sysctl.conf

非常にトリッキーな方法としてはコンパイル時に強制的に設定を追加する,という方法もありますが,
何れにせよ,debファイルを作成時には以下のようなファイルを作成してapt じに設定を書き換えることができます.

https://github.com/tork-a/jsk_3rdparty-release/blob/debian/kinetic/xenial/julius/debian/preinst
https://github.com/tork-a/minas/blob/master/minas_control/CMakeLists.txt#L42-L49

何れにせよupdate_sysctl.sh などのファイルを作成してrosrun rovi update_sysctl.shなどとさせるのが良いかと思います.

c.f. YOODS/rovi_utils#10, YOODS/camera_aravis#2

@KazukiHiraizumi KazukiHiraizumi merged commit 72d5b7d into YOODS:israfel Jul 25, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants