Blog Archives

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

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

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

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

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

maze_conf.h

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: , , , , ,

Raspberry Piで学ぶROSロボット入門についての補足

yukiです。こんばんは。

apt update、apt upgradeしてwlan0が消えてしまうというご指摘をうけて、いろいろ調べながら意気揚々とサポート記事を書いていたら、ちょっと複雑そうです。
いろいろ手を尽くしてみたのですが、今のところサクッと直せる方法が出てこないため、前回までの記事は、混乱の元になりかねないので、そっ閉じしました。あしからずご了承ください。

詳細は、上田先生はじめ、みなさんのおかげでこちらにアップデートされていますので、随時確認してください。

今のところの対策は、自動アップデートを止める方法です。
イメージをhttps://wiki.ubuntu.com/ARM/RaspberryPi からダウンロードしてSDカードにddした後、すぐにC.13.1「自動アップデートの抑制」でアップデートを止める方法が今のところ最良です。

また、その後すぐに

$ sudo apt purge cloud-init
の実行をお願いいたします。

今アップデートされているOSイメージについては、検証している最中ですので、続報をお待ち下さい。
すでにupdateしちゃったよーという方は、お手数ですが、もう一回ddして上記を試してください。

コレ以外にも問題があった場合は、githubのissueを立てていただければありがたいです。
よろしくお願いします!

続きを読む ›

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


FAQ SDカードのインストールとログインはどうしたらいいですか?

yukiです。一回公開しましたが、誤情報だということが分かったので別のブログで公開しました。
そちらをご参照ください。
https://products.rt-net.jp/micromouse/archives/4001

続きを読む ›

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