元高専生のロボット作り

元高専生のロボット作り

主にプログラミング, 電子系について書きます。たまに機械系もやります。メモ代わりの記事ばっか書きます

jetson nano pygameでジョイスティックの読み取りを行う

まず、jetson nanoにpygameをいれようとしたのですが、
いきなりpip3 install pygameではうまくいきませんでした。
sudo apt install python-pygameでもだめでした。

以下の記事の通り行うとちゃんとインストールできました。

qiita.com


また、今回はjetsonをssh接続して動かしているため、ターミナルを開くことができません。

ssh接続経由で実行すると以下のようなエラーがでる。

  File "joy_test.py", line 18, in joy_demo
    for e in pygame.event.get():
pygame.error: video system not initialized

この場合はDummyVideoDriverというのを使えばよくて、以下に書いてあります。
DummyVideoDriver - pygame wiki


以下が動作確認用のコードです。

import pygame
from pygame.locals import *
import os

# ssh接続だとディスプレイが開けないので
# DummyVideoDriverを使用する
os.environ["SDL_VIDEODRIVER"] = "dummy"

def joy_demo():
    pygame.init()
    pygame.joystick.init()
    joys = pygame.joystick.Joystick(0)
    joys.init()
    joystick = pygame.joystick.Joystick(0)
    joystick.init()

    while True:
        for e in pygame.event.get():
            if e.type == pygame.locals.JOYAXISMOTION:
                print(joystick.get_axis(0), joystick.get_axis(1), joystick.get_axis(2), joystick.get_axis(3))
            elif e.type == pygame.locals.JOYBUTTONDOWN:
                print('buttin: ' + str(e.button) + ' pushed')
            elif e.type == pygame.locals.JOYBUTTONUP:
                print('button: ' + str(e.button) + ' released')

if __name__ == '__main__':
    try:
        joy_demo()
    except KeyboardInterrupt:
        print("終了")

低モジュール歯車の自作(切削加工)

モジュール0.5の平歯車が欲しくなりました。

まあ別にアリエクとかで売っているので、そこから買えばよい
ja.aliexpress.com

ただ、私の場合は少し特殊で、数グラムでも軽くしたくて、アルミ製の歯車が必要でした。
外注すればいいんですけど、↑のURLのやつと同等の歯車をジュラルミン製で外注すると、一個2万円とかかかってしまう。

というわけで切削加工でモジュール0.5の歯車を製作しました。
といっても特殊なことはしないで、径0.5mmのエンドミルを使用すればよくて。

使ったのはこれ
Φ0.5 mm
https://www.monotaro.com/p/6340/6053/

Φ2.0 mm
https://www.monotaro.com/p/6340/6184/

2.0のエンドミルで粗削りしたあと、0.5のエンドミルで外周を切削すればよい。
0.5mmで切削するときは、めっちゃ気を使って一回の切り込み量0.02mmとかに設定しました。

注意点としては、負荷はそんないないので切削中に折れることはまあないけど、z軸のゼロ点合わせに注意が必要。
ラジアル力をかけるとすぐに折れます。
あと、切り込み量0.02mmなので一個切削するのにめっちゃ時間かかる。
私の場合、厚さ8mmの歯車を6個切削で、2週間くらいかかった。

以下は、アリエク歯車と、自作歯車を並べたもの。
鉄系(左)は5 g、ジュラルミンA2017(右)は1.5 gでした。
f:id:sgrsn1711:20210206223705j:plain

EigenのAngleAxisと同じmatlabコマンド

Eigenを使用したコードをmatlabに移植することになりました。
AngleAxisを使用していて、これは任意の軸を中心とした回転を回転行列として出してくれます。

matlabで回転行列を求めるコマンドはいろいろあって、どれを使えばいいのか。

3 次元回転ベクトルから回転行列への変換 - MATLAB rotationVectorToMatrix - MathWorks 日本
軸角度の回転を回転行列に変換 - MATLAB axang2rotm - MathWorks 日本
オイラー角の回転行列への変換 - MATLAB eul2rotm - MathWorks 日本


ソースコードをたどるのは面倒

ここにAngleAxisの例があるので、同じ出力になればオッケーということで
https://eigen.tuxfamily.org/dox/classEigen_1_1AngleAxis.html

コード

以下を実行すると同じ出力になることがわかる
Robotics System Toolboxをインストールする必要がある。(500MBくらい)

axangX = [1 0 0 0.25*pi];
rotmX = axang2rotm(axangX);
axangY = [0 1 0 0.5*pi];
rotmY = axang2rotm(axangY);
axangZ = [0 0 1 0.33*pi];
rotmZ = axang2rotm(axangZ);
rotmX*rotmY*rotmZ


出力

ans =

    0.0000   -0.0000    1.0000
    0.9686   -0.2487   -0.0000
    0.2487    0.9686    0.0000


結果

axang2rotmを使えばよい

ODriveにファームウェア書き込めないとき

以下はほとんど以下のpgrading firmware with a different DFU toolの翻訳ですが、
Zadigで操作を行ったPCとは別のPCに接続するとうまくいったという忘備録です。
https://docs.odriverobotics.com/odrivetool

まず、ODriveをDFUモードにします。

ODriveの電源を切ってから、ODriveのDIPスイッチをRUNからDFUに切り替え、GPIOの6番ピンをGNDに接続します。
そのあとDriveの電源を入れてください。

以下のURLからファームウェアの.hexファイルをダウンロードできます。
Releases · madcowswe/ODrive · GitHub

ODrive24Vのv3.6だったら以下を選びます

  • ODriveFirmware_v3.6-24V.hex


次に、以下のURLから、Dfu file managerとDfuSeDemoというソフトをインストールします。
ダウンロードしたzipを解凍し、中のexeファイルを実行するとインストールされます。
ダウンロードにはアカウントの作成が必要です。
https://www.st.com/en/development-tools/stsw-stm32080.html


インストールしたら、まずDfu file managerを起動します。
“I want to GENERATE a DFU file from S19, HEX or BIN files”を選択し、
次に"S19 or Hex…"を選択、先ほどダウンロードした.hexファイルを選択します。
他の設定はそのまま、“Generate…”をクリックすると.dfuファイルを生成できます。
名前は適当でいいです。ODriveFirmware.dfuとしておきましょう。

次に、ODriveをUSB接続して、DfuSeDemoを起動します。
「STM Device in DFU Mode」が表示されているはずです。

表示されていないことがあるかもしれませんが、そのときはZadigでドライバがlibusbに設定されているためかもしれません。
元のドライバに戻す必要があります。以下の手順に従ってください。
FAQ · pbatard/libwdi Wiki · GitHub
上記の手順を行った後も、デバイスマネージャでODriveがlibusbデバイスとしてインストールされている場合は、C:WIndows\System32\drivers\libusb0.sysというファイルを削除してください。(Zadigを使ってインストールし直すことができるので、大丈夫です)。

バイスマネージャのユニバーサルシリアルバスコントローラーでSTM Device in DFU Modeと表示されていれば大丈夫です。
バイスマネージャ最上部でlibusb-win32 devicesと表示されていたらダメです。

それでもダメな場合はあきらめて、Zadigで操作を行ったPCとは別のPCに接続するとうまくいくかもしれません。

右下の“Upgrade or Verify Action”という項目で、“Choose…”.ボタンをクリックします。
先ほど作ったODriveFirmware.dfuを選択します。
“Upgrade”ボタンをクリック、正しいデバイスタイプかの警告が表示されたら、yesをクリックして続行します。
これでODriveにフームウェアが書き込まれます。
ODriveの電源を切り、DIPスイッチをRUNモードに戻してodrivetoolを起動すれば認識されるはずです。

mbedでROS(rosserial)するときのいろいろ

以下をインポートすればROSが使える
os.mbed.com


/odomなど、ちょっと大きい(?)データをpubするときは、ros_lib_melodic/ros/node_handle.hの100行目あたり、INPUT_SIZE, OUTPUT_SIZEを大きくする。

/* Node Handle */
template<class Hardware,
         int MAX_SUBSCRIBERS = 25,
         int MAX_PUBLISHERS = 25,
         int INPUT_SIZE = 2000,
         int OUTPUT_SIZE = 2000>

コードで抜けてるものがあるとコンパイル、書き込みはできるが、mbed実行エラーが発生したりする

ちょっとはまったのが、nh.advertise(pub); を書かないでpublishすると実行エラー、LPC1768でLED1が点滅した。

actionlibの使い方がわからない。

ROS on Docker on Windows10+Virtualbox+Vagrant+Ubuntu18.04でcatkin buildするまで

Dockerのインストールまでは以下に従えばよさげ。
Docker on Windows10+Virtualbox+Vagrant+Ubuntu18.04の構築 - Qiita

ひとつ、Dockerのインストール手順に従っていると
docker-ceのインストール時に以下のようなエラーが発生

vagrant@ubuntu-bionic:~$ sudo apt-get install docker-ce=5:18.09.9~3-0~ubuntu-bionic
.
.
.
   Last modification reported: Wed, 05 Aug 2020 04:08:10 +0000
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing

タイムゾーンを設定してやればよい

$ sudo timedatectl set-timezone Asia/Tokyo

dockerのインストールまで完了したら、docker上でROSを起動する。

$ docker pull ros:melodic
$ sudo docker run -it --rm --name melodic_demo ros:melodic

コンテナに入ったら、以下を実行

$ sudo apt update
$ sudo apt install python-catkin-tools
$ mkdir -p catkin_ws/src
$ cd catkin_ws/src
$ cd ..

ここでcatkin buildする前に以下をインストール

sudo apt update
sudo apt-get install cmake gcc clang gdb build-essential
$ catkin build

インストールしないとビルドできない。以下のようなエラーが発生してしまった。

catkin "/usr/bin/cc" is not able to compile a simple test program.
...
cmake error at /usr/share/cmake-3.10/modules/cmaketestccompiler.cmake:52 (message):
...

Dockerのインストール on Windows10+Virtualbox+Vagrant+Ubuntu18.04するとき

Dockerのインストール手順に従っていると
docker-ceのインストール時に以下のようなエラーが発生

vagrant@ubuntu-bionic:~$ sudo apt-get install docker-ce=5:18.09.9~3-0~ubuntu-bionic
.
.
.
   Last modification reported: Wed, 05 Aug 2020 04:08:10 +0000
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing

タイムゾーンを設定してやればよい

$ sudo timedatectl set-timezone Asia/Tokyo