Flow-Developers

Raspberry Pi, Raspbian, python, ROS, IoT, 電子工作, 機械学習, Deep learning, ライフハック

Raspberry pi 2(Raspbian Jessie)にROS indigo(ROS-Desktop,rqt,rviz)をインストールする

はじめに

Raspberry pi 2(Raspbian Jessie)にROS indigo(ROS-Desktop)をインストールする方法が 日本語ではなかったので、まとめました。 rqtやrvizが使えた方がデバッグで圧倒的に便利なので、おすすめです。 Raspberry pi 3でも、Raspbian Jessieなら同様の方法でインストールできると思います。



ROSのリポジトリを設定、認証キーを追加

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu jessie main" > /etc/apt/sources.list.d/ros-latest.list'
$ wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -

aptのパッケージインデックスを更新

$ sudo apt-get update
$ sudo apt-get upgrade

ROSビルド(ROS-Comm)に必要なパッケージをインストール

$ sudo apt-get install python-pip python-setuptools python-yaml python-distribute python-docutils python-dateutil python-six
$ sudo pip install rosdep rosinstall_generator wstool rosinstall

ROSビルド(ROS-Desktop)に必要なパッケージをインストール

$ sudo apt-get install cmake libblkid-dev e2fslibs-dev libboost-all-dev libaudit-devl

rosdepを初期化する

$ sudo rosdep init
$ rosdep update

catkinのワークスペースを作成する

$ mkdir ~/ros_catkin_ws
$ cd ~/ros_catkin_ws

rosinstallでdesktopを選択する

  • rqtやrvizが使えた方がデバッグで圧倒的に便利なので、desktopでinstallする。
  • Installing ROS Indigo on the Raspberry Pi にdesktopのinstallに必要な手続きは飛び飛びで記載されているが分かりにくいので、以下順序立てて書く。
$ rosinstall_generator desktop --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-desktop-wet.rosinstall
$ wstool init src indigo-desktop-wet.rosinstall

ROSビルド(ROS-Desktop)に必要なパッケージをソースビルドする

  • desktopは、libconsole-bridge-dev, liblz4-dev, liburdfdom-headers-dev, liburdfdom-dev, collada-dom-devのソースビルドが必要
  • ソースビルド用にexternal_srcディレクトリを用意する
$ mkdir ~/ros_catkin_ws/external_src
$ sudo apt-get install checkinstall cmake
$ sudo sh -c 'echo "deb-src http://mirrordirector.raspbian.org/raspbian/ testing main contrib non-free rpi" >> /etc/apt/sources.list'
$ sudo apt-get update

libconsole-bridge-devをビルドする

$ cd ~/ros_catkin_ws/external_src
$ sudo apt-get build-dep console-bridge
$ apt-get source -b console-bridge
$ sudo dpkg -i libconsole-bridge0.2*.deb libconsole-bridge-dev_*.deb

liblz4-devをビルドする

$ cd ~/ros_catkin_ws/external_src
$ apt-get source -b lz4
$ sudo dpkg -i liblz4-*.deb

liburdfdom-headers-devをビルドする

$ cd ~/ros_catkin_ws/external_src
$ git clone https://github.com/ros/urdfdom_headers.git
$ cd urdfdom_headers
$ cmake .
$ sudo checkinstall make install

checkinstallコマンド後に、以下の設定画面となる。

0 -  Maintainer: [ root@raspberrypi ]
1 -  Summary: [ Package created with checkinstall 1.6.2 ]
2 -  Name:    [ urdfdom-headers ]
3 -  Version: [ 20150804 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ armhf ]
8 -  Source location: [ urdfdom_headers ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ urdfdom-headers ]
12 - Conflicts: [  ]
13 - Replaces: [  ]
Enter a number to change any of them or press ENTER to continue:

2番のNameをurdfdom_headersからliburdfdom-headers-devに変更する。 2 を入力してEnter、liburdfdom-headers-dev と入力する。 再度確認の設定が表示されたら Enterで進む。

liburdfdom-devをビルドする

$ cd ~/ros_catkin_ws/external_src
$ sudo apt-get install libboost-test-dev libtinyxml-dev
$ git clone https://github.com/ros/urdfdom.git
$ cd urdfdom
$ cmake .
$ sudo checkinstall make install

checkinstallコマンド後に、以下の設定画面となる。

0 -  Maintainer: [ root@raspberrypi ]
1 -  Summary: [ Package created with checkinstall 1.6.2 ]
2 -  Name:    [ urdfdom ]
3 -  Version: [ 20150804 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ armhf ]
8 -  Source location: [ urdfdom ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ urdfdom ]
12 - Conflicts: [  ]
13 - Replaces: [  ]
Enter a number to change any of them or press ENTER to continue:

2番のNameをurdfdomからliburdfdom-devに変更する。 2 を入力してEnter、次に liburdfdom-dev と入力する。 再度確認の設定が表示されたら Enterで進む。

collada-dom-devをビルドする

$ cd ~/ros_catkin_ws/external_src
$ sudo apt-get install libboost-filesystem-dev libxml2-dev
$ wget http://downloads.sourceforge.net/project/collada-dom/Collada%20DOM/Collada%20DOM%202.4/collada-dom-2.4.0.tgz
$ tar -xzf collada-dom-2.4.0.tgz
$ cd collada-dom-2.4.0
$ cmake .
$ sudo checkinstall make install

checkinstallコマンド後に、以下の設定画面となる。

0 -  Maintainer: [ root@raspberrypi ]
1 -  Summary: [ Package created with checkinstall 1.6.2 ]
2 -  Name:    [ collada-dom ]
3 -  Version: [ 2.4.0 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ armhf ]
8 -  Source location: [ collada-dom-2.4.0 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ collada-dom ]
12 - Conflicts: [  ]
13 - Replaces: [  ]
Enter a number to change any of them or press ENTER to continue:

2番のNameをcollada-domからcollada-dom-devに変更する。 2 を入力してEnterを押し、次に collada-dom-dev と入力する。 再度確認の設定が表示されたら Enterで進む。

collada_urdfにパッチを当てる

Re: [ros-sig-embedded] Re: Install ROS on Linaro (gumstix, pandaboard) の添付ファイル(0001-fixed-arm-build.patch)をダウンロードし、パッチを当てる。

$ cd ~/ros_catkin_ws/src/robot_model/collada_urdf/
$ patch -p1 < ~/0001-fixed-arm-build.patch

rvizのコードをARMビルド用に一部変更する。

Unable to compile rviz on ubuntu armhfを参考に、mesh_loader.cppに+で表記した行を追加する。この変更をしないとrvizのビルドが通らない。

$ nano ~/ros_catkin_ws/src/rviz/src/rviz/mesh_loader.cpp 
 #include <assimp/aiPostProcess.h>
 #include <assimp/IOStream.h>
 #include <assimp/IOSystem.h>
 #endif
+ #  ifdef __arm__                 // fix for ARM build
+ #include <strings.h>
+ bool Assimp::IOSystem::ComparePaths(const char *p1, const char *p2) const
+ {
+     return !::strcasecmp(p1, p2);
+ }
+ #  endif

ROSビルド用にスワップメモリを拡張する

$ vi sudo raspi-config
    -> 8. Advanced Option を選択
    -> A3 Memory Split
    -> GPU のメモリを 16MByte に設定
    -> 下矢印キーで Finish を選択
    -> Yes でreboot
$ sudo service dphys-swapfile stop
$ sudo nano /etc/dphys-swapfile
#CONF_SWAPSIZE=100
CONF_SWAPSIZE=1024
$ sudo service dphys-swapfile start

ROS依存関係の解消

  • 下記を実行すると、python-rosdep, python-catkin-pkg, python-rospkg, python-rosdistro, sbclなど色々と不足している旨のエラーメッセージが出るが、pip経由やソースビルド経由で導入済みなので問題なし。
$ cd ~/ros_catkin_ws
$ rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie

ROSのビルドを実行する

  • 注意:ビルド完了まで数時間かかる。(スワップメモリを使用することもあり)
  • -j4オプションだと途中でエラーになるので、初めから-j2オプションで行う。
  • 上記まで手続きをこなしていれば、下記のrvizのビルドエラー以外は通る。
$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo -j2

rvizで以下のビルドエラーが出た場合は個別でビルドする。

Makefile:123: recipe for target 'all' failed
make: *** [all] Error 2
<== Failed to process package 'rviz': 
  Command '['/opt/ros/indigo/env.sh', 'make', '-j4', '-l4']' returned non-zero exit status 2

Reproduce this error by running:
==> cd /home/jorg/ros_catkin_ws/build_isolated/rviz && /opt/ros/indigo/env.sh make -j4 -l4

Command failed, exiting.
$ cd ~/ros_catkin_ws/build_isolated/rviz
$ sudo make -j2
  • 再度ROSビルドをかける
$ cd ~/ros_catkin_ws
$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo

ROSビルド結果を反映させる

  • --install-spaceオプションで/opt/ros/indigo/にインストールしているので、そこのsetup.bashでビルドを反映させる。
  • source /opt/ros/indigo/setup.bashを.bashrcにも記述することで起動毎に自動反映できる。
$ source /opt/ros/indigo/setup.bash
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc

ROS(roscore)を実行し、動作確認する

$ roscore
  • 以下がエラーなしで立ち上がればROSのビルド完了!
... logging to /home/pi/.ros/log/9781754e-3a9d-11e5-8b98-b827ebe98f3c/roslaunch-raspberrypi-11718.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://raspberrypi:42226/
ros_comm version 1.11.19


SUMMARY
========

PARAMETERS
 * /rosdistro: indigo
 * /rosversion: 1.11.19

NODES

auto-starting new master
process[master]: started with pid [11735]
ROS_MASTER_URI=http://raspberrypi:11311/

setting /run_id to 9781754e-3a9d-11e5-8b98-b827ebe98f3c
process[rosout-1]: started with pid [11748]
started core service [/rosout]

Raspbian Jessieで、roscore,rqt,rvizを立ち上げたスクリーンショット

  • roscoreを起動、picameraのimage_topicを配信、rqt/rvizをリアルタイム表示している。
  • 実際に動いてます!

f:id:flow-dev:20160613083815p:plain



参考文献

Installing ROS Indigo on the Raspberry Pi

Raspberry piにROS indigoをインストールする

http://jorgbosman.eu

CMake is not able to find BOOST libraries

Re: [ros-sig-embedded] Re: Install ROS on Linaro (gumstix, pandaboard)

Raspberry Pi でビルドがこんな感じで失敗したときの対処

バイエルン vs ドルトムントDFBポカール杯決勝 2016/5/21 香川真司 報道写真集

Bayern Muenchen v Borussia Dortmund - DFB Cup Final 2016



ACミラン vs ユベントスFC コッパ・イタリア決勝 2016/5/21 本田圭佑 報道写真集

AC Milan v Juventous FC - TIM Cup Final 2016



ウイイレ2016 myclubモード 選手能力値とチームレベルの関係について

チームレベルとは?

f:id:flow-dev:20160518234425p:plain

  • ウイイレ2016でmyclubモードでは、チームレベル(レベル1から5まで)によって、対戦相手のマッチングが決まる。
  • レベル3までは、普通の選手が多いので、チームレベルは気にならない。しかし、レベル4になると、イブラヒモビッチポグバなどワールドクラスの選手に遭遇する。
  • レベル5になると銀河系軍団ばかりでゴリ押しも。ストレスが溜まる。
  • 好みの選手を操りつつ、ストレスなく、勝負も楽しむ。ウイイレ2016のmyclubモードはチームレベル4がおすすめ

チームレベルとチーム力の関係

  • チームレベルチーム力の値(スタメンとベンチ合計18人の選手能力値で決まる値 ※ベンチ外の選手は影響しない)で決定する。
  • チームレベルとチーム力の関係は下表通り。
  • チーム力の値が1650 以上 1799 以下であればレベル4となる。
チームレベル チーム力
3 1400 以上 1649 以下
4 1650 以上 1799 以下
5 1800 以上

チーム力と選手能力の関係

  • PESFan.com Thread: Team levelsによると、チーム力1150のチームに選手能力値57~90の選手を1人追加したところ以下のグラフの関係になったそう。(横軸:選手能力値、縦軸:チーム力の上昇値)

f:id:flow-dev:20160518233313j:plain

f:id:flow-dev:20160507135355j:plain

  • チーム力の上昇は選手能力値と強く相関がある。
  • 実際、選手のレベルが上がった場合もチーム力は上昇する。
  • 選手コストの影響もありそうだが軽微。

まとめ

  • ストレスなく、ウイイレ2016myclubモードを楽しむにはチームレベル4が最適
  • チーム力を1650 以上 1799 以下にすればチームレベル4になる
  • チーム力の上昇は選手能力値と強く相関がある。
  • 選手のレベルが上がると、チーム力も上昇する。
  • チームレベルを調整すれば、ウイイレ2016myclubモードをもっと楽しめるかも。

グラフ化ツール

  • Jupyter(IPython) Notebookを利用して、matplotlibでグラフ化したpythonコードを掲載する。
  • GitHub GistとJupyter(IPython) Notebookの組み合わせは便利。

PES2016_Plot_PlayerStrength2TeamStrength.ipynb

参考サイト

PESFan.com Thread: Team levels

myClub in PES 2016: Balancing The Teams

GitHub Gistを使ってブログにJupyter(IPython) Notebookを表示する方法

以上

ウイイレ2016 レスター・シティFC、15-16 プレミア優勝時の能力値まとめ

はじめに

レスター・シティFCが、2015-16 シーズン プレミアリーグを制覇しました!

スモールクラブの快挙

1994-95シーズンにアラン・シアラークリス・サットンを要したブラックバーン・ローヴァーズFCプレミアリーグを制して以来、スモールクラブの快挙です。

ウイイレ2016のレスターの記録

この魅力的なチーム、レスター・シティFC(ウイイレではイーストミッドランズ)はもちろんウイイレ2016で操作することが出来ます。しかし毎年ウイイレの新作が発売されて行くため、このミラクルチームの能力値もいづれは振り返ることが難しくなります。 今回は歴史的なチームの記録として、ウイイレ2016におけるレスター・シティFCの能力値を残しておこうと思います。(2016/3/24配信のdatapack3.0準拠)


Vardy's Best Bits



2015-16 レスター・シティFC

Starting Line-ups

f:id:flow-dev:20160507134941p:plain

GK

DF

MF

  • 26 リヤド・マフレズ(RMF,81) f:id:flow-dev:20160507135242j:plain

  • 14 エンゴロ・カンテ(CMF,78) f:id:flow-dev:20160507135301j:plain

  • 4 ダニー・ドリンクウォーター(CMF,76) f:id:flow-dev:20160507135311j:plain

  • 11 マーク・オルブライトン(LMF,74) f:id:flow-dev:20160507135321j:plain

FW

Substitution

  • 32 マーク・シュワルツァー(GK,77) f:id:flow-dev:20160507135408j:plain

  • 27 マルチン・ヴァシレフスキ(CB,77) f:id:flow-dev:20160507135434j:plain

  • 15 ジェフリー・シュラップ(LSB,77) f:id:flow-dev:20160509064226j:plain

  • 10 アンディ・キング(CMF,77) f:id:flow-dev:20160507135444j:plain

  • 13 ダニエル・アマーティ(CMF,69) f:id:flow-dev:20160507135501j:plain

  • 22 デマレイ・グレイ(LMF,67) f:id:flow-dev:20160507135518j:plain

  • 24 ネイサン・ダイアー(RMF,77) f:id:flow-dev:20160507135534j:plain

  • 33 ギョクハン・インレル(CMF,80) f:id:flow-dev:20160507135549j:plain

  • 23 レオナルド・ウジョア(CF,75) f:id:flow-dev:20160507135603j:plain


Shinji Okazaki: Every Premier League Goal

まとめ



参考資料

Rapsberry piをProxy環境でネットワーク接続するTips

はじめに

  • IoTの用途でRaspberry piを利用する場合、Proxy設定が必須な場合が多々あります。そのような現場において、最低限必要なProxy設定を網羅しました。

Proxyの設定方法

apt-get用

  1. 初期設定のRaspbian OSはapt.confは存在しないので、新規作成する。
$ sudo nano /etc/apt/apt.conf
  1. /etc/apt/apt.confに以下を記述する。

※注意:プロシキサーバー名およびポート番号はネットワーク環境に依存する。

Acquire::http::proxy "http://your.proxy.address:8080";
Acquire::https::proxy "https://your.proxy.address:8080";
Acquire::ftp::proxy "ftp://your.proxy.address:8080";

wgetepiphanyブラウザ用

  1. .bashrcに以下を記述する。

※注意:プロシキサーバー名およびポート番号はネットワーク環境に依存する。

export http_proxy=http://your.proxy.address:8080
export https_proxy=https://your.proxy.address:8080
export ftp_proxy=ftp://your.proxy.address:8080
  1. NOOBS 1.4.2以降に含まれるRaspbianのように、デフォルトでGUI環境で起動させた場合、epiphanyでProxyを有効にするにはLXTerminalを立ち上げ下記のコマンドでepiphanyを起動する。
$ epiphany &

Proxy設定を保持したまま、sudo権限で実行する

例えばpip installsudo権限で実行したい場合、-EオプションでユーザーのProxy設定を引き継げる。

$ sudo -E pip install hogehoge

Proxy環境でNTPを利用せずに時刻を合わせる

Raspberry Piは時刻保持用のバッテリーがないので、ネットワーク接続がない環境では起動するたびに時刻がずれている。Proxy環境のNTP設定について、ネットワーク管理者に問い合わせるのが面倒な場合、以下の方法で時刻設定が可能。

$ date -s "$(curl -s --head http://www.google.co.jp | grep ^Date | cut -b 7-)"

参考資料

本記事は、以下の書籍とサイトを参考にしています。

Windowsでdlib(高機能な顔検出器&HOG特徴量学習)の環境を簡単に立ち上げる

What is dilb?

dlib C++ Library

Dlib is a modern C++ toolkit containing machine learning algorithms and tools for creating complex software in C++ to solve real world problems. It is open source software and licensed under the Boost Software License.

ポイント

参考動画




Windowsでのインストール/環境構築方法

ポイント

  • Macのインストール方法は日本語でも幾つかあるが、Windows版がない。
  • Windowsでもpythonならインストールは簡単。すぐにdlibを始められる。

windowspythonの環境構築

  1. Python(x,y)windowsに入れる。(ググればすぐ分かる)
  2. ipythonを起動 (windows startボタン押す → ipythonを検索/実行)
  3. pipで下記コマンドを実行。(!はipythonでコマンド実行時の御作法)
!pip install dlib
  1. dlibのインストール完了。pythonコードにimportして使える。
import dlib


その他