LoginSignup
27
24

More than 3 years have passed since last update.

RoboMasterS1を解析してROSで動かす!(みんなで動かそう編)

Last updated at Posted at 2019-10-05

ROSConJP 2019でLT発表しました

RoboMaster S1を改造したい皆さん、こんにちは。
だいぶ前から更新が滞っており申し訳ございません。
というのも、ROSConJPでLT発表してきたので、ネタバレ防止で更新していませんでした。
タイトルが変わったので気づかれたかもしれませんが、ROSからRoboMaster S1の操作に成功しました。

ということで発表資料はこちらにおいてあります。
https://www.slideshare.net/tatsuyaishikawa507/ros-con-jp-2019-lt-tatsuya-ishikawa
こんな感じでPS4のコントローラーからgeometry_msgs::Twistで操作できるようにしました。
ビデオは下をクリック↓
youtube

Githubで公開

とりあえずReadMeを英語で書くのがめんどくさいのでQiitaで日本語で書きます。

作ったもの

DJI RoboMaster S1 ROS Bridge Package
このパッケージにはROS-RoboMasterS1のブリッジノードとRoboMasterS1に搭載するNucleo-F767ZIのファームウェアのソースコードが含まれています。

なんでNucleo

京都大学のT先生やいろいろな方面からmROSなどのマイコン側でROSノードをたてることを検討しましたが、諸般の事情(D○IのCANがクソすぎる)で、RTOS上ではCAN取りこぼしが発生したため、泣く泣くRTOSなしになりました。
で、なんでNucleoを選んだかというと、TwitterのアンケートでSTM32が人気だったのと、入手性、性能、一番重要なCANが2ChあってかつEthernetがあるということで、Nucleo-F767ZIを選びました。ただ今後micro-ROS(Github)でROS2対応することも見越して、OLIMEX STM23-E407(Strawberry Linux)も手に入れています。

ただ、Nucleoのネジ穴間の距離がまさかのRoboMasterにはじめから開いている穴ピッチと同じという奇跡が起きて、簡単に機体に装着できます。(絶対DJI社内でもNucleo使っているでコレ

で、こんなんできました

robomasters1

PS4コントローラーのキーマップ

  • 左ジョイスティック : Linear X と Linear Y
  • 右ジョイスティック : ジンバルのPitchとYaw
  • 右ジョイスティックのボタンのプッシュ : ブラスターを打つ
  • L2 : 押してる間だけ台車部分とジンバルが動きます

まずは材料の準備

あと、無線で操作したい場合は以下のものも追加で買ってください。
- Ethernet-Wifiコンバーター (USBで電源供給できるので、WLI-UTX-AG300/Cが良い)
- DC-DCコンバータ (http://akizukidenshi.com/catalog/g/gK-09981/) (Nucleoからの5V電源では足りない)

とりあえずインストール

今回は動かそう編なので、技術的なところにはあまり触れずにとりあえずやってみましょう。
PS4コントローラー用のドライバーds4drvのインストール
$ sudo pip install ds4drv

UbuntuのPCをWiFiアクセスポイント化するためにhostapdをインストール
$sudo apt install hostapd

設定ファイルを書くよ(内容は適宜使ってるPCのやつにしてちょ)
$sudo vi /etc/hostapd/hostapd.conf
interface=wlp61s0
driver=nl80211
ssid=RoboMasterS1Host
hw_mode=g
channel=7
wpa=2
wpa_passphrase=robomasters1
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

GithubからCloneしてくる
$ git clone --recursive https://github.com/tatsuyai713/robomaster_s1_can_hack.git
このままではもちろん何もできないので、rosフォルダの中身を自分のROSのworkspaceに移動するなり、シンボリックリンク貼るなりしてください。

乗っ取り基板を作る

今回の方法では、インテリジェントコントローラーはそのまま生かした状態で、インテリジェントコントローラーとCANのネットワークの間にNucleoを入れます。つまりインテリジェントコントローラーのCAN指示を書き換えてしまいます。(なのでCANが2ch必要なのです)
まあ、基板作りはそれほど説明しなくても良いかと思うのですが、以下の点に注意してハンダ付けしてください。

  • RoboMaster S1のインテリジェントコントローラーのCANコネクタは上2ピンがCANのHighとLowで下がバッテリー電圧とGND(電源はちゃんとテスターで確かめてください・CANはどっちがHIGHか忘れました汗、後で書きます)
  • Nucleoの電源はバッテリー電圧をそのままVINに入れてもOKですし、DC-DCを介して5Vを供給してもよし
  • Wifiコンバーターの電源は500mAも食うので、DC-DCから供給すること
  • 通常CANは終端抵抗を適切に入れなければいけないが、今回使うBreakoutボードは終端抵抗が入っているのでそのまま繋いでOK
  • CANのBreakoutボードの電源は5V
  • CANのRX/TXは1ch:PD0/PD1 2ch:PB12/PB6となっているので、Nucleoの裏の文字に従ってBreakoutボードと接続
  • CANのH/Lの線はツイストペアにしましょう

STM32CubeIDEでFirmwareをビルドして書き込む

さすがにこれまでは説明していられないので、これを買って勉強してください→Booth
ゆーくりっどさんありがとうございます。

さて動かしてみましょう

ネットワーク設定

ネットワーク設定ですが、Githubにあるaccess_point.shのとおり
PC:192.168.0.1
RoboMasterS1:192.168.0.2
となります。なので、WLI-UTX-AG300/Cの設定はそれに合わせて行ってください。
このスクリプトは標準のNetworkManagerを止めてIPアドレスを設定し、hostapdを立ち上げるようになっています。

まずは、PCをアクセスポイント化するわけですが、
$ sudo access_point.sh start
で動くはずですが、たまに起動に失敗するので。
$ sudo service hostapd status
で確認してFailしている場合は
$ sudo service hostapd start
で自分で立ち上げてください。

アクセスポイントを止めるときは
$ sudo access_point.sh stop
でOKです。

PCをアクセスポイント化できていればスマホなどでWifiのアクセスポイントが現れているはずです。
そうなれば、あとは説明書に従ってWLI-UTX-AG300/Cの設定をして、設定が完了したらRoboMaster S1の基板に接続しましょう。

コントローラー設定

ここらへん読んで頑張ってください
http://cryborg.hatenablog.com/entry/2016/09/19/185501

PS4のコントローラーと接続して、コントローラーのLEDが青くなっていることを確認してください。

RoboMaster S1の電源を入れて動かす!

まずはちゃんと組み立てて、スマホで動作できるところまではやっておいてください。
その後乗っ取り基板が正常に接続ができていれば、電源をONにすると通常の接続の場合と同様にモーションコントローラーのLEDが青点滅するはずです。もしうまく行かない場合はモーションコントローラーのLEDは赤点滅になります。その場合は接続を確認してください。
よくある間違いはCANのH/Lが逆だったり、NucleoとCANのトランシーバーの接続のRX/TXが逆だったりします。

電源をONにしたら、しばらくおいておいて、Wifiの通信が確立するまで待ちましょう。
その後、ROSのブリッジノードを以下の通り立ち上げます。
(みんなROS詳しいから大丈夫ですよね)
$ export ROS_MASTER_URI=http://192.168.0.1:11311
$ export ROS_IP=192.168.0.1
$ roscore&
$ roslaunch ros_robomaster_s1_bridge robomaster_s1_bridge_joy.launch

これであとはPS4のコントローラーで操作できます。
通信がたまに途切れたりするので注意してください。
きちんと通信できていると、コントローラーで操作するとそれに合わせて、NucleoのLANのコネクタの右側のLEDがチカチカと点滅します。これで通信できているか確かめられます。
LEDが点滅してい動かない場合は、RoboMasterS1側の接続不良を疑いましょう。

次回

次回は詳細な技術的な内容で書きたいと思います。しばらくお待ちください。

27
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
24