プラスプラス開発者ブログ

岩手県盛岡市のシステム開発会社「株式会社プラスプラス」の開発者ブログです。

ROSインストールでコマンドなるものと格闘中(頑張ってセットアップするぞ!!)

こんにちは、プラスプラスの真山です。
ROSをインストールしてみます。手順はROSのHPに載っている一般的なインストール方法です。 ターミナルを開いてコマンドをコピーペーストするだけです。簡単です。

f:id:plusplus-sawada:20180620104347j:plain
「簡単です」と言いつつも参考書見ながらコマンドを頑張っている図

NTP (Network Time Protocol) 設定

複数のコンピュータ間で通信を行う場合、NTPを利用して各コンピュータで時刻を同期する必要があります。chrony をインストールして ntpdate コマンドで ntp サーバを指定します。

$ sudo apt-get install -y chrony ntpdate
$ sudo ntpdate -q ntp.ubuntu.com


ソースリストの追加

ros-latest.list に ROS 関連サーバの URL を追加します。

$ sudo sh -c 'echo "deb https://package.ros.org/ros/ubuntu $(lsb_release-sc) main" > /etc/apt/sources.list.d/ros-latest.list'
キーを設定する

ROS 関連サーバからパッケージをダウンロードするための公開キーを追加します。以下の公開キーはサーバ更新の際に変更されるため、公式 Wikiページで最新のものを確認します。

$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
パッケージインデックスのアップデート

Ubuntu のパッケージをアップデートしておきます。

$ sudo apt-get update && sudo apt-get upgrate -y
ROS Kinetic のインストール

デスクトップ用の ROS パッケージをインストールします。 このパッケージには、ROS本体、グラフィカルなユーティリティツール rqt 、可視化ツール RViz 、その他の関連ライブラリが含まれます。今回はkineticなので、別のバージョンを使いたい場合はros-の後にそのバージョン名を入れます。

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

さらに rqt に関するすべてのパッケージをインストールしておきます。

$ sudo apt-get install ros-kinetic-rqt*
rosdep の初期化

rosdep は ROS のメインコンポーネントを利用したり、プログラムをコンパイルする際、OS に依存した外部のライブラリやツールをインストールするためのツール。 ROS を利用する前には必ず一度 rosdep を初期化しておく必要があります。

$ sudo rosdep init
$ rosdep update
rosinstall のインストール

ROS の様々なパッケージをインストールする際に役に立つツールです。 頻繁に利用するので必ずインストールします。

$ sudo apt-get install python-rosinstall
環境設定の呼び出し

環境設定ファイルには、ROS_ROOT ROS_PACKAGE_PATH などの環境変数があらかじめ定義されています。以下のコマンドで読み込めます。

$ source /opt/ros/kinetic/setup.bash
作業フォルダの生成および初期化

ROS 専用ビルドシステム catkin を利用します。 そのためにあらかじめ作業フォルダ catkin_ws を作成し、初期化する必要があります。 この作業は、作業フォルダを削除して再び作成しない限り、一度だけ行えばいいです。

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace

フォルダ catkin_ws が作成できたらビルドを行います。

$ cd ~/catkin_ws/
$ catkin_make

ビルドが終了したら、ls コマンドで現在の作業フォルダにあるファイルを確認します。 ビルドに成功すると src フォルダの他に builddevel フォルダがそれぞれ作成されています。 このときに、catkin ビルドシステムのビルド関連ファイルは build フォルダに、実行関連ファイルは devel フォルダに、それぞれ自動生成されます。

$ ls
build
devel
src

最後に catkin ビルドシステムの環境設定ファイルを読み込んでおきます。

$ source ~/catkin_ws/devel/setup.bash
テスト

インストールできたらroscoreを起動します。

$ roscore

これでROSのインストールが完了しました。おめでとうございます!(ヤッタネ!)

ROSを快適に使う環境設定

しかしこのままでは新しいターミナルを開くたびに

$ source /opt/ros/kinetic/setup.bash
$ source ~/catkin_ws/devel/setup.bash

というコマンドを毎回実行させて環境設定ファイルを読み込まなければなりません。これはめんどくさい!(毎回ですよ!あーめんどくさい!)

なので自動的に環境設定ファイルを読み込むように設定します。エディタで~/.bashrcファイルの最後に設定を追加します。エディタは vim でも gedit でもなんでもいいです。

$ gedit ~/.bashrc

~/.bashrcファイルの中身です。最後の所に書いていきましょう。

環境設定ファイルの読み込みを自動化。
# Set ROS Kinetic
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
ROS ネットワークの設定

ROSはインターネットを使用し、ノード情報を管理するコンピュータ(Master) や、実際にノードを実行するコンピュータ(Host)で動作しているノード間でメッセージ通信を行うため、それぞれのコンピュータのIPアドレスを設定します。Master と Host が同じコンピュータの場合はxのところにIPアドレスを、

# Set ROS Network
export ROS_HOSTNAME=xxx.xxx.xxx.xxx
export ROS_MASTER_URI=http://${ROS_HOSTNAME}:11311

別の場合はそれぞれに設定します。

# Set ROS Network
export ROS_HOSTNAME=xxx.xxx.xxx.xxx
export ROS_MASTER_URI=yyy.yyy.yyy.yyy

コンピュータが1台だけでIPアドレスを特定する必要がないときや、インターネットに接続せずアドレスが割り当てられないときは、localhostと指定します。

# Set ROS Network
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
ショートカットコマンドの設定

次に頻繁に使うであろうコマンドのショートカットを設定します。

# Set ROS alias command
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'

これがとても便利です。便利ですが私の場合設定したことを忘れて普通にコマンドを打つことがよくあります。(だめじゃん!)

ここまででROSのインストールと環境設定が完了しました。お疲れ様でした。 次回は実際にROSを起動させて動かしてみます。あのかわいいカメ達も出てきますのでお楽しみに〜!

ROSの環境確認(ビルドが動かない・・・)

こんにちは、プラスプラスの歯が抜けそうで抜けない真山です。歯医者に行きたいです。

それでは早速ROS (Robot Operating System)をインストールしてみよう〜!っていうことなのですが、その前にまず何で動かすの?という確認から。

ROSは「ロボットオペレーティングシステム」という名前ですが実際にはOSではなくMeta-Operating System(特定のコンピュータ用ではなく既存のOS上で動作するもの) なのでOSの選定が必要です。

いろんな開発ブログでROSインストールや環境構築について書いていますが、OSとROSのバージョンの相性だったり環境設定だったりが影響して後に問題が出る場合があります。(実際にビルドができなくて苦しみ、結局最初からやり直しました。)

f:id:plusplus-sawada:20180620104009j:plain
ビルドが出来ない〜〜〜!!!と苦悩中

ROSを使用する場合のOSですが、一般的にはUbuntuLinux Mintが使われるようです。
(ROS開発チームもUbuntu LTSのバージョンに対してテスト・リリースを行なっているため)
最初はMacにVirtual BOXをインストールしてその中にUbuntuを入れて動かしていましたが、ものすごく重たく、gazeboを起動するのに毎回数分かかるほどでしたのでオススメしません。

ROSのバージョンは毎年5月23日の「世界カメの日」に合わせて新バージョンがリリースされます。バージョンごとにアイコンのカメも違います。(なぜカメなのかは諸説あるみたいですがよくわかりません。アイコンがかわいいのでどうでもいいです) f:id:plusplus-mayama:20180607125055p:plain ミュータ○トタートルズみたい?最初Indigoを見たときは肩からバズーカ生えたカメッ○スかと思いましたが、これスキー板らしいです。Hydroに関してはもうカメではないだろ!おい!

ROSのサポート期間は基本的には2年間です。 また2年に1回リリースされるUbuntu LTSバージョンに合わせて開発されるROSバージョンのサポート期間はUbuntu LTS と同じく5年です。

そのことを踏まえて現在リリースされているバージョンでのオススメはこちらです。

ROS 開発環境

次回はインストールを行います!

スマートコントラクトの関数を実行する際に必要なGASはどれくらいか?の実験

プラスプラスの澤田です。

Ethereum でスマートコントラクトを動かす際に問題になるのが、GAS(手数料のようなもの)ですが、 実際のところいくらぐらい掛かるものなのかを実験してみました。

この記事は作成したプライベートネットで実験した結果をもとに記載しています。

文字列をそのまま保存する場合

サンプルとして使用するスマートコントラクトです。

ソースコードはこちらです。

単純に、関数の実行者のアドレス単位で文字列を保持・照会・削除する・・・というだけのものです。 (この処理に意味があるのかはここでは問いません)

GAS単価 18(単位:Gwei)の場合でこのような結果となりました。

※JPYは 1 ETHER = 61,911JPY で計算しています。

1文字の場合

  • GAS USED 64,997
  • 0.001169946 ETHER
  • 72 JPY

100文字の場合

  • GAS USED 123,025
  • 0.00221445 ETHER
  • 137 JPY

1,000文字の場合

  • GAS USED 695,538
  • 0.012519684 ETHER
  • 775 JPY

5,000文字の場合

  • GAS USED 3,097,979
  • 0.055763622 ETHER
  • 3,452 JPY

ざっくりしか調べていないですが、6000文字以上はGASリミットで実行もできなかったので、 プライベートネットでETH使わない状況でも大きなデータストアには向かないようです。

文字列をハッシュ化して保存する場合

次に、文字列そのものを保持するのではなく、与えられた文字列をハッシュとして保持するスマートコントラクトで実験をしてみました。

ソースコードはこちらです。

1文字

  • GAS USED 64,024
  • 0.001152432 ETHER
  • 71 JPY

100文字

  • GAS USED 41,035
  • 0.00073863 ETHER
  • 46 JPY

1,000文字

  • GAS USED 105,008
  • 0.001890144 ETHER
  • 117 JPY

5,000文字

  • GAS USED 389,321
  • 0.007007778 ETHER
  • 434 JPY

10,000文字

ハッシュ化して保存しますので、思い切って10,000文字の実験も行ってみました。

  • GAS USED 744,999
  • 0.013409982 ETHER
  • 830 JPY

文字そのものを保管するよりは削減できましたがそれでもまだ高いかなと思います。

実際の設計ではこういったGASの料金も考慮に入れてどういった情報をスマートコントラクトに保持しておくのが良いか、考える必要がありそうです。

サンプルコード

今回の記事で使用したサンプルコードはこちらに公開しています。

WindowsでEthereum環境構築でスマートコントラクトはじめました。

ハリネズミモグラの仲間。哺乳類の「軽く熊」です。

ついにスマートコントラクトを実行する日がやってまいりました。
前回スルーされたsolidityの名誉挽回です。

Smart Contract とはブロックチェーン上に登録されたプログラムを
実行する機能
かなと個人的には思っています。

続きを読む

WindowsでEthereum環境構築にAndroidくわえました。

岩手と若手って見間違えるよね。やっぱり視力が悪い「軽く熊」です。

本当はsolidityをやろうかと思っていたのですが、やっぱり利便性を考えると
パソコンじゃなくてスマホだよね!?っという事で突然ですが、
イーサリアムのプライベートネットにAndroid端末を加えちゃいます!

続きを読む

WindowsでEthereum環境構築はじめました。その3

祝いと呪いって見間違えるよね。視力が悪い「軽く熊」です。

今回はEthereum-Walletによる1人で送金を試してみまーす。
銀行で例えるなら個人で複数口座(給料用、引き落とし用)を持って、
給料用口座から引き落とし用口座に指定額を移す感じでしょうか。

続きを読む