Posts Tagged 車
その後のラジコン
すっかりブログを書くのを忘れてました。
本日返信がついたので思い出した次第です。
あれから、ラジコンはサーバーに繋いだXBeeを介し、flashやjava applet から操作が可能となりました。
構成図はこんな感じです。先日社内のプレゼンで使った資料の流用になります。
Flashから操作できる=Wiiのブラウザからも操作が出来る!。。はずです。
カメラを搭載していないので遠隔から操作は出来ません。今後の課題ですね。
Linuxを搭載するように考えてましたが、消費電力が大きいのと、組み込みLinuxは高価なこともあり、搭載は諦めました。
今後は社内のサービスに何らかの形で技術提供できればと考えております。
会社で走らせました
今日は会社にラジコンを持ち込みました。
人生において会社のデスクにラジコン置く機会は幾つあるだろう。。
今回はLinux抜きでXBeeで通信するalpha版です。
beta版ではネットワークを通じサーバーを通じて操作。
正式版ではお茶の間のWiiから操作を目指します(いつになることか
Linux版は現在調整中です。走行するには解決しないといけない問題が幾つかあります。
操縦はWiiリモコンのBlueToothをMacのBlueToothに繋いでます。
MacからラジコンへはXBeeでシリアル通信をしてます。
ラジコンの実装としては、Arduinoにラジコンのバッテリーを繋ぎ、5Vを制御用、VINをモーター用に電源を回しました。
今回、モータードライバー(TB6612FNG)を使い前進後進を可能にしました。
TB6612FNGはネットに解説ページが無くて配線に悩みましたが、解れば非常に扱いやすい子です。
では、会社で撮った動画をどうぞ!!※撮影禁止区域は映っていないはず。。
趣味で作ったラジコンを会社に持ち込んだりする、こんな私のいるソリューション部ですが、現在人材募集中です。たぶん10月いっぱい。
注) ラジコンは作りません
我こそはと思う方はお問い合わせください。なお、WEB開発経験のある経験者でお願いします。
ネットワークラジコンをコントロール
昨晩Macからネットワークを経由し、ラジコン(組み込みLinuxに繋がったArduino)を操作できました。
ネットワークからArduinoを操作するのに、「Serial Proxy」を使いました。
「Serial Proxy」を使うことで、ストリームからシリアルの制御が可能となります。
Linuxへのインストールは簡単
- Arduino公式サイトのダウンロードページの一番下にある「Serial Proxy」のソース版をダウンロードhttp://www.arduino.cc/en/Main/Software
- make
- serproxy.cfgを設定。comm_baud=9600、serial_device1=/dev/ttyUSB0に設定
- ./serproxy を実行
あとはProcessingのコードをストリーム用に修正。
以下は実際に利用したWiiハンドルからネットワーク越しにラジコンを操作するコードです。
# ハンドル周りに角度変更後の値から±5~10度の遊びを加えると操作しやすくなります(たぶん
import lll.wrj4P5.*;
import lll.Loc.*;
import processing.net.*;
float i = 0.0;
float angle = 0.0;
int kakudo = 0;
int old_kakudo = 0;
Wrj4P5 wii;
LinkedList p = new LinkedList();
Client client;
void setup() {
size(300,300,P3D);
wii=new Wrj4P5(this).connect();
client = new Client(this, “10.0.2.2”, 5331);
smooth();
rectMode(CENTER);
}
void draw() {
if (wii.isConnecting()) return;
stroke(32);
fill(255);
ellipse(width/2, height/2, width/1.6, width/1.6);
translate(width/2,height/2);
rotate( atan2(wii.rimokon.sensed.y , wii.rimokon.sensed.x ) );
fill(0);
rect(0,0,width/2,height/7);
angle = atan2(wii.rimokon.sensed.y , wii.rimokon.sensed.x ) * 180 / PI;
if (angle > 0) {
kakudo = int(angle) -90;
kakudo = 180 – kakudo;
}
if (angle < 0) {
kakudo = int(angle) * -1 -90;
}
kakudo = int(kakudo * 0.1) * 10;
if (kakudo >= 65 && kakudo <= 115) kakudo = 90;
if (kakudo >= 115 && kakudo <= 135) kakudo = 115;
if (kakudo >= 135) kakudo = 135;
if (kakudo >= 45 && kakudo <= 65) kakudo = 65;
if (kakudo <= 45) kakudo = 45;
if (old_kakudo != kakudo){
old_kakudo = kakudo;
client.write(str(kakudo) + “sn”);
println(client.read());
}
}
void buttonPressed(RimokonEvent evt,int rid){
if (evt.wasPressed(evt.TWO)) {
client.write(“255wn”);
}
if (evt.wasPressed(evt.ONE)) {
client.write(“150wn”);
}
}
void buttonReleased(RimokonEvent evt,int rid){
if (evt.wasReleased(evt.TWO)) {
client.write(“0wn”);
}
if (evt.wasReleased(evt.ONE)) {
client.write(“0wn”);
}
}
以上です。
「Serial Proxy」を使うとFlashなどからもArduinoの操作が可能となります。何が出来るか想像するだけでご飯が3杯は食べれます。もっと?
Arduinoを始めてからここまで2週間かかりました。Amazonの商品発送が9/1なので間違いないです。
平日は仕事しながら家で開発してましたので結構疲れました。
次回はラジコンを操作している動画のアップを予定してます。 # Serial Proxyとの通信に不具合があるので調整中です。
おまけ:Processing 1.0.7 を利用することでMacの64bitでもwiiリモコンを操作できました。
サーボのコントロール
昨夜は遅くまでラジコンに実装予定の組み込みLinuxを触ってました。
組み込みLinuxのファーストステップとして、シリアル接続が前提となるのですが、RS-232シリアルケーブルがそのまま繋がると思っていましたら、組み込みのRS-232 は10pin だったのです!
9pinのRS-232 ケーブルは用意してたのですが、これには困りました。
実際使われるpinはTX/RX、GNDと3本のケーブルのみでしたので、ピンを直刺しすることで対応できました。
また、この話は後日まとめてから書きます。
今日はサーボの制御について書きます。
サーボの制御はArduinoというイタリア生まれのマイコンで行っています。
普通の基盤だと決まったことしか出来ませんが、Arduinoは普通の基盤と違い配線の仕方と、プログラム制御で様々なことが出来ます。
サーボのコントロール方法は、パルス幅の信号長で角度を制御します。
実際はサーボ向けにライブラリがあり、角度を指定するだけで制御が行えます。
気をつける点としては、ラジコンのシャーシの稼動域よりもサーボの稼動域が広いことです。
サーボの稼動域がシャーシの稼動域を超えるとサーボが負荷で嫌な音を立てて潰れます。
実際に潰しましたので間違いないです!
なので先にサーボを取り外し、ラジコンに付属のプロポと同じ稼動域であるか、確認をオススメします。
以下はサーボと前後のモーターをシリアル通信で制御するコードです。
Arduinoでは短いコードで簡潔に書けます。
よろしければ参考ください。
#include
#define servoPin 9
#define Motor 3
Servo myservo;
void setup()
{
pinMode(Motor,OUTPUT);
myservo.attach(servoPin);
Serial.begin(9600);
Serial.println(“Ready”);
}
void loop() {
static int v = 0;
if ( Serial.available() > 0) {
char ch = Serial.read();
switch(ch) {
case ‘0’…’9′:
v = v * 10 + ch – ‘0’;
break;
case ‘s’:
if (v <= 45) v = 45;
if (v >= 135) v = 135;
myservo.write(v);
Serial.print(v);
Serial.println(‘s’);
v = 0;
break;
case ‘w’:
if (v <= 0) v = 0;
if (v >= 255) v = 255;
analogWrite(Motor,v);
Serial.print(v);
Serial.println(‘w’);
v = 0;
break;
}
}
}
以下は簡易な回路図のつもりです。
電源は外部電源を利用してます。外部電源はvinのpinから電源を引きます。
回路図に1点間違いがありました。
モーターからのワイヤはモスの真ん中にさします。モスに繋がるマイナス電源は端にさします。
パソコンからラジコンを操作
はじめまして。ラボに初参加のinfoaliveのo2です。
時々書かせていただきますのでお見知りおきください。
普段はAMP(Apache,MySQL,PHP) で開発してますが、趣味でマイコンの制御を始めましたので、マイコンの事を書かせていただきます。
マイコンは1週間前まで触ったことすらなかったのですが、唐突にパソコンからラジコンの制御がしたくなり始めました。
きっかけはJoker Racerを見て、これは面白い是非やってみようと思った次第です。
Joker Racerはインターネットを通じて実物のラジコンを操作するサービスです。説明終わり。
では早速、インターネットを通じてラジコンを操作するにはどうすればいいかを考えます。
ラジコンをパソコンから操作するにはマイコンをパソコンに繋げば出来そうです。
マイコンが制御するのは左右に動作するサーボモーターと、前後の動作をするモーターの2つを制御することになります。
ラジコンに直接パソコンのような大きなものは乗りませんので、組み込み系に使われるARMのLinuxを利用します。
LinuxにはWEBカメラと無線LANを積めば遠隔からも操作ができますね。
ラジコンのハンドリングはキーボードで操作するのは面白くないのでWiiリモコンを利用することにします。
現段階では、パソコンにマイコンを繋いだ状態でラジコンの制御が出来るところまで完成してます。
詳しくは追々書くとしまして、Youtubeにアップした動画をどうぞ!
最近のコメント