Monthly Archives: August 2016

Gazeboで走るRasPiMouse その5

こんにちは。佐藤です。

前回はGazeboでまっすぐに走るRasPiMouseをコントロールすることができるようになりました。

概要

今回はセンサを取り付けてみます。さらに試験用に3×3のGazebo用のフィールドを用意して走行させてみます。

センサは実機と同様に近づけば近づくほど大きくなるような値を返すようにします。

センサの取り付け

センサを取り付けます。
実機と同様に光らせることができればかっこいいのですが、見た目にしか影響しません。
ですから今回は直方体をセンサとして取り付けることにします。
センサはレーザーレンジセンサなので返ってくる値はセンサから物体までの距離です。
raspimouse_descriptionのパッケージ内でモデルを定義します。
lightsens.urdf.xacroとして保存します。

こちらはGazebo用の設定値ファイルです。同様にしてlightsens.gazebo.xacroとして保存します。

これらを呼び出すための設定を書いていきます。
raspimouse.urdf.xacroとして保存していたものにセンサの設定を書き加えています。
センサの位置が前とサイドに向くように合わせます。

センサ値変換スクリプトの作成

先ほどまでの設定だと返ってくる値はセンサから物体までの距離なので実際のセンサと同じような値に変換する必要があります。
変換するために、実機で距離ごとに測定値を記録し、近似式を求めました。

スクリーンショット 2016-08-18 18.52.01

raspimouse_controlのパッケージの中にscriptsディレクトリを作成します。

作成led_converter.pyとして保存します。

ROSのノードが使用するメッセージ形式を定義する必要がありますので、raspimouse_control以下に”msg”ディレクトリを作成し、
raspimouse_rosパッケージの”msg”ディレクトリの”LightSensorValues.msg”をコピーしてきます。

その他CMakeLists.txtに以下の依存関係を追記しておきます。

publisherを作成した際にどのような変更を加えればよいかを知るためにはraspimouse_rosのこのコミット3d08155cを参考にしました。

このままだと毎回手動でスクリプトを実行する必要があります。Gazebo起動時に同時に起動するようlaunchファイルを書き換えます。

これで起動時に/raspimouse/lightsensorsに距離センサの情報がpublishされるようになります。
ためしにempyworldで起動してみるとセンサの値が確認できました

Screenshot from 2016-08-22 01:11:23

サンプル迷路データの作成

emptyworldやガソリンスタンドではマイクロマウスらしくないので、迷路のサンプルを作成します。
worldデータの作成もxacroのマクロを利用します。おそらくxacroファイルを直接読み込むことも可能なのだと思いますが、
launchファイルでの記述方法についての資料を見つけることができませんでした。今回はworldファイルに変換して読み込みます。

まず、壁のデータを作成します。samplemaze.wall.xacroとして保存しました。

次に壁を呼び出すxacroファイルを用意します。

そしてworldファイルに変換するスクリプトを用意し、実行します。

これで3×3の迷路が用意出来ました。

Screenshot from 2016-08-19 19:57:06

これで起動してみます。

前回紹介したvel_publisherの値を以下のように書き換えると、前進/後進、左右の超信地旋回ができます。
Gazeboで走るRasPiMouse その4 | RT MicroMouse
http://products.rt-net.jp/micromouse/archives/3348

これで簡単なシミュレーションを行うことができるようになりました。

簡単ではありますが、これで作り方の紹介兼メモは今回で終了となります。
GitHubに公開できるよう準備しています。公開したらまたブログで紹介したいと思います。

2016年9月13日追記
公開しました。
https://github.com/rt-net/raspimouse_sim
紹介記事も公開しました。
Gazeboで走るRasPiMouse その6 | RT MicroMouse
http://products.rt-net.jp/micromouse/archives/3544

 

補足

セットアップしたばかりの新しい環境だとパッケージが不足することがよくあります。

ros-control不足1

このようなエラーが出る場合は以下のパッケージのインストールで解決できます。

ros-control不足1

このようなエラーが出る場合は以下のパッケージのインストールで解決できます。

Gazeboのモデルデータ不足

このようなエラーが出て、Gazeboのウィンドウが真っ黒な場合、モデルデータが不足しています。
インターネットに接続されていれば自動的にデータをダウンロードできますので、しばらく待ってみてください。
環境によっては数分かかることもあるようです。

worldファイル変換スクリプト

worldファイルに変換するスクリプトを実行する際、zshを使っているとファイルを上書きできない場合があります。
その場合は最終行を以下のように変更したスクリプトを実行することで解決できます。

参考文献

続きを読む ›

Posted in Raspberry Pi Mouse
Tags: , , , , ,

Gazeboで走るRasPiMouse その4

こんにちは。佐藤です。

前回はGazeboでまっすぐにRasPiMouseが走ることができるようになりました。

概要

今回は制御用のコントローラを設計します。

前回動かしたモデルをもっと簡単に制御できるようにするため、publisherのスクリプトを用意します。

スクリプトの作成

raspimouse_controlのパッケージの中にscriptsディレクトリを作成します。

その中にvel_publisher.pyを作成します。

送っているコマンドは以下のコマンドとほぼ同じです。

実行できるようにするためには実行権限を与える必要があります。

キーボードのw/sで前進/後進、a/dで超信地旋回ができます。

Gazeboを起動した後、このスクリプトを別ウィンドウで実行します。

このように動かすことができました!

次回はこのセンサの話についても触れていきます。

補足
Gazebo+ROSでの二輪駆動について

今のところ、diff_drive_controllerを使用してモデルを制御しています。
しかし、実機ではそれぞれのステッピングモータに周波数を与えて動かすように制御しています。
シミュレーションモデルでも同様にするべく、jointをPositionJointInterfaceとして設定し、コントローラをposition_controllers/JointPositionControllerでモデルを作成してみました。
すると、ホイールは回転するのですが、ボディが前進しません。つまり、摩擦が働いていないのと同じ状態になっているのです。
摩擦係数の設定値がおかしいのかと考え、摩擦係数を小さくした状態でdiff_drive_controllerを使用すると、確かにホイールが空転します。

このようなホイールとボディだけのモデルを作って試してみましたが、全く変化はありませんでした。
シミュレーションモデルで試したプログラムを実機で使用する際にはdiff_drive_controllerと同様のコマンドで動かすことができるようなコントローラを用意する必要がありそうです。

参考文献

続きを読む ›

Posted in Raspberry Pi Mouse
Tags: , , , , ,

Gazeboで走るRasPiMouse その3

こんにちは。佐藤です。

前回はGazeboでRasPiMouseが動かせることを確認しました。

概要

今回は見た目を少し改良し、まっすぐに走ることができるようにします。

見た目の改良

前回まではこのように真っ白でした。
Screenshot from 2016-08-15 19:10:56

これをこのように色を付けて実物にもう少し近づけてみます。
Screenshot from 2016-08-16 17:31:26

簡単にできる方法はいくつかあります。

  • テクスチャをマッピングしたメッシュデータを用意する
  • xacroでメッシュデータにテクスチャをマッピングする
  • 色付きのメッシュデータを用意する
  • xacroでメッシュデータの色を指定する

今回はstlを用意する時点で色ごとに分割して出力し、Colladaファイルへ変換する際に色をつけます。
変換方法についてはこちらをご覧ください。
Raspberry Pi MouseのURDFモデル作成 その1 | RT MicroMouse
http://products.rt-net.jp/micromouse/archives/3168

このようにいくつかのパーツに分けて色を付けたあと、
Screenshot from 2016-08-16 17:42:19

最後にまとめてColladaファイルとしてエクスポートします。
Screenshot from 2016-08-16 17:42:38

このデータをxacroあるいはurdfで指定することで色付きのモデルができます。

ホイールの回転方向修正

前回はx軸方向へ進むコマンドを送信してもその場で旋回してしまっていました。

20160815_3

回転軸が逆なようです。
今回のモデルで軸を定義しているのではraspimouse_descriptionの中にあるrobots/raspimouse.urdf.xacroとurdf/wheel/wheel.urdf.xacroです。
これらを編集します。

編集箇所は以下のとおりです。右回りに回転するはずです。
軸の原点をロール角を+90度回転させた方の回転軸を逆向きにしました。

ちなみに、前回も紹介しましたがwheelというマクロは次のように定義されています。

このように回転軸の向きを統一することによってロボットをまっすぐ進めることができるようになりました。
20160816_2

次回はセンサと走らせるためのコマンドについて触れていきます。

補足
重心位置について

前回はInventorで慣性行列を計算し、URDFの定義に書き加えました。
重心はホイールの回転軸上ではなく、若干後ろ側に寄っています。
また、ホイールの回転軸が固定されておらず、フリーになっています。
そのため、ボディが後ろに回転しようとし、床と触れた結果ホイールが回転して前に少しずつ進んでしまうという状態です。
(早送りにしています。)
20160816_1

ボディの摩擦係数を変えてみたり、回転軸の摩擦を変えてみたりしましたが、どれもうまく行きませんでした。
ボディの摩擦係数を変えると、回転し始める際にかなり揺れます。
滑らないほど回転軸の摩擦を大きくするとcmd_vel geometry_msgs/Twistを送った際にホイールが外れてしまいました。
そこで、微少量後退するコマンドを周期的に送ったところ、全くと言っていいほど動かなくなりました。

今のところdiff_drive_controllerを使用していますが、実際のRasPiMouseとはコマンドが異なるのでros_control側で軸を固定することができるようにする必要がありそうです。

tk-WARNINGについて

と言われることがあります。
gtk2-engines-pixbufが足りていないので、以下のコマンドでインストールできます。

参考文献

続きを読む ›

Posted in Raspberry Pi Mouse
Tags: , , , , ,

Gazeboで走るRasPiMouse その2

こんにちは。佐藤です。

前回はGazeboでガソリンスタンドのモデルデータを表示して、RasPiMouse(の一部)を表示するところまで行いました。

概要

今回は慣性行列を定義し、Gazebo上で正しく表示できることを確認します。
その後、シミュレータ上で走らせてみます!

慣性行列の計算方法

Inventorでそれぞれのパーツについてきちんと質量を設定した後、アセンブリのiPropertyを参照すると慣性行列を確認することができます。
スクリーンショット 2016-08-14 23.39.55
スクリーンショット 2016-08-14 23.40.38

ちなみに、rvizで起動するためのxacroファイルを用意していた際は手動で算出していました。
Raspberry Pi MouseのURDFモデル作成 その2 | RT MicroMouse
http://products.rt-net.jp/micromouse/archives/3191

今回必要なデータに関してはすでにGitHubに公開してありますのでこちらをご参照ください。
https://github.com/rt-net/RaspberryPiMouse/tree/master/cad_data

ボディとホイールそれぞれをこのように定義しました。
(その他の詳細な部分については後ほどGitHubに公開する予定ですのでお待ちください。)

launchファイルの作成

前回作成したraspimouse_gazeboパッケージの中で作業します。

今まではガソリンスタンドを用意したあと、

spawnするためのurdfファイルを用意(更新)し、

それからspawnしていました。

正常にspawnできれば最初のtest.launchを起動した方のTerminalで次のような表示が出ています。

毎回起動するのも手間がかかりますので、新たにlaunchファイルを用意します。
今回は何もないempty_worldの中で呼び出してみたいと思います。
raspimouse_with_emptyworld.launchとして保存しました。

これで

で起動できるようになりました。
Screenshot from 2016-08-15 19:10:56

では、ros_controlを定義して、まずはチュートリアルで出てきた亀のように制御できるか確認してみます。

新しいパッケージを作成します。

confingディレクトリの中にcontroller.yamlを以下のように保存しました。

launchディレクトリの中にraspimouse_control.launchを以下のように保存しました。

最後に、raspimouse_gazeboディレクトリの中にあるlaunch/raspimouse_with_emptyworld.launchの</launch>の前に1行付け足します。

再びGazeboを起動します。

そして、コマンドを送ってみます。

20160815_3

動きました!!!
ホイールの回転方向が片方逆になってしまっていますが、無事に動かすことができました!

次回はホイールの回転方向を修正して、ros_controlについて書いていきます。

補足
collisionタグについて

linkタグの中のcollisionタグで衝突検出領域を定義することができます。
rvizでモデルを参照できるようにxacroファイルを用意していた際には未定義でしたが、Gazeboでは必要です。
Raspberry Pi MouseのURDFモデル作成 その2 | RT MicroMouse
http://products.rt-net.jp/micromouse/archives/3191

今回、ここの定義を適当に済ませてしまっていたため、ボディが浮いてしまうという困った自体に直面してしまいました。

Screenshot from 2016-08-15 18:31:00

今はコメントアウトしてあるjoint_originですが、当初はコメントアウトしてなかったのでずいぶんと変な位置に衝突検出領域が定義されていました。
片側のホイールを外した状態で重心を偏らせ、シミュレーションを行うと、非常によくわかります。

20160815_1

回転軸方向から見て明らかに円とは異なる形状の何かがあるように見えます。
meshを直接指定することもできるようでしたのでその方法もありかと思います。

参考文献

続きを読む ›

Posted in Raspberry Pi Mouse
Tags: , , , , ,

Gazeboで走るRasPiMouse その1

こんにちは。佐藤です。

Raspberry Pi Mouseと書くと思ったより文字数が多いですねー。
実はタイトルだけ前回からRasPiMouseと表記するように変更しました。

さて、前回はGazeboの使い方について紹介しました。
今回もチュートリアルとほぼ同様にしてGazebo上でロボットを呼び出します。
ついにRaspberry Pi Mouseを呼び出すときがやってきました!

Gazebo : Tutorial : Using roslaunch
http://gazebosim.org/tutorials?tut=ros_roslaunch

Gazeboを起動する際のlaunchファイルを置くためのパッケージを作ります。
_descriptionパッケージとは別のパッケージに用意するのが慣例となっているようです。

Gazebo : Tutorial : Using roslaunch より引用

実際にいくつかのロボットのモデルについて調べてみたところ、概ねパッケージをいくつかに分割している場合が多いようです。

https://github.com/PR2/pr2_common
https://github.com/yujinrobot/kobuki
https://github.com/demulab/mini_sim
https://github.com/CIR-KIT/fourth_robot_pkg

今回はraspimouse_gazeboというパッケージを作り、所定のディレクトリを作成します。

ここでチュートリアルと同じようにガソリンスタンドの環境を用意してみます。今回はhello.worldとtest.launchで保存しました。

この環境でGazeboを起動してみます。

多くの場合はガゾリンスタンドのモデルデータがないと思います。
起動すると真っ暗でなにも写っていないGazeboのウィンドウが出てきます。

このメッセージが出ている間、ダウンロードしています。起動完了するまで数分かかることがあります。

ただのガソリンスタンドが出現しました。

gazebo hello world

では、ここにRaspberry Pi Mouseを呼び出してみたいと思います!そのコマンドがこちら!!

実行すると…呼び出せました!
rpimouse hello world

しかし、問題があります。よく見ると、ホイールがありません。
spawn problem

test.launchを起動した方のTerminalで次のようなエラーが出ていました。

Raspberry Pi MouseのURDFモデル作成 その2 | RT MicroMouseで慣性行列を定義しました。
RVizで表示するだけの場合は慣性モーメントだけで慣性相乗モーメントは定義しなくても何も問題ありませんでした(未定義の場合は0として扱う)が、Gazeboではきちんと定義する必要があるようです。

今回はその1ということでGazebo上で走らせる手前まで確認を行いました。
次回は慣性モーメントの簡単な算出方法を紹介したあと、コントローラを実装し、走らせてみたいと思います!

参考文献

続きを読む ›

Posted in Raspberry Pi Mouse
Tags: , , , , ,

GazeboでRasPiMouseのチュートリアル

こんにちは!佐藤です。

前回はRaspberry Pi MouseをROSを使って動かすためのコマンドを確認しました。

Raspberry Pi Mouseから少し話がそれてしまいますが、今回はGazeboでURDFを使う方法をGazeboのチュートリアルに沿って進めていきます。

Gazebo : Tutorial : URDF in Gazebo
http://gazebosim.org/tutorials/?tut=ros_urdf#Tutorial:UsingaURDFinGazebo

Gazeboインストール手順
前提

執筆に用いたマシンは Ubuntu Desktop 14.04 LTS 64bitがインストールされたdynabook R73/W4Mです。
ROSのバージョンはIndigoを使用しています。

ROSのインストールについてはこちらをご覧ください。
ROSを使用したCRANE+の動かし方 その2 | RT Robot Shop Blog
http://www.rt-shop.jp/blog/archives/6528

ROSはインストールできている状態で作業をしていきます。

Gazeboのインストール

先ほど紹介したRT Robot Shop Blogに書いてあるとおり、以下のコマンドでインストールした場合にはGazebo2.2.3がインストールされています。

それ以外の方法でインストールしてある場合も再度上記のコマンドを実行すれば差分のパッケージをインストールすることができます。

サンプルデータの用意

以下のGazeboサンプルデータを今回は使用します。
ros-simulation/gazebo_ros_demos: Example robots and code for interfacing Gazebo with ROS
https://github.com/ros-simulation/gazebo_ros_demos

ちなみに、ここで出てくるロボットの名称であるRRBotはRevolute-Revolute Manipulator Robotだそうです。

最終的に以下のようにBuilt target gazebo_tutorialsと出力されれば無事にコンパイルできています。

次のコマンドでrvizを起動します。

rviz rrbot

リンクを動かすことが出来ました。

とエラーが出ることがあります。その際は以下のようにlibcanberra-gtk-moduleをインストールすれば良いようです。

次はGazeboを起動します。

リンクが振り子のように動く様子を確認できました。

rrbot gazebo

Gazeboを起動する際は、先ほどとは異なりrrbot_descriptionではなく、rrbot_gazeboにあるrrbot_world.launchを起動しました。
ロボットの名称をMYROBOTとしたとき、モデルの定義をMYROBOT_descriptionに、Gazeboの定義をMYROBOT_gazeboに、コントローラの定義をMYROBOT_controllerに書きます。
第1回や第2回では説明なしにraspimouse_descriptionという名前のパッケージを作成しました。実はこのルールに基づいて作成をしていました。
名称やファイルの配置方法はこちらに説明があります。

Gazebo : Tutorial : Using roslaunch
http://gazebosim.org/tutorials?tut=ros_roslaunch#CreatingyourownGazeboROSPackage

では、このRRBotを操作してみます。

再びGazeboを起動し、コントローラも一緒に起動します。同じTerminalでは開けませんので別のTerminalを起動してください。

無事にrrbot_gazeboもrrbot_controlも起動することができれば、Gazebo上のRRBotが中途半端な角度で静止します。

rrbot freeze

静止しなかった場合、おそらくrrbot_control.launchをroslaunchした方のTerminalに次のようなエラーが出ています。

正常な場合はStarted controllersが空白にはなりませんのでそこで判断することもできます。

このエラーはコントローラが正常に読み込めなかった場合に出るエラーでパッケージが一部不足していることが原因となっています。
次のコマンドで不足しているパッケージをインストールすることができます。

ここで、更に別のTerminalを開いてrostopicをpublishします。

joint2は先端に近い方の関節なので0を指定すると延ばすことができます。
ここで指定する値の単位はラジアンです。
gazebo rrbot joint2-0

さて、大まかにではありますがGazeboとGazeboの使い方について説明しました。
これでようやく作成したURDFモデルに不足している情報を書き加え、コントローラパッケージを追加する準備が整いました。
いまのところ表示することしかできていませんが、動く様子が見られるようになると思うとワクワクしてきます!
raspimouse rviz

まだ準備中ですが、最終的にはRaspberry Pi Mouseも同じようにGitHubに公開する予定です。

次回からは公開するファイルをどんどん用意し、Gazebo上で動かせるようにしていきます。

補足
Gazeboとは

オープンソースの3Dロボットシミュレータです。ライセンスはApacheライセンスです。
Mercurialで管理されているのでBitbucketで公開されています。
https://bitbucket.org/osrf/gazebo

センサのシミュレーションを行うこともできます。つまり、実機を用意しなくてもロボットの挙動を確認することができるようになるということです。

机の上にロボット(Kobuki)をおいたシミュレーションをしてみた様子です。
gazebo

バージョン1.9以上のGazeboでは物理エンジンにOpen Dynamics Engine(ODE)が採用されています。
その他にもバージョン3.0以上ではBullet/Simbody/DARTを選ぶことができます。
今回使用するのはODEです。

ODEについては金沢工業大学の出村先生のページが詳しいです。
demura.net | 1.

続きを読む ›

Posted in Raspberry Pi Mouse
Tags: , , , ,

Raspberry Pi MouseのROSコマンド確認

こんにちは!佐藤です。
アールティでブログを書くのにもだんだん慣れてきました。

前回はxacroファイルでモデルの形だけではなく重さなど詳細情報も含めて定義しました。
これから先は実際に動かす方法を踏まえつつ各種ファイルを用意していく必要があります。

概要

今回は実際のraspimouseと同様に操作するためのコマンドの確認を行っていきます。

実機が動くことは大変嬉しいことですが、やはり準備が大変です。
特にROSのインストールに関してはある程度慣れていても多少時間がかかってしまいます。
そこで、シミュレータで簡単に動作確認を行った上で、実機にスムーズに移行できるようにするためにシミュレーション用のモデルの作成を行っています。

どのような方法で制御すればよいのかを確認し、次回以降それらをシミュレーションモデルに実装できるように準備を行います。

ROSではノード(ROSパッケージ内の実行ファイル)に対してトピック(ノード同士でやりとりをするデータや指令)を送受信します。

ROS_CRANE_6_1
ROSを使用したCRANE+の動かし方 その6 | RT Robot Shop Blog より画像引用

またまた手前味噌で恐縮ですが、ノードとトピックについてもRT SHOP BLOGの方に詳しく書かれていますのでそちらをご参照ください。

ROSを使用したCRANE+の動かし方 その6 | RT Robot Shop Blog
http://www.rt-shop.jp/blog/archives/6664

準備

操作はROSがインストールされたUbuntuのPCを使用します。
今回はUbuntu 14.04 64bitをインストールしたdynabook R73/W4Mを使用しています。

Raspberry Pi MouseにもROSがインストールされた状態で使用します。
今回はUbuntu 14.04をインストールしたRaspberry Pi 2 Model Bを使用します。

ROSのインストール方法は様々なところに書かれていますのでその一部をご紹介します。

ROS Indigo の Ubuntu へのインストール – ROS.org
http://wiki.ros.org/ja/indigo/Installation/Ubuntu
Ubuntu 14.04 server用のROS一撃インストールシェルスクリプト –

続きを読む ›

Posted in Raspberry Pi Mouse
Tags: , , ,

Pi:Co Classic Ver3 改造例(4)

Pi:Co Classic Ver3 改造例(3)で7セグの点灯の確認をしました。今回は、UARTからのデータを7セグに点灯させます。
まず、仕様を見直すと
・UARTは割り込みを使用し、割り込みが入ったらデータを更新をする。
・7セグのデータはシフトレジスタ形式にする。
・7セグの繰り替えは、3msごとに切り替える。main文の中でwhileでまわす。
としか書いていません。つまり、UARTのデータはバイナリなのかアスキーなのかわからない仕様になります。つまり、その仕様ではプログラムが書けないことに気づきます。仕様がないなら、仕様を作ればよいので、改めて仕様を更新します。
・UARTは割り込みを使用し、割り込みが入ったらデータを更新をする。
・UARTの通信は38400bps、8bit、パリティ無し、stop 1bit、調歩同期、受信のみとする。
・UARTのデータ形式は、アスキーとする。
・7セグのデータはシフトレジスタ形式にする。
・7セグの繰り替えは、3msごとに切り替える。main文の中でwhileでまわす。
ここまでUARTの仕様が具体的になると仕様通りにプログラミングするだけなので何をすればわからないということがなくなります。
データの形式をアスキーにしたのは、TeraTermなどのターミナルに送るデータと同じにした方が、PiCo側のデータ送信のプログラムが簡単になります。PiCo側の送信はPrintf(“123″)と送れば、PIC側に”123″の文字を送ることができます。
以下がPICのUARTの設定プログラムです。

PIC16F687のマニュアルをみると、調歩同期(Asynchronous)で設定する場合、FOSC=8MHzでは、SYNC=0、BRG16=1、BRGH=1でないとエラー率が高く使えないようです。ここから、1行目のBRG16が”1″、5行目のBRGHが”1″、6行目のSYNCが”0″である理由です。これと、38400bpsからSPBRGの値を決定することができます。
Baud Rate= FOSC/(4×(n+1))からn=8000000/38400/4-1=50.81となりSPBRGは51となります。これが4行目の値の理由です。あとは、仕様からデータは8bitなので、8bitデータフォーマットに設定するのがRX9レジスタです。8bitにするには”0″を設定します。これが、2行目の値の理由です。
調歩同期で受信(Asynchronous Receiver)をコントロールするには、
・CREN=1
・SYNC=0
・SPEN=1
を設定するようにと記載されています。これが6~8行目の値の理由です。これでUARTの受信の設定は終わりです。残りはUARTの割り込みの設定になります(9~11行目)。UARTの割り込みに関してもマニュアルに記載されており、
・PIE1レジスタのRCIE割り込みをイネーブルにする
・INTCONレジスタのPEIE周辺割り込みをイネーブルにする。
・INTCONレジスタのGIE汎用割り込みをイネーブルにする。
となっています。

UARTの割り込み内の処理は、データのシフトをするだけです。

使用したソフトでは、interruptという関数名の前に付けると割り込み関数になります。Inter(void)の関数名はなんでもよいです。PICの割り込みは割り込みの種類ごとに割り込み関数がなく、一つの割り込み関数内でフラグを見て割り込み処理をする仕様のようです。2行目のようにUARTの受信割り込みフラグを確認して、割り込み処理をしています。今回の割り込み処理はデータのシフトのみです。3行目から5行目がそれに当たります。シフトするデータが多い場合、for文でまわした方が記述量が少なく間違いが少なくなります。3個場合は、for文で書くよりベタ書きの方がすっきりします。以下がfor文のサンプル例です。

PIC16F687の受信フラグRCIFはソフトウェアから書き込みができない仕様になっています。すべてハードウェア側で管理されていて、RCIFのフラグをクリアするには、RCREGを読み込む必要があります。

最後に、受信データを7セグに送るデータの作成です。受信データはアスキー形式で送られてきます。そのデータを7セグのカソード制御に使用すると思いもよらない表示になります。つまり、アスキーデータを7セグのカソード制御データに変換する必要があります。簡単に計算式でかけるなら苦労はしないのですが、簡単に計算式が作れないため、if文または、swith文で記述します。

このままでも使える状態なのですか、上記のプログラムに0~9以外に” “(スペース)が入っています。これは、PDCAのCheckのところで、3桁の数字を表示することができるようになったが、一つ前のデータが残像として表示されることが分かり、改善として一度クリアしてからデータを書き込むようにしました。これがPDCAのActionです。

これでPi:Co Classic Ver3 改造例 7セグ編は終了になります。

続きを読む ›

Posted in 技術情報


Raspberry Pi MouseのURDFモデル作成 その2

こんにちは!佐藤です。

今回は前回の続きでURDFのモデルの作成を行っていきます。

前回はとりあえず動かすことを目的としてパッケージを用意して、URDFを記述するところまで行いました。

URDFファイルについて

はじめに記述したURDFファイルの中身の説明をしたいと思います。
手前味噌で恐縮ですが、データ構造等はRT SHOP BLOGに詳しく書かれていますのでそちらをご参照ください!

ROSを使用したCRANE+の動かし方 その8 | RT Robot Shop Blog
http://www.rt-shop.jp/blog/archives/6711

前回記述したファイルを少し改良したものがこちらです。
本体の底面をグローバル座標の原点に設定していましたが、実際にはボディが床から1.85[mm]浮いています。
原点をbase_footprintとし、Z軸方向に0.00185[m]ずらした座標にbase_bodyをセットします。
(前回のエントリも修正いたしました。)

<robot name=”raspimouse”>
<link name=”base_footprint”/>

<joint name=”base_joint” type=”fixed”>
<origin xyz=”0 0 0.00185″/>
<parent link=”base_footprint”/>
<child link=”base_body”/>
</joint>

<link name=”base_body”>
<visual>
<geometry>
<mesh filename=”package://raspimouse_description/meshes/dae/base/RasPiMouse_base.dae”/>
</geometry>
</visual>
</link>

<joint name=”left-wheel_joint” type=”continuous”>
<origin xyz=”0 0.0425 0.02215″ rpy=”-1.57 0 0″/>
<axis xyz=”0 0 1″/>
<parent link=”base_body”/>
<child link=”left-wheel”/>
</joint>

<link name=”left-wheel”>
<visual>
<geometry>
<mesh filename=”package://raspimouse_description/meshes/dae/wheel/RasPiMouse_wheel.dae”/>
</geometry>
</visual>
</link>

<joint name=”right-wheel_joint” type=”continuous”>
<origin xyz=”0 -0.0425 0.02215″ rpy=”1.57 0 0″/>
<axis xyz=”0 0 1″/>

続きを読む ›

Posted in Raspberry Pi Mouse


Raspberry Pi MouseのURDFモデル作成 その1

はじめまして。この夏、インターンシップでアールティのお仕事のお手伝いをしています佐藤です。

Raspberry Pi MouseのURDFモデルの作成をし、Gazeboでシミュレーションを行うところまで行っていきたいと思います。

ROSを使うことのメリットや具体的な初期設定方法は過去に長谷川さんがRT ROBOT SHOPの方にエントリを書いていますのでそちらをご覧ください!
ROSを使用したCRANE+の動かし方 その1 | RT Robot Shop Blog
http://www.rt-shop.jp/blog/archives/6419

URDFモデルについての説明はこちらをご覧ください!
ROSを使用したCRANE+の動かし方 その8 | RT Robot Shop Blog
http://www.rt-shop.jp/blog/archives/6711

Gazeboはロボットのシミュレータです。詳しくは実際に使用する際にまた詳しく説明をしたいと思います。
http://gazebosim.org/tutorials?tut=ros_overview

今日は初日ということで、モデルを作成します。

概要

バラバラに作ったパーツが組み上がり、ホイールを回転させるところまで行います。

  • STLデータの作成
  • Colladaファイルへの変換
  • URDFモデルの作成

開発環境
STLデータの作成

PC:dynabook R73/W4M
OS:Windows10 64bit
使用ソフトウェア:Autodesk Inventor 2016

URDFモデルの作成

PC:dynabook R73/W4M
OS:GNU/Linux Ubuntu14.04
使用ソフトウェア:Blender 2.71、ROS Indigo

STLデータの作成

公開されているRasPiMouse.stpはすべてのパーツを組み立てた状態なので、ホイールとボディに分割します。

STLデータの作成1

分割したあと、それぞれをSTLファイルとして保存するのですが、ここで注意しなければならないことがあります。

通常はミリメートル基準で設計していることが多いと思います。しかし、URDFではメートル基準で大きさが定義されているのでメートルに変換してから出力しておきます。

(シミュレータで読み込む際に倍率を変換する方法も有効ですが、今回は予め変換しておきます。)

STLデータ作成2

編集した際にはホイールを駆動する軸の位置が原点から見てどの位置にあるのかも測定しておくと、あとで楽です。

STLデータ作成3

Colladaファイルへの変換

ここからの作業はUbuntuで行います。
この工程は以下のサイトを参考に行いました。

Gazebo + ROS で自分だけのロボットをつくる 3.URDFファイルをつくる- Qiita
http://qiita.com/RyodoTanaka/items/174e82f06b10f9885265

Blenderを起動し、File ->

続きを読む ›

Posted in Raspberry Pi Mouse