<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>infoalive labs &#187; Linux</title>
	<atom:link href="http://labs.infoalive.com/tag/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://labs.infoalive.com</link>
	<description>プロダクトの紹介とTipsのまとめサイト</description>
	<lastBuildDate>Fri, 04 Nov 2011 10:15:41 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>その後のラジコン</title>
		<link>http://labs.infoalive.com/tips/139</link>
		<comments>http://labs.infoalive.com/tips/139#comments</comments>
		<pubDate>Fri, 30 Oct 2009 08:20:22 +0000</pubDate>
		<dc:creator>o2</dc:creator>
				<category><![CDATA[tips]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[wii]]></category>
		<category><![CDATA[XBee]]></category>
		<category><![CDATA[ラジコン]]></category>
		<category><![CDATA[車]]></category>

		<guid isPermaLink="false">http://labs.infoalive.com/?p=139</guid>
		<description><![CDATA[すっかりブログを書くのを忘れてました。 本日返信がついたので思い出した次第です。 あれから、ラジコンはサーバーに繋いだXBeeを介し、flashやjava applet から操作が可能となりました。 構成図はこんな感じで [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Flabs.infoalive.com%2Ftips%2F139"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Flabs.infoalive.com%2Ftips%2F139&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>すっかりブログを書くのを忘れてました。</p>
<p>本日返信がついたので思い出した次第です。</p>
<p>あれから、ラジコンはサーバーに繋いだXBeeを介し、flashやjava applet から操作が可能となりました。</p>
<p>構成図はこんな感じです。先日社内のプレゼンで使った資料の流用になります。</p>
<p><img class="alignnone size-full wp-image-141" title="ハード構成図" src="http://labs.infoalive.com/wp-content/uploads/2009/10/arduino1.PNG" alt="ハード構成図" width="535" height="401" /></p>
<p><img class="alignnone size-full wp-image-142" title="ネットワーク構成図" src="http://labs.infoalive.com/wp-content/uploads/2009/10/arduino2.PNG" alt="ネットワーク構成図" width="532" height="399" /></p>
<p>Flashから操作できる＝Wiiのブラウザからも操作が出来る！。。はずです。</p>
<p>カメラを搭載していないので遠隔から操作は出来ません。今後の課題ですね。</p>
<p>Linuxを搭載するように考えてましたが、消費電力が大きいのと、組み込みLinuxは高価なこともあり、搭載は諦めました。</p>
<p>今後は社内のサービスに何らかの形で技術提供できればと考えております。</p>
<g:plusone href="http://labs.infoalive.com/tips/139"></g:plusone>]]></content:encoded>
			<wfw:commentRss>http://labs.infoalive.com/tips/139/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ネットワークラジコンをコントロール</title>
		<link>http://labs.infoalive.com/tips/109</link>
		<comments>http://labs.infoalive.com/tips/109#comments</comments>
		<pubDate>Tue, 15 Sep 2009 04:14:57 +0000</pubDate>
		<dc:creator>o2</dc:creator>
				<category><![CDATA[tips]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[avetanabt]]></category>
		<category><![CDATA[bluecove]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[RS-232]]></category>
		<category><![CDATA[serproxy]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[wii]]></category>
		<category><![CDATA[WiiRemoteJ]]></category>
		<category><![CDATA[wrj4P5]]></category>
		<category><![CDATA[ラジアン]]></category>
		<category><![CDATA[ラジコン]]></category>
		<category><![CDATA[組み込み系]]></category>
		<category><![CDATA[車]]></category>

		<guid isPermaLink="false">http://labs.infoalive.com/?p=109</guid>
		<description><![CDATA[昨晩Macからネットワークを経由し、ラジコン(組み込みLinuxに繋がったArduino)を操作できました。 ネットワークからArduinoを操作するのに、「Serial Proxy」を使いました。 「Serial Pr [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Flabs.infoalive.com%2Ftips%2F109"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Flabs.infoalive.com%2Ftips%2F109&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>昨晩Macからネットワークを経由し、ラジコン(組み込みLinuxに繋がったArduino)を操作できました。</p>
<p>ネットワークからArduinoを操作するのに、「Serial Proxy」を使いました。</p>
<p>「Serial Proxy」を使うことで、ストリームからシリアルの制御が可能となります。</p>
<p>Linuxへのインストールは簡単</p>
<ol>
<li>Arduino公式サイトのダウンロードページの一番下にある「Serial Proxy」のソース版をダウンロード<a href="http://www.arduino.cc/en/Main/Software" target="_blank">http://www.arduino.cc/en/Main/Software</a></li>
<li>make</li>
<li>serproxy.cfgを設定。comm_baud=9600、serial_device1=/dev/ttyUSB0に設定</li>
<li>./serproxy を実行</li>
</ol>
<p>あとはProcessingのコードをストリーム用に修正。</p>
<p>以下は実際に利用したWiiハンドルからネットワーク越しにラジコンを操作するコードです。</p>
<p># ハンドル周りに角度変更後の値から±5～10度の遊びを加えると操作しやすくなります（たぶん</p>
<p><code><br />
import lll.wrj4P5.*;<br />
import lll.Loc.*;<br />
import processing.net.*;</code></p>
<p>float i = 0.0;<br />
float angle = 0.0;<br />
int kakudo = 0;<br />
int old_kakudo = 0;</p>
<p>Wrj4P5 wii;<br />
LinkedList p = new LinkedList();<br />
Client client;</p>
<p>void setup() {</p>
<p style="padding-left: 30px;">size(300,300,P3D);</p>
<p style="padding-left: 30px;">wii=new Wrj4P5(this).connect();</p>
<p style="padding-left: 30px;">client = new Client(this, &#8220;10.0.2.2&#8243;, 5331);</p>
<p style="padding-left: 30px;">smooth();</p>
<p style="padding-left: 30px;">rectMode(CENTER);</p>
<p>}</p>
<p>void draw() {</p>
<p style="padding-left: 30px;">if (wii.isConnecting()) return;</p>
<p style="padding-left: 30px;">stroke(32);</p>
<p style="padding-left: 30px;">fill(255);</p>
<p style="padding-left: 30px;">ellipse(width/2, height/2, width/1.6, width/1.6);</p>
<p style="padding-left: 30px;">translate(width/2,height/2);</p>
<p style="padding-left: 30px;">rotate( atan2(wii.rimokon.sensed.y , wii.rimokon.sensed.x ) );</p>
<p style="padding-left: 30px;">fill(0);</p>
<p style="padding-left: 30px;">rect(0,0,width/2,height/7);</p>
<p style="padding-left: 30px;">angle = atan2(wii.rimokon.sensed.y , wii.rimokon.sensed.x ) * 180 / PI;</p>
<p style="padding-left: 30px;">if (angle &gt; 0) {</p>
<p style="padding-left: 60px;">kakudo = int(angle) -90;</p>
<p style="padding-left: 60px;">kakudo = 180 &#8211; kakudo;</p>
<p style="padding-left: 30px;">}</p>
<p style="padding-left: 30px;">if (angle &lt; 0) {</p>
<p style="padding-left: 60px;">kakudo = int(angle) * -1 -90;</p>
<p style="padding-left: 30px;">}</p>
<p style="padding-left: 30px;">kakudo = int(kakudo * 0.1) * 10;</p>
<p style="padding-left: 30px;">if (kakudo &gt;= 65 &amp;&amp; kakudo &lt;= 115) kakudo = 90;</p>
<p style="padding-left: 30px;">if (kakudo &gt;= 115 &amp;&amp; kakudo &lt;= 135) kakudo = 115;</p>
<p style="padding-left: 30px;">if (kakudo &gt;= 135) kakudo = 135;</p>
<p style="padding-left: 30px;">if (kakudo &gt;= 45 &amp;&amp; kakudo &lt;= 65) kakudo = 65;</p>
<p style="padding-left: 30px;">if (kakudo &lt;= 45) kakudo = 45;</p>
<p style="padding-left: 30px;">if (old_kakudo != kakudo){</p>
<p style="padding-left: 60px;">old_kakudo = kakudo;</p>
<p style="padding-left: 60px;">client.write(str(kakudo) + &#8220;s\n&#8221;);</p>
<p style="padding-left: 60px;">println(client.read());</p>
<p style="padding-left: 30px;">}</p>
<p>}</p>
<p>void buttonPressed(RimokonEvent evt,int rid){</p>
<p style="padding-left: 30px;">if (evt.wasPressed(evt.TWO)) {</p>
<p style="padding-left: 60px;">client.write(&#8220;255w\n&#8221;);</p>
<p style="padding-left: 30px;">}</p>
<p style="padding-left: 30px;">if (evt.wasPressed(evt.ONE)) {</p>
<p style="padding-left: 60px;">client.write(&#8220;150w\n&#8221;);</p>
<p style="padding-left: 30px;">}</p>
<p>}<br />
void buttonReleased(RimokonEvent evt,int rid){</p>
<p style="padding-left: 30px;">if (evt.wasReleased(evt.TWO)) {</p>
<p style="padding-left: 60px;">client.write(&#8220;0w\n&#8221;);</p>
<p style="padding-left: 30px;">}</p>
<p style="padding-left: 30px;">if (evt.wasReleased(evt.ONE)) {</p>
<p style="padding-left: 60px;">client.write(&#8220;0w\n&#8221;);</p>
<p style="padding-left: 30px;">}</p>
<p>}</p>
<p>以上です。</p>
<p>「Serial Proxy」を使うとFlashなどからもArduinoの操作が可能となります。何が出来るか想像するだけでご飯が３杯は食べれます。もっと？</p>
<p>Arduinoを始めてからここまで２週間かかりました。Amazonの商品発送が9/1なので間違いないです。</p>
<p>平日は仕事しながら家で開発してましたので結構疲れました。</p>
<p>次回はラジコンを操作している動画のアップを予定してます。 # Serial Proxyとの通信に不具合があるので調整中です。</p>
<p>おまけ：Processing 1.0.7 を利用することでMacの64bitでもwiiリモコンを操作できました。</p>
<g:plusone href="http://labs.infoalive.com/tips/109"></g:plusone>]]></content:encoded>
			<wfw:commentRss>http://labs.infoalive.com/tips/109/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>wiiリモコンの制御</title>
		<link>http://labs.infoalive.com/tips/95</link>
		<comments>http://labs.infoalive.com/tips/95#comments</comments>
		<pubDate>Fri, 11 Sep 2009 05:18:42 +0000</pubDate>
		<dc:creator>o2</dc:creator>
				<category><![CDATA[tips]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[avetanabt]]></category>
		<category><![CDATA[bluecove]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[wii]]></category>
		<category><![CDATA[WiiRemoteJ]]></category>
		<category><![CDATA[wrj4P5]]></category>
		<category><![CDATA[マイコン]]></category>
		<category><![CDATA[ラジアン]]></category>
		<category><![CDATA[ラジコン]]></category>
		<category><![CDATA[組み込み系]]></category>

		<guid isPermaLink="false">http://labs.infoalive.com/?p=95</guid>
		<description><![CDATA[昨夜組み込みLinuxのインストールも終え、もうすぐラジコンが完成します。 今日は、Wiiリモコンの制御について書きます。 wiiリモコンの制御にはProcessing 1.0.6を使いました。 ProcessingでW [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Flabs.infoalive.com%2Ftips%2F95"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Flabs.infoalive.com%2Ftips%2F95&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>昨夜組み込みLinuxのインストールも終え、もうすぐラジコンが完成します。</p>
<p>今日は、Wiiリモコンの制御について書きます。</p>
<p>wiiリモコンの制御にはProcessing 1.0.6を使いました。</p>
<p>ProcessingでWiiリモコンを扱うにはライブラリの用意が必要です。</p>
<p>今回はwrj4P5.jar (alpha-011)を利用しますので以下を用意しました。</p>
<ul>
<li>Loc.jar (beta 005)</li>
<li>avetanabt-20070719.tgz or bluecove-2.1.0.jar</li>
<li>WiiRemoteJ v1.6.zip.gz</li>
</ul>
<p>avetanabtはLinuxで利用する以外は有料ですので、macやwindowsの方はbluecoveがおすすめです。</p>
<p>Linux用のbluecove-2.1.0は幾つかのライブラリが不足してますので、avetanabtがおすすめです。</p>
<p>私の環境では、Linux(ubuntu)とMacの両方にwrj4P5をインストールしました。</p>
<p>インストールに手間取った点を書きますと、</p>
<p>Macでは、wrj4P5を利用する際、Javaを64bit から 32bit に変更が必要でした。ここが解らず悩みました。</p>
<p>LinuxではaventaBTのインストールに若干手間取りました。</p>
<p>以下は参考までにインストールログです。<br />
<code><br />
$ mkdir ~/src/aventaBT<br />
$ cd ~/src/aventaBT<br />
$ wget "http://downloads.sourceforge.net/project/avetanabt/avetanabt/20070719/avetanabt-20070719.tgz?use_mirror=jaist"<br />
$ tar xvzf avetanabt-20070719.tgz<br />
$ sudo aptitude install autoconf2.13<br />
$ sudo aptitude install g++<br />
$ export JDK_HOME=/usr/lib/jvm/java-6-sun<br />
$ export BIN_DIR=/home/[user]/src/aventaBT/binaries<br />
$ ./install<br />
$ cp binaries/avetanaBT.jar ~/src/processing-1.0.6/libraries/wrj4P5/library<br />
</code></p>
<p>以上で、インストール出来たとしまして、ハンドルの制御コードは以下になります。</p>
<p><code><br />
import lll.wrj4P5.*;<br />
import lll.Loc.*;</code></p>
<p>float angle = 0.0;</p>
<p>Wrj4P5 wii;<br />
LinkedList p = new LinkedList();</p>
<p>void setup() {</p>
<p style="padding-left: 30px;">size(300,300,P3D);</p>
<p style="padding-left: 30px;">wii=new Wrj4P5(this).connect();</p>
<p style="padding-left: 30px;">smooth();</p>
<p style="padding-left: 30px;">rectMode(CENTER);</p>
<p>}</p>
<p>void draw() {</p>
<p style="padding-left: 30px;">if (wii.isConnecting()) return;</p>
<p style="padding-left: 30px;">stroke(32);</p>
<p style="padding-left: 30px;">fill(255);</p>
<p style="padding-left: 30px;">ellipse(width/2, height/2, width/1.6, width/1.6);</p>
<p style="padding-left: 30px;">translate(width/2,height/2);</p>
<p style="padding-left: 30px;">rotate( atan2(wii.rimokon.sensed.y , wii.rimokon.sensed.x ) );</p>
<p style="padding-left: 30px;">fill(0);</p>
<p style="padding-left: 30px;">rect(0,0,width/2,height/7);</p>
<p>}</p>
<p>wii リモコンはラジアン値を返しますので、角度を求める場合は以下の公式になります。</p>
<p>angle = atan2( y , x ) * 180 / PI;</p>
<p>角度を求めれたことでハンドルの制御も計算しやすくなりましたね。</p>
<p>これにシリアル通信のコードを加えることで、Arudinoの制御が出来ます。</p>
<p>今回は以上です。</p>
<g:plusone href="http://labs.infoalive.com/tips/95"></g:plusone>]]></content:encoded>
			<wfw:commentRss>http://labs.infoalive.com/tips/95/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>サーボのコントロール</title>
		<link>http://labs.infoalive.com/tips/80</link>
		<comments>http://labs.infoalive.com/tips/80#comments</comments>
		<pubDate>Thu, 10 Sep 2009 02:11:28 +0000</pubDate>
		<dc:creator>o2</dc:creator>
				<category><![CDATA[tips]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[RS-232]]></category>
		<category><![CDATA[ラジコン]]></category>
		<category><![CDATA[組み込み系]]></category>
		<category><![CDATA[車]]></category>

		<guid isPermaLink="false">http://labs.infoalive.com/?p=80</guid>
		<description><![CDATA[昨夜は遅くまでラジコンに実装予定の組み込みLinuxを触ってました。 組み込みLinuxのファーストステップとして、シリアル接続が前提となるのですが、RS-232シリアルケーブルがそのまま繋がると思っていましたら、組み込 [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Flabs.infoalive.com%2Ftips%2F80"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Flabs.infoalive.com%2Ftips%2F80&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>昨夜は遅くまでラジコンに実装予定の組み込みLinuxを触ってました。</p>
<p>組み込みLinuxのファーストステップとして、シリアル接続が前提となるのですが、RS-232シリアルケーブルがそのまま繋がると思っていましたら、組み込みのRS-232 は10pin だったのです！</p>
<p>9pinのRS-232 ケーブルは用意してたのですが、これには困りました。</p>
<p>実際使われるpinはTX/RX、GNDと3本のケーブルのみでしたので、ピンを直刺しすることで対応できました。</p>
<p>また、この話は後日まとめてから書きます。</p>
<p>今日はサーボの制御について書きます。</p>
<p>サーボの制御はArduinoというイタリア生まれのマイコンで行っています。</p>
<p>普通の基盤だと決まったことしか出来ませんが、Arduinoは普通の基盤と違い配線の仕方と、プログラム制御で様々なことが出来ます。</p>
<p>サーボのコントロール方法は、パルス幅の信号長で角度を制御します。</p>
<p>実際はサーボ向けにライブラリがあり、角度を指定するだけで制御が行えます。</p>
<p>気をつける点としては、ラジコンのシャーシの稼動域よりもサーボの稼動域が広いことです。</p>
<p>サーボの稼動域がシャーシの稼動域を超えるとサーボが負荷で嫌な音を立てて潰れます。</p>
<p>実際に潰しましたので間違いないです！</p>
<p>なので先にサーボを取り外し、ラジコンに付属のプロポと同じ稼動域であるか、確認をオススメします。</p>
<p>以下はサーボと前後のモーターをシリアル通信で制御するコードです。</p>
<p>Arduinoでは短いコードで簡潔に書けます。</p>
<p>よろしければ参考ください。<br />
<code><br />
#include<br />
#define servoPin 9<br />
#define Motor 3<br />
Servo myservo;</code></p>
<p>void setup()<br />
{</p>
<p style="padding-left: 30px;">pinMode(Motor,OUTPUT);</p>
<p style="padding-left: 30px;">myservo.attach(servoPin);</p>
<p style="padding-left: 30px;">Serial.begin(9600);</p>
<p style="padding-left: 30px;">Serial.println(&#8220;Ready&#8221;);</p>
<p>}</p>
<p>void loop() {</p>
<p style="padding-left: 30px;">static int v = 0;</p>
<p style="padding-left: 30px;">if ( Serial.available() &gt; 0) {</p>
<p style="padding-left: 60px;">char ch = Serial.read();</p>
<p style="padding-left: 60px;">switch(ch) {</p>
<p style="padding-left: 90px;">case &#8217;0&#8242;&#8230;&#8217;9&#8242;:</p>
<p style="padding-left: 120px;">v = v * 10 + ch &#8211; &#8217;0&#8242;;</p>
<p style="padding-left: 120px;">break;</p>
<p style="padding-left: 90px;">case &#8216;s&#8217;:</p>
<p style="padding-left: 120px;">if (v &lt;= 45) v = 45;</p>
<p style="padding-left: 120px;">if (v &gt;= 135) v = 135;</p>
<p style="padding-left: 120px;">myservo.write(v);</p>
<p style="padding-left: 120px;">Serial.print(v);</p>
<p style="padding-left: 120px;">Serial.println(&#8216;s&#8217;);</p>
<p style="padding-left: 120px;">v = 0;</p>
<p style="padding-left: 120px;">break;</p>
<p style="padding-left: 90px;">case &#8216;w&#8217;:</p>
<p style="padding-left: 120px;">if (v &lt;= 0) v = 0;</p>
<p style="padding-left: 120px;">if (v &gt;= 255) v = 255;</p>
<p style="padding-left: 120px;">analogWrite(Motor,v);</p>
<p style="padding-left: 120px;">Serial.print(v);</p>
<p style="padding-left: 120px;">Serial.println(&#8216;w&#8217;);</p>
<p style="padding-left: 120px;">v = 0;</p>
<p style="padding-left: 120px;">break;</p>
<p style="padding-left: 60px;">}</p>
<p style="padding-left: 30px;">}</p>
<p>}</p>
<p>以下は簡易な回路図のつもりです。<br />
電源は外部電源を利用してます。外部電源はvinのpinから電源を引きます。<br />
<img class="alignnone size-full wp-image-85" title="サーボ制御" src="http://labs.infoalive.com/wp-content/uploads/2009/09/rimg04421.jpg" alt="サーボ制御" width="640" height="480" /></p>
<p>回路図に１点間違いがありました。<br />
モーターからのワイヤはモスの真ん中にさします。モスに繋がるマイナス電源は端にさします。</p>
<g:plusone href="http://labs.infoalive.com/tips/80"></g:plusone>]]></content:encoded>
			<wfw:commentRss>http://labs.infoalive.com/tips/80/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>

