FC2ブログ

爪車

Ubuntu 20.04 をインストールしました。
ついでに、GCC 10 も入れました。

ucnoid

Choreonoidの運動学関連のライブラリを抜き出してheader-only化したものを公開しました。
Emscriptenで利用しやすくしました。
https://github.com/tsumehashi/ucnoid

Choreonoid 1.7.0 をベースにして、cnoidのBodyとUtilの一部を抜き出したものです。
C++17必須で、他にはEigenに依存しています。

主な変更点
・*.cppファイルを*.cpp.hにしてヘッダファイルからインクルード
・using namespace xxx を使わないように修正
・名前空間を namespace cnoid {} から namespace cnoid { inline namespace ucnoid {}} に変更
・static 変数を inline 変数に修正
・boostに依存していた部分は、標準ライブラリに置き換えおよび非依存に無理やり修正
・gettext、fmtlibに依存しないように無理やり修正

今月は進捗なし。

来年もサーボたくさんつくらないと。

ロボットの脚を入手しました。

20190928.jpg

つくるものを世の中に出していこうと思うので、ドメインを取得しました。
一応、.comも取得しておきました。

部品が届かないので、基板の実装が出来ない…

3D描写ライブラリを公開しました。

ロボット開発に用いていた3D描写ライブラリをGitHubで公開しました。

いまのところ、Ubuntu 18.04でのみビルド&動作確認をしています。

ScreenshotSimpleDemo.png 

emscriptenでもビルドできるので、Webブラウザで動かせます。
20190406.png

暇なときに、サンプルやドキュメントを追加していきたいと思います。

今月は進捗なし。

磁気シールド

リング型の磁石と磁気式エンコーダを組み合わせて、減速機の減速後の回転角度を直接計測しているのですが、どうもモータの磁石の影響をうけてエンコーダの値が変動してたので、磁気シールドでモータの磁力を遮蔽してみました。
20181102_2.jpg
20181102_1.jpg
出力軸にリング型の磁石を取り付けていて、ケース側のエンコーダで計測するようにしています。

試してみたのは、磁気シールドシート(日立金属のMS-FR 470-100M-T0、エコロガのMS5000M)です。(MS-FR 470-100M-T0を切り売りしているのが、エコロガのMS5000M)
20190210_1.jpg

モータを手で回した時のエンコーダ(14bit)の出力値です。
エンコーダ用磁石は固定しているので、出力値は変動しないのが望ましい状態での計測。
20190210_2.png
ちゃんとした計測ではないのであくまで参考程度ですが、シートを複数枚重ねるとはっきりと磁気遮蔽の効果がみられます。
また、磁気シールドシート自体も磁石にくっつく素材なので、エンコーダにシールドを近づけると、エンコーダの値が変動します。

最終的には、磁気シールドシートを4枚重ねてモータと減速機の間に挟み込むようにしました。 
20199212_1.jpg
20190212_2.jpg

出力軸のエンコーダ出力値。(モータほぼ一定の速度で回転。)
エンコーダがoff-axis配置なので、非線形な値になっています。
20190212_3.png
シート入れる前


20190212_4.png
シート4枚入れた後

エンコーダの値のがたつきが多少改善されました。

本来だと、この出力軸のエンコーダの値をそのまま減速後の回転角度として使用できればよいのですが、off-axis配置で非線形なのと、多少の値のがたつきがあるため、エンコーダの値から一意に出力の回転角度を特定できませんでした。
そのため、出力軸のエンコーダの値とモータ側のエンコーダの値を用いて角度を求めるようにしました。

いろいろ方法はあると思いますが、今のところ以下の方法で回転角度を求めています。
出力軸14bitの上位10bitとモータ側14bitの上位4bitを組み合わせた14bit長のindexを持つテーブルに事前に求めた角度計算用の値を入れておいて、実行時はその値をテーブル引きして角度を求める。
index = (0xFF0 & reducer_14bit) | (motor_14bit >> 10)
angle_14bit = (0x3FFF * rotation_table[index] + motor_14bit) / reduction_ratio




ブートローダ

RS485経由でファームウェアのアップデートができるようにブートローダを作りました。
STM32にはもともと組み込みのブートローダがあるのですが、RS485ドライバ送受信切り替えのためのDriverEnable信号が操作できないので自前で実装しました。

ROMをブートローダとメインのプログラムとブート情報を保存する領域に分けて、ブートローダはブート情報領域を読んで、メインプログラムの情報が書き込まれていれば、メインプログラムを起動。
ブートローダでのファームアップデートは、ビルドしたメインプログラムのバイナリの先頭にブート情報をくっつけて、STM32CubeProgrammer経由でFLASH書き換えするようにしました。
(ブートローダのファーム書き換えプロトコルはSTMのアプリケーションノートAN3155をもとに実装)

ブート情報は、ブート情報の識別子としてのマジックナンバー(8byte)と、メインプログラムのサイズ(4byte)、チェックサム(CRC32)(4byte)、ブート情報のチェックサム(CRC32)(4byte)で構成。

ROMの配置はいまのところこんな感じです。(RAMは共用)(STM32L432KB)
FLASH_BOOT   (rx)  : ORIGIN = 0x8000000,  LENGTH =  18K
FLASH_INFO   (rx)  : ORIGIN = 0x8004800,  LENGTH =   2K
FLASH_MAIN   (rx)  : ORIGIN = 0x8005000,  LENGTH = 100K
FLASH_DATA   (rx)  : ORIGIN = 0x801E000,  LENGTH =   8K

メインのプログラム起動中にファームアップデートする場合は、ブート情報の領域を消去してからリセットし、ブートローダを起動するようにしてそこからアップデートするようにしています。

来年はサーボをたくさん作らないと。

URDFを編集するエディタを作ってみました。
WEBブラウザで動きます。
https://tsumehashi.github.io/urdfblocks/



GoogleのBlocklyとThree.jsを使っています。

GitHubでコード公開しています。(MIT License)
https://github.com/tsumehashi/urdfblocks

Twitterはじめました。
https://twitter.com/tsumehashi

今月は特になし

3Dプリンター買いました。

オリジナルマインドのKitMill AST200を購入しました。

国際ロボット展に行きました。

ヒト型ロボット 192

あまり進捗がないので、載せていなかったロボットの写真を公開します。
一年以上前のものです。既に分解されています。



20170603-2.jpg

AliExpressで中国から卓上リフロー炉T962を買いました。

基板設計していたら、4月分の更新を忘れてしまいました。

HoloLens買いました。

切削後の油べたべたの洗浄のために、超音波洗浄器を買ってみました。
シチズン 超音波洗浄器 SWT710
結構良い感じです。

ROBO-ONE初観戦。
とても面白かったです。

そのうち出場してみたいです。

今月は進捗無。

大量の荷物を送るときは、ヤマト便が便利。

SVG描画

SVGをポリゴンとして描画
nanosvgでパースしてpoly2triで三角ポリゴンに分割
パス単位でマウスピッキング可

Screenshot- 20160630
微妙に細部がおかしい

座標軸の色

座標軸と色の組み合せが、(X:赤, Y:青, Z:緑)という異端な組み合わせだったので修正。


修正前 (X:赤, Y:青, Z:緑)

Screenshot-20160531-2.png
修正後 (X:赤, Y:緑, Z:青)

(X:赤, Y:青, Z:緑)だったのは、(前:赤, 横:青, 上:緑)の組み合わせが個人的にしっくりしていたからという理由です。

来年から本気出す。

3D描画ライブラリ公開

ロボット開発に使用している3D描画ライブラリをGitHubで公開しました。
OpenGLのバックエンドとして、QtOpenGLとGLFWに対応しています。

TinyGraphicsLibrary
https://github.com/tsumeguruma/TinyGraphicsLibrary

Screenshot-20140216.png

まだまだ不完全です。

Top|Next »

HOME

tsumehashi

Author:tsumehashi
FC2ブログへようこそ!

05 | 2020/06 | 07
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 - - - -