Blog Archives

Ignition+ROS Melodicで走らせるRaspberry Pi Mouse

こんにちは!satoです。

前回はGitHub上で動かせるIgnition + ROSのサンプルを動かして移動台車のロボットをシミュレーションしてみました。

今回はIgnitionでRaspberry Pi Mouseを動かしてみましたので、Raspberry Pi Mouseのシミュレータについての簡単な説明とともにその使い方を軽く説明していきます。

なお、ここで紹介する内容は2019年10月6日の時点での情報です。その後のアップデートにより内容が変わる可能性があります。

Raspberry Pi Mouse Simlulatorとは

Raspberry Pi Mouse SimlulatorはGazebo + ROSで動かすRaspberry Pi Mouseのシミュレータです。

こちらに導入方法と使用方法をまとめています。

https://github.com/rt-net/raspimouse_sim/wiki

開発の記録はこの記事にまとめています。

Gazeboで走るRasPiMouse その6

Image from Gyazo

Ignition + ROSで自作ロボットを動かす

ros1_ign_gazebo_demosを拡張したros1_ign_gazebo_raspimouseを使ってRaspberry Pi Mouseを動かしてみます。

ros1_ign_gazebo_raspimouseのインストール

ros1_ign_gazebo_raspimouseをダウンロードしてビルドします。

先程の移動台車をRaspberry Pi Mouseに置き換えたSDFを作成してworldディレクトリに保存しています。
https://github.com/Tiryoh/ros1_ign_gazebo_raspimouse/blob/master/worlds/raspimouse_on_world.sdf

サンプルの簡単なSDFは以下に公開されています。

https://bitbucket.org/ignitionrobotics/ign-gazebo/src/default/examples/worlds/

例えば、tunnel.sdfを起動すると以下のようなモデルが起動します。中を読んでみるとuriでIgnition Fuelに公開されているモデルデータを指定していることを確認できます。

メッシュデータを含む複雑なSDFはIgnition Fuelに公開してSDFから呼び出すのが良いようです。

とりあえず手軽に試したいのでローカルに保存したまま呼び出すことにします。
Ignition Fuelに公開されているモデルデータはIgnition Fuel Toolsでダウンロードして$HOME/.ignition/fuelにダウンロードすることができるようです。

SDFが保存されている場所からの相対パスでvisual用のメッシュデータをuriで指定し、呼び出せれば簡単なのですが、現在プルリクエストが出されていてマージ待ちのようです。
https://bitbucket.org/ignitionrobotics/ign-gazebo/pull-requests/433/handle-relative-uris/diff

そこで今回はメッシュデータへのファイルパスをフルで指定します。ファイルパスを書き換えるために以下のスクリプトを実行します。configure_modelsを呼び出しています。

ros1_ign_gazebo_raspimouseの起動

それではIginitionでRaspberry Pi Mouseを起動してみましょう。以下のコマンドで呼び出します。

このようにかなり高くロボットを見下ろす位置からスタートします。スタート位置を調整する方法は今の所なさそうなようでした。

この状態で別のターミナルから以下のコマンドを実行するとロボットが3秒間走行して停止する様子が確認できます。

まとめ

前回はGitHub上で動かせるIgnition + ROSのサンプルを動かして移動台車のロボットをシミュレーションしました。
今回は開発途中のIgnitionを使用して弊社のロボットであるRaspberry Pi Mouseを起動してみました。
Raspberry Pi MouseはROS2にも対応しているロボットなのでシミュレーション環境についても開発を進めていきます。

続きを読む ›

Posted in Raspberry Pi Mouse
Tags: ,

Ignition+ROS Melodicでロボットのシミュレーション

こんにちは!satoです。

ROSConJP 2019にてLouise Poubelさんの基調講演で「これからのGazebo: ROSのシミュレーションの次世代」というタイトルでGazeboとIgnitionについての紹介がありました。

紹介されていたIgnitionでROSと組み合わせてサンプルを動かしてみましたので、Ignitionについての簡単な説明とともにその使い方を軽く説明していきます。

Open Robotics Louiseさんの基調講演が始まりした。ROSCon本家でお馴染みのGazeboを使ったライブスライドです。 #ROSConJP2019 pic.twitter.com/BHtbxk02P7

— ROSCon JP (@rosconjp) September 25, 2019

なお、ここで紹介する内容は2019年9月26日の時点での情報です。その後のアップデートにより内容が変わる可能性があります。

Ignitionとは

Ignitionはロボットのシミュレーションに特化したオープンソースなライブラリ群です。
Gazeboは物理シミュレーションやセンサシミュレーションなどロボットのシミュレーションに必要な要素が組み合わさり1つのソフトウェアとして公開されています。
※Gazeboの最近のバージョンではIgnitionのライブラリを取り込んで使用しているものもあります。こちらのページに解説が載っています。
それに対し、Ignitionではそれぞれを構成する要素がライブラリとしてわかれているため、シミュレータを簡単に拡張することができます。
例えば、GazeboではレンダリングエンジンにOGRE 1.0が採用されています。IgnitionではOGRE 1.0/2.0、NVIDIA OptiXなどの中から自由にレンダリングエンジンを選ぶことができます。

Gazeboと同様にIgnitionもbitbucket上で開発が進められているようです。

ドキュメント
https://bitbucket.org/ignitionrobotics/docs

Ignition本体
https://bitbucket.org/ignitionrobotics/ign-gazebo

Gazeboは現在Gazebo 9が主流だとは思いますが、Gazebo 11まではOpen Roboticsによってサポートとメンテナンスが継続されるようです。

今後は安定して使いたい用途にはGazeboを、新しいプラグインを開発していきたければIgnitionを使い、両方を使い分けていくのが良さそうです。

Gazeboはバージョン11で開発が終了するが、Ignitionはこれから続々とバージョンリリースが続く。開発にはIgnitionを使おう。 pic.twitter.com/4G8545a30M

— ROSCon JP (@rosconjp) September 25, 2019

Ignition + ROSでサンプルのロボットを動かす

IgnitionとROSを組み合わせて使用するサンプルがGitHub上に公開されています。まずはすでに公開されているデモ用モデルを動かしてみます。

https://github.com/osrf/ros1_ign

Ignitionのインストール

Ignition blueprintをインストールします。インストールは公式のドキュメントに従って進めます。

https://ignitionrobotics.org/docs/blueprint/install

Gazeboが問題なく動く環境ならば、いまのところ問題なくIgnitionも動かせそうです。

ros1_ignのインストール

その他のROSパッケージと干渉しないよう、念のため新しいワークスペースを作成します。

ros1_ignをダウンロードしてビルドします。

サンプルの実行

以下のlaunchファイルを実行すると緑と青の移動台車が出てきます。

rostopicを送るか、ign topicを送ることでロボットを動かすことができます。

いまのところtfがうまく取得できていないようです。分かり次第アップデートします。

まとめ

ROSConJP 2019で紹介されていたIgnitionは今後ロボットのシミュレーションに大活躍しそうな、ロボットのシミュレーションに特化したオープンソースなライブラリ群です。Gazeboが今後なくなるという噂もあるようですが、Gazeboがなくなるのではなく時間をかけてIgnitionに移行していきます。
今回は開発途中のIgnitionとROS Melodicを組み合わせて使用するサンプルをGitHubからダウンロードして使用してみました。
次回は弊社のロボットであるRaspberry Pi MouseをIgnitionで動かしてみようと思います。

続きを読む ›

Posted in Raspberry Pi Mouse
Tags: ,

Raspberry Pi Mouse 研修[5]

こんにちは。seyaです。

今回は、c++でラズベリーパイマウスのドライバへの書き込み、読み込みのプログラムを書きました。

マニュアルに載っているopen,close,writeはc++で使用できなかったので、cstdioライブラリのFILE構造体、fopen, fclose, fprintf,fscanf,fgetcを使用していきます。

ドライバへの書き込み(読み込み)は以下の順序で行いました。

  1. FILE構造体を定義する
  2. fopenで、/dev/rt~ を書き込みで開く
  3. fprintf(fgetc)で書き込み(読み込み)を行う
  4. fcloseでプログラムからファイルを閉じる

Lチカ、スイッチ入力のサンプルプログラムは以下の通りです。

sample program(lチカ、スイッチの入力)

次回やること

今後のプログラムではオブジェクト指向を取り入れていきたいと考えています。

次回以降は、周辺機能をクラスにまとめていきたいと思います。

 

続きを読む ›

Posted in Raspberry Pi Mouse


Raspberry Pi Mouse 研修[4]

今回は足立法の実装を行いました。

足立法の解説はマイクロマウスの競技に参加している方のブログや、弊社のblogのマイクロマウスのアルゴリズムについて①等にたくさんのっているので、そちらを見てみてください。

c++には、標準のライブラリでキューがあったので、キューを使用した歩数マップの更新のプログラムを書きました。

maze

足立法の次の動作を決める関数は空白にしたので、各自考えてみてください。

次の動作を決める関数を実装することでCUI上で、マウスがゴール座標に到達するまでのシミュレーションを動かすことができます。

また、mazeクラスのshow関数を使用することで壁情報の表示を行うことができ、CUI上でシミュレーションをすることもできるようにしました。

 

次回やること

ハードウェアのプログラムに戻り、周辺機器の設定プログラムを書いていきます。

 

 

 

続きを読む ›

Posted in Raspberry Pi Mouse


Raspberry Pi Mouse 研修[3]

こんにちは。seyaです。

今回は、迷路の壁情報の保存のプログラムをc++で書いてみました。

壁情報の保存の仕方は、クラシックマウスの迷路が16*16マスあることから縦、横がそれぞれ17こあるという考え方をもとに行いました。

縦、横壁の一次配列を2つ作成し、それぞれの配列の変数のビットに壁情報を保存するという方法をとりました。この方法の問題点は、プログラムをぱっとみたときにわからないということがあります。

なぜこの方法をとるかというと、マイクロマウス競技で使用されているマイコンではメモリをふんだんに使うことができないため、メモリの節約を意識したプログラムを書くことが多いです。

今回は、メモリを意識(?)してみました。

ソースコードは以下の通りです。

迷路で使用する変数を書いたヘッダファイル、マップ情報を保存するためのヘッダ、ソースコードです。

map

ここに挙げたソースコードでは、表示ができませんが、表示をすると下記の写真のようになります!次回以降に表示方法を書いていきたいと思います!

ソースコードを書いてから気づきましたが、ラズベリーパイのメモリはふんだんにあるので気にする必要がそこまでなかったような気がします。

メモリを意識しないでロボットを動かすためのソースコードをかけるのはいいですね!

 

次回やること

今回のマップ情報を使用して、マイクロマウスの迷路探索アルゴリズムでよく使用される足立法の実装を行う!

 

 

続きを読む ›

Posted in Raspberry Pi Mouse


Raspberry Pi Mouse / Cat を遠隔操作(音声通話編)

1.はじめに

こんにちは.鈴本です.
前回の記事「Raspberry Pi Mouse / Catを中継サーバー経由で遠隔操作」の続きとして
双方向音声通話機能を実装しました.

構成は前回記事と同様,

ロボット

  • Raspberry Pi Mouse / Cat
  • Ubuntu Server 16.04.5 LTS (Xenial Xerus)
  • Node.js v10.14.2

PC

  • Microsoft Windows 10 Home 1803 (64bit)
  • Google Chrome 72.0.3626.121 (Official Build) (64bit) or Firefox 65.0.2 (64 bit)

中継サーバー

  • Raspberry Pi 3 Model B
  • Ubuntu Server 16.04.5 LTS (Xenial Xerus)
  • Node.js v10.14.2

通信プロトコル

  • WebSocket

です.

また,これも前回同様ソースコードは
ソースコードを GitHub で公開しています.

どうやら,ChromeブラウザからPCのマイクへアクセスするには,
サイトがHTTPSであることが必須なようで,マイクの動作確認はFirefoxのみで行いました.

2.実装(ロボット→PC)

Node.jsの以下の2つのモジュールを利用しました.

ロボット側は

なかんじで,PC側も

なかんじ.

ロボット側ではマイク入力を, mic_input_stream のイベントを監視して取得し,WebSocketに流し,
PC側ではそれを中継サーバー経由で受け取って,Web Audio APIであるAudioContextで再生しています.

PC側のコードで,音声が途切れ途切れにならないようになっている部分は,
WebAudio+WebSocketでブラウザへの音声リアルタイムストリーミングを実装する
を参考に実装しました.

3.実装(PC→ロボット)

ラズパイでのスピーカーでの再生には,Node.jsの

モジュールを使いました.

ラズパイにRaspbianをインストールしていると,ラズパイ上のオーディオジャックが簡単につかえるのですが,
代わりにUbuntuをインストールしている環境では, /boot/config.txt を編集する必要があるようです.
(出典:How to enable sound on Raspberry Pi 3 running Ubuntu 16 –

続きを読む ›

Posted in Raspberry Pi Cat, Raspberry Pi Mouse, ブログ


Raspberry Pi Mouse 研修[2]

こんにちは。seyaです。

本日の開発環境です!

上にモニターもあります。マウスの開発環境がキーボード,マウス、モニター、本体の4つでできるのがとてもいいですね!

手順書6の通り、UI用のledを光らせようとしましたが、rtled0なんてないよとエラーを返されてしまいました。

ラズベリーパイマウスの再起動を行うと、デバイス用ドライバの再インストールが毎回必要になるようです。

起動するたびにドライバのインストールをするためのコマンド打つのが大変なのでシェルスクリプトを書きました。

  • 使用する際にはecho 数値 /dev/rt*の間に > を入れてください。(例: echo 1 > /dev/rtled0)

ターミナル上で実行することでドライバを使用できるかどうかの 確認まで自動で行うことが可能になりました。どこかでエラーがあった場合は、ターミナル上にエラーが帰ってくるので確認が簡単にできます。

ターミナル上で実行する場合は以下のコマンドを入力することで可能です。

 

また、シェルスクリプトをラズベリーパイのスタートアップに追加をすることで、わざわざ自分で実行をしなくとも起動時に自動で実行するようにするということも可能なので後日紹介したいと思います。

 

説明書の手順に戻ります。

今回の内容は以下のことを行いました。

  • led,buzzerがそれぞれ光る、音がなるかの確認
  • 距離センサの値がとれるかどうかの確認
  • ステッピングモーターが回るかどうかの確認
  • c言語,pythonを使用したサンプルコードを動かしてみる

これらすべてを順調に行うことができました!

ステッピングモーターの回るかどうかの確認において、ステッピングモーターを回す際の注意点がいくつか分かったので紹介します。

ステッピングモーターを回すためには物理スイッチ、ソフトウェアスイッチの両方をONにする必要があります。

両方をONにすることでトルクがかかるようになりますが、長時間その状態にしておくと、最大で100度まで上がってしまうことや、モーターが壊れてしまうことがあるので、使わないときには必ず両方のスイッチを切りましょう!

また、ステッピングモーターの特性上遅い速度で回すと熱を持ちやすいので、遅い速度で回し続けるときは気を付けてください。

意外な落とし穴ですが、ステッピングモーターを回す際にはラズベリーパイのマウスの本体を浮かすようにしましょう!そうしないと、状況によってはマウスが机から落ちてしまい、マシンが壊れるという最悪の事態が起きてしまう可能性が浮上します。

 

今後の予定

マイクロマウスの迷路を完走するためには大雑把に以下の内容が必要になるため、これらをひとつずつ進めていきたます。

  • ステッピングモーターを用いて指定した距離進む、超信地旋回をできるようにする
  • マイクロマウスの迷路アルゴリズムを書く
  • 迷路の探索を行うことができる
  • スラロームの実装をする
  • 最短走行を行う

 

続きを読む ›

Posted in Raspberry Pi Mouse


Raspberry Pi Mouse 研修[1]

初めまして。こんにちは。アルバイトのseyaです。

アルバイトの研修として、弊社が販売する[Raspberry Pi Mouse V2]を動かしていきます。

動作までの過程をブログにつづっていきます。

Raspberry Pi のセットアップ

Raspberry Pi Mouse V2取扱説明書の手順に沿って開発環境のセットアップを行いました。今回は、説明書の5の内容まで行います。

以下の手順で行いました。

  1. PCを用いて、ラズパイOSをMicroSDに書き込む
  2. ラズベリーパイでOSのインストールを行う。
  3. SPI機能をオンにしてGitHubからRaspberry Pi Mouseのリポジトリをインストール
  4. カーネルのバージョンの確認を行う。
  5. ラズベリーパイマウスのドライバをインストールする。

1~4までは順調に行うことができましたが、5.で問題が起きました。

ラズベリーパイにインストールされたカーネルのバージョンが4.14.98-v7+でしたが、./RaspberryPiMouse /lib/Pi2B+/内に4.14.70-v7+よりも新しいカーネルバージョンの、ドライバのディレクトリがありませんでした。

この問題の解決を行うために、ラズベリーパイのカーネルのバージョンを4.14.70-v7+にダウングレードしました。

しかし、4.14.70-v7+のディレクトリ内で

と、説明書通りのコマンドを実行しても、Segmantion faultがターミナル上に表示され、ドライバのインストールができませんでした。

カーネルのバージョンを4.14.69-v7+に再挑戦をしたところインストールに成功しました。

 

ラズベリーパイのカーネルバージョンのダウングレードの仕方を紹介します。

GitHub のラズベリーパイのカーネルの更新リポジトリのコミットの中から4.14.14.69-v7+を探し、commit のhash番号をコピーしたのち、ターミナル上で

これらのコマンドを実行をすることでできました。

 

次回やること

説明書の手順6から先をやっていきたいと思います。

続きを読む ›

Posted in Raspberry Pi Mouse


Raspberry Pi Mouse / Catを中継サーバー経由で遠隔操作

1.はじめに

こんにちは.鈴本です.
Raspberry Pi MouseとCatを遠隔操作するためのシステムを作りました.

  • 同一LANにいなくても操作できる
  • 複数台あったとしても中央集権的に管理できる

などの要求から,中継サーバーを挟んでPCから遠隔地のロボットを操作できるようにします.

2.全体像と要求

全体像は上図のような感じです.
遠隔地のLAN間でも操作できるように,PCとロボットがそれぞれ中継サーバー(ここではRaspberry Pi)につなぎに行きます.
そこでデータなどをやり取りして,遠隔操作を行おう,というものです.

要求は,

  • ロボット,操作PCは静的グローバルIPを必要としない.
  • 中継サーバー1台あれば,複数の通信セッションも開設できる.
  • データを中央で管理できる.
  • LANをまたいだ遠隔操作(NAT超え)も可能である.
  • 可能な限りリアルタイム性を追求する.

です.

3.構成
ロボット

  • Raspberry Pi Mouse / Cat
  • Ubuntu Server 16.04.5 LTS (Xenial Xerus)
  • Node.js v10.14.2
  • ROS kinetic
  • UVC対応カメラ:LOAS MCM-15W or C270 HD WEBCAM

PC

  • Microsoft Windows 10 Home 1803 (64bit)
  • Google Chrome 71.0.3578.80 (Official Build) (64bit)

中継サーバー

  • Raspberry Pi 3 Model B
  • Ubuntu Server 16.04.5 LTS (Xenial Xerus)
  • Node.js v10.14.2

通信プロトコル

  • WebSocket

のような構成にしました.

操作コンソールにはブラウザを用いて,リアルタイム性より通信プロトコルはWebSocketを採用しました.
Webを使うので,サーバーサイドとロボットサイドのコードはNode.jsで実装しています.

4.環境構築
ロボットと中継サーバーへのUbuntu Serverインストール

ロボットも中継サーバーもRaspberry Piなので,公式ページよりRaspberry Pi用のイメージファイルをダウンロードしてきて,SDカードに展開します.
ここでは Unofficial images の Raspberry Pi 3: ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz (4G image,

続きを読む ›

Posted in Raspberry Pi Cat, Raspberry Pi Mouse, ブログ


Raspberry Pi Mouseの無線LANのDHCP設定の仕方 Ubuntu編

Yukiです。久方ぶりの登場です。
2017年8月19日にGroove Xさんの会議室をお借りして、Raspberry pi Mouseを使ったROSハッカソンをしてきました。
LANの設定がちゃんとできてないという話が結構出てたので、LANの設定徒然を書いておこうと思い立ちました。

環境は、Raspberry pi 3 で、Ubuntu 16.04です

Raspberry pi mouseのubuntuは無線LANが使えない設定だというお問い合わせをよくいただきます。
質問がある場合は、ここから”New Issue”を立てて質問しましょうね。

まず、そもそも論として、外に繋げられてないみたいだという方。

$cd /etc/network
$sudo vi interfaces

を見てください。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Source interfaces
# Please check /etc/network/interfaces.d before changing this file
# as interfaces may have been defined in /etc/network/interfaces.d
# See LP: #1262951
#source /etc/network/interfaces.d/*.cfg
auto eth0
iface eth0 inet dhcp

auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/RT-WIFI.conf
wireless-power off

こんなふうになっていますか?上記の記述の中で、下記が書いてあればとりあえずDHCPが設定されるので有線LANで繋げられて外に出られるはずです。

# This file describes the network interfaces available on your system
# and how to activate them.

続きを読む ›

Posted in Raspberry Pi Mouse, Raspberry Piで学ぶROSロボット入門の補足
Tags: , , , , ,