TurtleBot(CREATE)が動かなくなった

久しぶりにTurtleBotを動かそうと、接続しているマシンのubuntuをアップデートした。
イヤな予感がした通り、アップデート後にTurtleBotが動かなくなってしまった。
他と問題を切り分けるために、turtlebot_bringupではなく、create_nodeだけで起動してみたら、以下のような結果となった。

$ rosrun create_node turtlebot_node.py
[INFO] [WallTime: 1409911201.387855] serial port: /dev/ttyUSB0
[INFO] [WallTime: 1409911201.389007] update_rate: 30.0
[INFO] [WallTime: 1409911201.391291] drive mode: twist
[INFO] [WallTime: 1409911201.392122] has gyro: True
[INFO] [WallTime: 1409911201.559079] self.gyro_measurement_range 150.000000
[INFO] [WallTime: 1409911201.560099] self.gyro_scale_correction 1.350000
[ERROR] [WallTime: 1409911204.652150] Failed to open port /dev/ttyUSB0.  Please make sure the Create cable is plugged into the computer. 

Failed to open port /dev/ttyUSB0.  Please make sure the Create cable is plugged into the computer. 

ソースを追いかけながらテストしてみると、どうやら誰かがポート(/dev/ttyUSB0)を先にオープンしていて(Port is already open.)、重複オープンとなってしまったらしい。
追えどもその場所がわからないため、素のPythonで試してみた。

$ python
Python 2.7.3 (default, Feb 27 2014, 20:00:17) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> x = serial.Serial("/dev/ttyUSB0", baudrate=57600, timeout=2)
>>> x.open()
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 285, in open
    raise SerialException("Port is already open.")
serial.serialutil.SerialException: Port is already open.
>>> 

何と起動後のopenで既に失敗している。調べてみたら、最近のPySerialではオブジェクトの生成時にopenするため、明示的にopenする必要がなくなったらしい。
(そういう変更やめて欲しい…)

ということで、シリアルポートを明示的にopenしている場所をコメントアウトするだけでよかった。

$ roscd create_driver/src/
$ diff create_driver.py create_driver.py.org 
213c213
< #self.ser.open()
---
>     self.ser.open()

これで半日つぶれてしまった。

プロセスのクリア

どかっとプロセスを増やしてしまった時に。洗いざらいterminateしたくなるけど、プロセスブラウザからいちいちAlt tでは面倒くさい。

nshさんの投稿から。
http://forum.world.st/Pharo-dev-why-so-many-processes-are-running-at-startup-time-td4694226.html

(Process allInstances
  reject: [ :p | 
    {(InputEventFetcher default fetcherProcess).
     (Processor activeProcess).
     (WeakArray runningFinalizationProcess).
     (Processor backgroundProcess).
     (SmalltalkImage current lowSpaceWatcherProcess).
     (UIManager default uiProcess).
     (Delay schedulingProcess)} includes: p ])
  do: [ :p | p suspend; terminate ]

これはとても助かりますね。

NativeBoostでのライブラリの配置

ここ2、3日、NativeBoostで遊んでみた。
以前にSmalltalk勉強会でもらった資料をもとに、LeapMotionを利用できるようにした。結果的には単純なことだったのだが、最初はうまく外部の動的ライブラリを読み込んでくれなくて苦労した。
特にライブラリをどこに置くかがMacやLinuxで異なるようなので、備忘のために記録しておく。
続きを読む

ChromeBookへのLinuxインストール(chrubuntu編)

ChromeBook(Asus C720)をamazon.comで買った。
そのまま使うのも何なので、Linuxをインストールすることにした。
現時点で確認できたのは、ChromeBookには3通りの方法でLinuxをインストールできることである。

  1. chrubuntuを使う
  2. BodhiLinuxを使う
  3. Croutonを使う

chrubuntuとBodhiLinuxは、ChromeBookにブート環境からUbuntu Linuxをインストールするもので、Croutonはchroot環境を用いてChromeOSからUbuntuを起動させるものである。どれも一長一短があるようなので、それぞれインストールして使い勝手を確認してみた。
この記事ではchrubuntuのインストールについて説明する。

ちなみに元ネタはこちら。

続きを読む

ROS経由でKinectの骨格情報を得る(Groovy) (続編)

以前、ROS経由でKinectの骨格情報を得る(Groovy)という記事で、Kinectの骨格情報をROS経由で得る方法について述べた。しかし、久しぶりにFluoで骨格情報を表示してみたところ遅すぎて(ポーズが1分後くらいに表示される)使い物にならない。最初はマシンのスペックが低すぎるのかと思ったのだがCore 2 Duoのマシンでも同様なので、スペックの問題ではなく通信の問題なのではないかと思って調べてみた。

続きを読む

Morphの設定

もう10年以上Morphicと付き合っているのに、未だに設定のパラメータを覚えられない。
困ったときは自由自在を調べれば良いのだが、備忘録として少しまとめておいた方がいいように思う。
ということでまとめてみた。
続きを読む

Scratch 1.4でブロックを追加するチュートリアル(続き)

前回のエントリは思ったよりアクセスがあったので補足しておく。
リストを扱うブロックを作る場合、ブロック追加のメソッドの修正と、リスト処理を行うメソッドの追加だけでは十分ではない。その他に、デフォルト値としてリスト名を自動的に設定することと、要素の位置を表す引数に数値以外が指定された時の処置を行う必要がある。
その辺りは、前回も参考にした’replace item’を真似しながら対応していくことにする。

続きを読む

You must feel the Message around you; here, between you, me, the tree, the rock, everywhere, yes.