1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

備忘録 ラズパイ5 ROS2 勉強再開 ⑥ CANopen その1 準備

Last updated at Posted at 2024-10-27

 ROS2でCANopenのモータを回すところまで進めたいと思います。なかなかこれはという文献にぶち当たっていません。
 とりあえず、CANバスで、ラズパイ5とモータをつなぐところから始めます。

最初に用意するのはラズパイ5のCANインターフェース

 SPI接続の1チャネルCANバス・インターフェースRS485 CAN HATです。

 アマゾンで購入しました。
https://www.amazon.co.jp/MCP2515-RS485%E9%80%9A%E4%BF%A1-%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB-%E3%83%A9%E3%82%BA%E3%83%99%E3%83%AA%E3%83%BC%E3%83%91%E3%82%A4-Raspberry/dp/B08LCKLHBX

 PCをUSB経由でCANバスに接続する装置Ixxat USB-to-CAN V2 compactを入手します。マルツで購入しました。

環境

  • Raspberry Pi 5 8GB
  • 追加ボード;NVMe Base for Raspberry Pi 5 (NVMe Base by Pimoroni)
  • Crucial クルーシャル P2シリーズ 500GB 3D NAND NVMe PCIe M.2 SSD CT500P2SSD8
  • Ubuntu Desktop 24.04LTS(64-bit)
  • ROS2;Jazz

使用したモータ

 オリエンタルモーター のブラシレスモーターBLVシリーズ Rタイプを使います。同社のWebショップで購入しました。
  BLMR5100K-A-B + BLVD-KRD

CANインターフェース

 RS485 CAN HATをラズパイ5に取り付けます。I/Oピンにさすだけですが、純正のFANがあるため、そのままでは刺さりません。20ピンx2の下駄を付けます。ねじも六角スペーサを使ってかさ上げします。

 エディタnanoでデバイス・ドライバを組み込みます。

$ sudo nano /boot/firmware/config.txt

 次の2行をファイルの最後に追加します。

dtparam=spi=on  <-ほかのところで設定されていなかったら
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25

 12000000は水晶発振子の周波数です。25はGPIO25ピンで、int信号で使われます。物理的には22番ピンです。mcp2515-can0は、SPIバスのピンの接続指定です。CE0(チップ・セレクト信号で物理ピンでは24番)を使います。残りは標準的に使われる、MOSI;19番ピン、MISO;21番ピン、SCK;23番ピンです。
 20ピンx2のソケットにさすだけなので、ピン番号は気にすることはありません。

 CTRL+Oで上書き、CTRL-Xでエディタを抜けます。rebootします。

$ dmesg | egrep "can|spi"

を実行して、

$ sudo dmesg | egrep "can|spi"
[    0.000000] Linux version 6.8.0-1013-raspi (buildd@bos03-arm64-044) (aarch64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #14-Ubuntu SMP PREEMPT_DYNAMIC Wed Oct  2 15:14:53 UTC 2024 (Ubuntu 6.8.0-1013.14-raspi 6.8.12)
[    0.028745] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page
[    0.028751] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page
[    0.028756] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page
[    0.028762] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
[    0.819276] usb usb1: Manufacturer: Linux 6.8.0-1013-raspi dwc2_hsotg
[    1.062037] usb usb2: Manufacturer: Linux 6.8.0-1013-raspi xhci-hcd
[    1.062487] usb usb3: Manufacturer: Linux 6.8.0-1013-raspi xhci-hcd
[    1.063447] usb usb4: Manufacturer: Linux 6.8.0-1013-raspi xhci-hcd
[    1.063819] usb usb5: Manufacturer: Linux 6.8.0-1013-raspi xhci-hcd
[    3.720866] mcp251x spi0.0 can0: MCP2515 successfully initialized.

だと、ドライバが組み込まれています。

sudo /sbin/ip link set can0 up type can bitrate 500000

で、CANデバイスをセットします。このインターフェースのデフォルトbitrateが500kなので、その数値を書いていますが、1Mでも通ることもあります。

$ sudo /sbin/ip link set can0 up type can bitrate 500000
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 2c:cf:67:30:d7:8f brd ff:ff:ff:ff:ff:ff
    inet 192.168.111.110/24 brd 192.168.111.255 scope global dynamic noprefixroute eth0
       valid_lft 85855sec preferred_lft 85855sec
    inet6 240f:6d:2c00:1:2ecf:67ff:fe30:d78f/64 scope global dynamic noprefixroute
       valid_lft 279sec preferred_lft 279sec
    inet6 fe80::2ecf:67ff:fe30:d78f/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10
    link/can
4: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 2c:cf:67:30:d7:90 brd ff:ff:ff:ff:ff:ff

 CAN用ユーティリティをインストールします。
 ID=12に設定したモータのコントローラにダミーデータを送信します。

$ sudo apt install can-utils

$ candump can0 &

$ cansend can0 012#45
$   can0  012   [1]  45

TMCL IDE for MS Windows

 TMCLという会社のCANopen用ビューワ(無償)です。現在、アナログ・デバイセズの傘下に入っているようです。

 Windows11マシンにインストールします。
 C:ドライブのAnalog Devicesフォルダにインストールされます。実行ファイルは"C:\Analog Devices\TMCL-IDE-Rel4.2.0\V4.2.0\TMCL-IDE.exe"です。
 オリエンタルモーター のBLVD-KRD用edsファイルBLVD-KRD_CANopen_V200.edsをダウンロードします。

 "C:\Analog Devices\TMCL-IDE-Rel4.2.0” にUserEdsフォルダを作り、上記のedsファイルをコピーしておきます。

IxxatのUSB-to_CAN V2 Compact

 上記のソフトを利用するために、Windows用CANインターフェースを入手します。
 利用できるインターフェース機器の一部です。ここでは、Ixxat (USB-to-CAN V2 Compact)を使っています。

  • CAN-USB/2 (ESD)
  • Leaf Light v2 (Kvaser)
  • IPEH-002021 (Peak)
  • Ixxat (USB-to-CAN V2 and USB-to-CAN V2 Compact)
  • RTMI(USB-2-RTMI?)

 VCI V4 - Windows 11, 10 [Driver, canAnalyser-Mini, Manuals, LabView and other add-ons]
をダウンロードし、インストールします。

 IxxatのUSB-to_CAN V2 CompactとPCをUSBケーブルで接続します。

動作確認

 TMCL-IDE.exeをダブルクリックしてTMCL IDE for MS Windowsを起動します。USB-to_CAN V2 Compactを見つけて左のメニューに項目が追加されています。

TMCL101.png

 CAN1:CANopen-IXXAT portをクリックすると、右エリアに操作パネルが表示されます。
 Serach Node ID'sに、今回設定した12の前後のIDを入力し、Connectボタンをクリックします。
 モータ・コントローラを見つけてきます。

TMCL102.png

 画面下には、CANバスのやり取りが表示されています。現在のバージョンでは、CANopenの命令をデコードする機能があります。

 この一連の操作をしている前に、ラズパイでは、

$ candump can0 &

を起動しておきます。CANバスを流れるコードがロギングされています。

 can0  08C   [8]  20 81 11 00 00 00 00 00
  can0  08C   [8]  20 81 11 00 00 00 00 00
  can0  60C   [8]  40 60 60 00 00 00 00 00
  can0  58C   [8]  4F 60 60 00 01 00 00 00
  can0  60C   [8]  2F 60 60 00 00 00 00 00
  can0  58C   [8]  60 60 60 00 00 00 00 00
  can0  001   [8]  88 00 00 00 00 00 00 03
  can0  003   [8]  88 00 00 00 00 00 00 03
  can0  004   [8]  88 00 00 00 00 00 00 03
  can0  005   [8]  88 00 00 00 00 00 00 03
  can0  60A   [8]  40 18 10 01 00 00 00 00
  can0  60A   [8]  80 18 10 01 00 00 04 05
  can0  60B   [8]  40 18 10 01 00 00 00 00
  can0  60B   [8]  80 18 10 01 00 00 04 05
  can0  60C   [8]  40 18 10 01 00 00 00 00
  can0  58C   [8]  43 18 10 01 BE 02 00 00
  can0  60C   [8]  40 18 10 02 00 00 00 00

接続

 後になりましたが、上記の作業を行う前に、次のように接続をしておきます。

bldc5000.png

IMGP2226.png

サポートソフト MEXE02 Ver.4

 オリエンタルモーターのサポート・ソフト(無償)をインストールします。とても機能が豊富です。

 USBケーブルをPCとコントローラBLVD-KRDに接続します。このソフトはUSB経由でやり取りをするので、CANバスにはデータはほとんど流れません。
MEXE02をインストールします。
起動します。COMポートを選択します。
 画面上部でCOMポートを選択し、ONします。
(m1)簡易通信設定を左のメニューから選びます。
 簡易設定を開始しますをチェックします。ノードIDを選択します。12にしました。ドライバへ反映をクリックします。

mexe102a.png

 コントローラBLVD-KRDの見えるところに、ID=12と書いたラベルを貼っておきます。

(m2)リモート運転を左のメニューから選択します。リモート運転モードをチェックします。S-ONをONにします。モータからシャリシャリという音が聞こえてきます。矢印のアイコンを押して、モータが回転するかを確認します。

mexe101.png

 左のメニューから、(p5)CANopen object通信初期値・設定を選択します。
 一番下までスクロールします。
 Mode of operationがProfile velocity modeになっています。このまま利用します。その下には、PDOの設定が表示されています。このまま利用します。

mexe103.png

 CANopenやツールの使い方は、下記の記事を参照してください。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?