トランスフォーマー

しばらく投稿していませんでしたがM.L.B.のKoAです.
今年のInRoF用ロボットの本体がほぼ完成しました.7号機になる今年も当然,歩行ロボットです.名前はLILIUMです.

写真ではわかりずらいですがLILIUMもこれまでと同じく脚に車輪がついています.
これによりこのロボットは車輪と歩行の両方で移動でき,分類的には脚車輪型と呼ばれる歩行ロボットになります.
今まで作ったロボットは5号機以外すべて脚車輪型だったりします.
ちなみなぜタイトルのトランスフォーマーかというと変形することで車輪移動⇔歩行移動を切り替えるからです.(写真は車輪移動時)

次回はこの歩行ロボットの変形について詳しく書こうかと思います.

AVR-GCCで浮動小数点

AVR-GCCでは浮動小数点も使えてしまいます。実際の計算はGCCが生成するコードによってソフトウエアで実行されますので、あまり使うものではありませんけどね。ところでAVR-GCCにおいてdoubleは倍精度ではありません。 by Y.O

C言語の言語仕様ではビット幅が固定の型にあるように型のサイズが決められていません。浮動小数点型においてもこれは例外ではなく、floatとdoubleも必ず4バイト、8バイトではありません。それではAVR-GCC (avr-gcc (GCC) 4.3.3) での型サイズを見てみましょう。

バイト
char 1
short 2
int 2
long 4
long long 8
double 4
float 4
long double 4

このように実はdoubleとfloatのサイズは同じになっています。floatで精度が足りないからといってdoubleにしても意味がないので注意しましょう。そもそも浮動小数点はあまり使うべきでないので、できれば固定小数点を実装しましょう。

検証に使用したコード
[c]
#include <stdint.h>
#include <stdio.h>

int main(void)
{
volatile uint8_t sizeList[] = {
sizeof(char),
sizeof(short),
sizeof(int),
sizeof(long),
sizeof(long long),
sizeof(double),
sizeof(float),
sizeof(long double),
};

volatile double a = 0.1;
volatile double b = 0.2;
volatile double c = a + b;
}
[/c]

アセンブルしたコード(avr-gcc -O0 -S hello.c -mmcu=atmega88)

[plain]
.file "hello.c"
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__CCP__ = 0x34
__tmp_reg__ = 0
__zero_reg__ = 1
.data
.type C.0.1373, @object
.size C.0.1373, 8
C.0.1373:
.byte 1
.byte 2
.byte 2
.byte 4
.byte 8
.byte 4
.byte 4
.byte 4
.text
.global main
.type main, @function
main:
push r29
push r28
in r28,__SP_L__
in r29,__SP_H__
sbiw r28,27
in __tmp_reg__,__SREG__
cli
out __SP_H__,r29
out __SREG__,__tmp_reg__
out __SP_L__,r28
/* prologue: function */
/* frame size = 27 */
movw r24,r28
adiw r24,1
std Y+24,r25
std Y+23,r24
ldi r30,lo8(C.0.1373)
ldi r31,hi8(C.0.1373)
std Y+26,r31
std Y+25,r30
ldi r31,lo8(8)
std Y+27,r31
.L2:
ldd r30,Y+25
ldd r31,Y+26
ld r0,Z
ldd r24,Y+25
ldd r25,Y+26
adiw r24,1
std Y+26,r25
std Y+25,r24
ldd r30,Y+23
ldd r31,Y+24
st Z,r0
ldd r24,Y+23
ldd r25,Y+24
adiw r24,1
std Y+24,r25
std Y+23,r24
ldd r25,Y+27
subi r25,lo8(-(-1))
std Y+27,r25
ldd r30,Y+27
tst r30
brne .L2
ldi r24,lo8(0x3dcccccd)
ldi r25,hi8(0x3dcccccd)
ldi r26,hlo8(0x3dcccccd)
ldi r27,hhi8(0x3dcccccd)
std Y+9,r24
std Y+10,r25
std Y+11,r26
std Y+12,r27
ldi r24,lo8(0x3e4ccccd)
ldi r25,hi8(0x3e4ccccd)
ldi r26,hlo8(0x3e4ccccd)
ldi r27,hhi8(0x3e4ccccd)
std Y+13,r24
std Y+14,r25
std Y+15,r26
std Y+16,r27
ldd r24,Y+9
ldd r25,Y+10
ldd r26,Y+11
ldd r27,Y+12
ldd r18,Y+13
ldd r19,Y+14
ldd r20,Y+15
ldd r21,Y+16
movw r22,r24
movw r24,r26
rcall __addsf3
movw r26,r24
movw r24,r22
std Y+17,r24
std Y+18,r25
std Y+19,r26
std Y+20,r27
/* epilogue start */
adiw r28,27
in __tmp_reg__,__SREG__
cli
out __SP_H__,r29
out __SREG__,__tmp_reg__
out __SP_L__,r28
pop r28
pop r29
ret
.size main, .-main
.global __do_copy_data
[/plain]

Windowsで画像編集

Windows付属のペイントはあまり高度なことはできません。昔から存在する化石のようなソフトでWindows 7でインターフェースが変わったようですが、もともとデモアプリケーションのような存在なのでマイクロソフトも機能を充実させるつもりもないようですね。そこでペイント代替のソフトウエアとしてPaint.NETを紹介しましょう。 by Y.O

PhotoshopやGimpのように把握しきれないほど多機能ではありませんが十分な機能をそろえています。また、Microsoftから支援を受けており、とても完成度が高いことも特徴です。GimpはもともとLinux用のソフトですので、Windowsの流儀に沿っていない部分もありますが、Paint.NETはそのようなこともないので自然に扱えると思います。

Process Hacker

Windowsのタスクマネージャーに不満はありませんか?また、何かのソフトでファイルが開かれており、うまく削除や移動ができずに悩んだことはありませんか。このような問題を解決するためのツールとしてProcess Hackerを紹介します。 by Y.O

Process Hackerはスクリーンショットにあるようにプロセスの親子関係を表示したり、詳細な状態を表示したりすることができます(画像は一部ぼかしたり削除してあります)。タスクマネージャーが供えている機能は一通りそろえており、インストール時にタスクマネージャーを置き換えてしまうこともできます。

HackerメニューからFile Handles or DLLs を選ぶと、どのハンドルをどのアプリケーションが開いているのかを確認することができます。調べたいファイル名を入れてFindを押せば調べることができます。

余談ですが、このようなことをMac OS XやLinuxでやろうとした場合にはlsofというコマンドが便利ですよ。

SAIMONとSAIMON Classic

一回製作日誌を書いて以来、製作日誌のほうをしばらく放置していましたが、たまには少し書こうと思います。さて、去年もSAIMONという名前でロボットを出したのですが、そのロボットも保存状態がよくもったいないのでInRoFに出場させようと思います。という訳で去年出した方はSAIMON Classicという名前で出します。ただ、まだ今年のSAIMONが完成していないこともありプログラマが死にそうになったら出さないかもしれません。去年とコンセプトはあまり変わらないのでプログラムも戦略部分も含め80%以上共通化させようと思ったのですが、いろいろと問題がありそうなので固定小数点演算や現在地計算など基本的な部分を残してほぼ取り替えとなりそうです。それでも30%くらいは共通化されていますけどね。by Y.O

SAIMON Classic

Mac OS Xでシリアルポート

Mac OS X対応を正式にうたったUSBシリアル変換機はとても高かったり、対応していても対応するOSのバージョンが低かったりします。ただ、中身のチップを作ってる会社はMac OS X向けのドライバを開発している場合もありますので、そのようなものを買ってくればあっさりと使えてしまう場合があります。 by Y.O
Macにシリアルポートというページでも解説されてますが、ここで使えるとされているものでも、この記事が書かれた時から状況が変わってきているものもあり、安定して使えない場合もあります。

現在、私が使っていて問題なく使えているものは2007年購入のBuffaloのSRC06USB(Amazon)です(2010年5月現在も中身は変わってないと思いますが、保証はしません)。この中身はFTDI ChipのICが入っていて、Product IDやVendor IDもFTDIのままですので、FTDIが配布しているドライバであっさりと動きます。64bit版のドライバも用意されていますので、64bitカーネルで起動している場合にも安心して使えます。さらにlibftdiなどのドライバを用いて専用のターミナルを書けば、あらかじめ用意された以外のボーレートも使えます。

おなじFTDI系としては秋月のモジュールが使えます。基板がむき出しなので扱いづらいですが、上のものよりは少し安いです。

安いUSBシリアル変換機に同じ秋月のものもありますが、Prolificのやる気がないのでドライバが久しく更新されていません。また、64bit版ドライバも用意されていません。Macはまだ64bitカーネルがデフォルトではないので必要ないですが、去年の一年生が使っていて不安定で結局私のUSBシリアル変換機を貸したのでMacの人はやめた方が無難でしょう。

ARM-00 PROTO TYPE

取りあえずアーム作ってみました。

全体的には写真のような感じです。アームと言っていますがまだ手先の部分は作っていません。

先端はこんな感じになっていて片方のギアを回転させることで2本のアームが逆向きに動く予定です。

ただこのアーム、見ればわかるとおり先端の組み立てにネジをたくさん使っており面倒であることや、色識別のためのカラーセンサー回路がスペース的に乗らない可能性があるなど、様々な問題が起こったため作りなおしたいと思います。

同じような機構で、シンプルにしたものを作れたらよいと思います。