Mac OS XにSTM32の開発環境を整える

インストールするものは以下の3つ

インストールにはhomebrewが必要です。

wget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q1-update/+download/gcc-arm-none-eabi-4_9-2015q1-20150306-mac.tar.bz2

sudo tar xvf gcc-arm-none-eabi-4_9-2015q1-20150306-mac.tar.bz2 -C /usr/local
sudo ln -s /usr/local/gcc-arm-none-eabi-4_9-2015q1 /usr/local/arm-cs-tools
echo "PATH="$PATH:/usr/local/arm-cs-tools/bin"" >> ~/.bash_profile

brew install stlink
brew install dfu-util

stm32plusの環境を整えるにあるスクリプトを使えば、stm32plusもインストールできます。

Eclipseで開発する場合、Macではデフォルトのワークスペースが~/Documents/workspaceになるので、ワークスペースを~/workspaceに変更するか、ビルドされたstm32plusライブラリを使用しているワークスペースにコピーするかのいずれかの操作をする必要があります。

カテゴリー: OS X, 組み込み関連 | コメントする

Beignetを使用してKinectV2をUbuntuで動かす

以前書いたUbuntu 14.04にBeignet1.0.0をインストールする話に続いて、KinectV2をROSで動かします。

Mac, LinuxでKinectV2を使用するには、libfreenect2をするのですが、公式レポジトリでは現在Beignetを使用して動かすとバグるので、私のforkを使用します。修正されました。

cd ~/
git clone https://github.com/spiralray/libfreenect2
cd libfreenect2/
./depends/install_ubuntu.sh
sudo ln -s /usr/lib/x86_64-linux-gnu/libturbojpeg.so.0.0.0 /usr/lib/x86_64-linux-gnu/libturbojpeg.so
cd examples/protonect/
cmake CMakeLists.txt
make && sudo make install

以上でインストールは完了。サンプルを動かす場合はprotonectフォルダ内で

sudo ./bin/Protonect

とします。
sudoなしで動かせるようにパーミッションを修正します。

sudo gedit /etc/udev/rules.d/50-kinectv2.rules

とし、

SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02c4", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02d8", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02d9", MODE="0666"

と記述して保存します。
再起動後設定が有効になります。

また、libfreenect2のインストール先は/usr/local/libと/usr/local/lib64なので、アプリケーション開発時には共有ライブラリの依存関係情報を更新する必要があります。

sudo sh -c "echo '/usr/local/lib64' > /etc/ld.so.conf.d/lib64.conf"
sudo sh -c "echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf"
sudo ldconfig

以上で設定完了です。

libfreenect2ののsampleフォルダ内にROSでdepth画像をpublishするサンプルを追加してあります。
catkin_ws内に配置してお試しください。

カテゴリー: ロボット | コメントする

Macbook Pro Mid 2013 on Ubuntu 14.04 with Kernel 3.16

  • Enabling BCM4360

Download bcmwl-kernel-source 6.30.223.141+bdcom-0ubuntu2 in amd64 (Release) from Broadcom 802.11 Linux STA wireless driver source

  •  Configure keyboard settings

Add

/usr/bin/setxkbmap -option ctrl:nocaps

to /etc/rc.local

カテゴリー: 未分類 | コメントする

Haswell系Intel CPUでBeignet 1.0.0を動かすお話

libfreenect2をOpenCLで動かすために、Ubuntu 14.04にHaswell系のIntel GPUでBeignet1.0.0を動かるようにしていたのですが、思った以上に闇が深かったので手順を書いておきます。

https://gist.github.com/spiralray/cae0bc235509e495fec1

まず、Beignetのビルドに推奨されている、LLVM-3.5をインストールしないといけないのですが、Ubuntu 14.04のLLVM-3.5パッケージに現在問題があるため、本家サイトからインストールする必要があります。

#Install llvm-3.5 from official web site
wget http://llvm.org/releases/3.5.0/clang+llvm-3.5.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz
tar xvf clang+llvm-3.5.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz
sudo cp -r clang+llvm-3.5.0-x86_64-linux-gnu/* /usr/local/
sudo ldconfig

次に、Beignetをビルド、インストールします。

wget https://01.org/sites/default/files/beignet-1.0.0-source.tar.gz
tar xvf beignet-1.0.0-source.tar.gz
cd Beignet-1.0.0-Source
mkdir build
cd build
cmake ../
make -j8
sudo make install

CPUがHaswellの場合、カーネルにパッチを当てないといけないので、カーネルをビルドします。
IntelのUSB3.0コントローラを使用する場合、3.13.0-35-generic以降もしくは3.16が必要とのことなので、3.16を使用することに。

sudo sh -c "echo 'deb http://security.ubuntu.com/ubuntu utopic-security main' >> /etc/apt/sources.list"
sudo apt-get -y update
sudo apt-get -y install libncurses-dev
sudo apt-get -y install build-essential libncurses-dev fakeroot kernel-package
sudo apt-get -y install linux-source linux-image-3.16.0-28-generic linux-headers-3.16.0-28 linux-source-3.16.0

cd /usr/src
sudo tar xvjf linux-source-3.16.0.tar.bz2
cd linux-source-3.16.0
sudo wget https://01.org/sites/default/files/disable-batchbuffer-security.patch
sudo patch -b drivers/gpu/drm/i915/i915_gem_execbuffer.c < disable-batchbuffer-security.patch

sudo cp /boot/config-3.16.0-28-generic .config
sudo make oldconfig
sudo make menuconfig
sudo make-kpkg clean
sudo CONCURRENCY_LEVEL=8 make-kpkg --rootcmd fakeroot --initrd --revision=20141215 kernel_image kernel_headers
cd /usr/src
sudo dpkg -i linux-headers-3.16*.deb
sudo dpkg -i linux-image-3.16*.deb

再起動したら、unameコマンドで正しくバージョンが上がっているかを確認しましょう。

これでKernel 3.16がインストールされたわけですが、Beignetをカーネル3.15, 3.16で使用するには起動するごとに

sudo sh -c "echo 0 > /sys/module/i915/parameters/enable_cmd_parser"

としなければなりません。

以上でUbuntu 14.04にBeignet 1.0.0がインストールされました。最後に

cd Beignet-1.0.0-Source/build/utests/
. setenv
./utest_run

として、テストプログラムを実行してみましょう。

カテゴリー: 未分類 | 1件のコメント

stm32plusの環境を整える

前回の続きで、eclipseでstm32plusを扱えるようにする。

前回のスクリプトでコンパイラをインストールした状態でコレを実行すれば、

  • ~/workspace/stm32plus

にstm32plusのライブラリががビルドされた状態で用意される。

F4のサンプルプログラム~/workspaceにインポートしてmakeできればOK。

make flashでSTM32F4Discovery書き込むとLEDが点滅するはず。

カテゴリー: 組み込み関連 | コメントする

Ubuntu 14.04にSTM32の開発環境を整える

部活では今までマイコン徹底入門の環境に変更を加えたものを使用していたが、Windows8.1だけでも面倒なのにWindows 9とかさらに厄介なものが到来しそうなので思い切ってUbuntuに移行することにした。(とはいっても僕自身の為だけにはMacでの開発に対応させてはいたので、コンパイラを入れるだけだが)

目標はWindowsで使っていた時と同じように

  • Eclipseで
  • make flashで書き込みができる
  • SVNが使えるように(プラグイン入れるだけ)
  • 1回生でもインストールできるようにシェルスクリプトで一発インストールできるように

とした。

で、完成したシェルスクリプトがコレ

setup_eclipse_and_arm_compiler_on_ubuntu.sh

を自動でインストールしてくれる。
コンパイラは/usr/local/arm-cs-toolsにシンボリックリンクが張られる。(個人的な互換性維持のため)

インストール後は

source ~/.bashrc
eclipse

で、eclipseが起動するはずなので、Launcherにでも登録しておく。

失敗して何度も実行してたら.bashrcにどんどんPATHが追加されてくので、インストールミスった場合は自分で消してください…(良いスクリプトの書き方あったら教えてください)

カテゴリー: 組み込み関連 | コメントする

STM32でrosserialとかstm32plusとか

ロボコンでROS使おうと決めたもののArduinoは甘えだから使いたくない(Arduinoにはエンコーダインターフェースがないから使いたくない)
ということでrosserialを普段から使ってるSTM32に移植しようと考えた。

どうせC++でやるなら全部C++にしちゃおうということで、stm32plusというC++のライブラリを使ってみることに。
マイコンでC++とか…そう思っていた時期も私にもありました。

stm32plusはF0,F1,F4シリーズに対応していて、ペリフェラルの初期化をほぼ同じように記述できる。
F1とF4を同時に使っている場合、stdperiphlibではコードに互換性がないから扱いにくいが、このライブラリを使用すれば再利用が楽で良い。

STM32F103CBT6に対応していなかったためforkして対応したやつをコミットしました。
https://github.com/spiralray/stm32plus
(LチカとPWM出力しかテストしてないので注意)

で、本来の目的のrosserialに対応させたプロジェクトがこれ

https://github.com/spiralray/stm32f1_rosserial

まぁstm32plusでUSART初期化して、送受信を割り込み動作させてbufferに格納するクラス(UsartWithBuffer)を作成しただけですが…

バグあったらプルリクエストお願いしまぁす♡

カテゴリー: ロボット, 組み込み関連 | 2件のコメント

合同ロボコン当日

合同ロボコンに参加してきた。
結果は一般の部優勝。
2位の人と2秒以上差をつけ、11秒弱でゴールすることができた。

大会前日にいろいろあったから動くか不安だったが、何とか…って感じだったけど()

一昨日実装した台形加速のライントレースが、昨日には動かなくなっていた。
ゲインの再調整等色々プログラムの変更を試したがうまくいかない。

結局以下の2つが問題となっていた

  • ホイールにギアを圧入していたが、緩くなっていた
  • フォトトランジスタの出力が不安定

いずれの問題も、台形加速の練習をしていた時にミスって壁に何度も激突していたのが原因だと思う

前者の問題は結構前の段階から発生していたようで、ゴール時に左に大きく回転するのは変則四輪右前の輪の圧入が緩んでいたせいだということが分かった。
接着剤で固定し台形加速の試験をしたところ、停止時に左右にぶれることなくぴたりと止まることができた。

後者の問題、センサのガードを付けれる構造にするべきだった。当たり前だ。

ということで大会当日の午前1時頃からセンサの取り換えを行った。

IMG_2594.JPG

 

会場に行ってから動作チェックをしないといけない羽目になったがなんとか動作するところまでは持っていけた。
しかしGCCのバグか何かでプログラムが不安定…最適化レベルを落としたら直るかも。

大会本番はかなりコースが単純だったので加減速の加速度・最高速などを割とギリギリまで攻めてみた。
ロンリウムで滑りやすい割にはなかなか速いが、それでもまだ遅い。

特に最高速が遅い。台形加速の試験では3m/sくらいまでは出たのに…
速度制御の操作量の上限が最大の80%までになっていて、そこにラインの位置補正の操作量を加算するようにしている。操作量80%まででは速度が出ないのかも。
というかそもそも制御の方法としてこれは良いものなのかどうか。

マイクロマウス関西地区大会のロボトレースに出るかどうか。うーん微妙だ。

カテゴリー: ロボット | コメントする

6日目:台形加減速をライントレースに実装

昨日実験した台形制御をライントレースのプログラムに組み込んだ。
以前と比べ、直進時の加速・速度が飛躍的に上昇している。また、速度が安定したことでコーナーなどで機体が揺れることもなくなり安定した走行を見せている。

一見カーブの部分にも速度の余裕がまだあるように思えるが、問題となっているのはクロス直後の波打った部分である。
今回はショートカットのプログラムを実装していないので忠実にトレースすることになるが、線の曲り方が逆になる瞬間の加速度に耐えられずスリップしてしまっている。

曲がる方向が急に逆になるところに関してのみ突入速度を遅くするなどして対策する必要がありそうだ。

合同ロボコンは明後日…
明日は各コーナーの速度の調整をしようと思う。

ショートカットは…間に合わなさそう

カテゴリー: ロボット | コメントする

5日目:台形加速

 

 

今日は台形制御の試験をした。

speed_log

 

加速は12.5m/s^2
減速は16.0m/s^2

1.5m/sを超えたあたりから操作量が限界に張り付きはじめているので、もう少し加速度小さくした方がいいかも?

明日は実際のライントレースに台形加速を実装する。

カテゴリー: ロボット | コメントする