JetsonとEtherCATデバイス間の通信を確立する方法
**EtherCAT(Ethernet for Control Automation Technology)**は、IEEE 802.3 Ethernetスタンダードに基づくオープンソースの高性能リアルタイム産業用Ethernetフィールドバスプロトコルです。マスター・スレーブアーキテクチャで動作し、産業オートメーション環境における優れた速度、精度、柔軟性で知られています。
この文書では、recomputer robotics J401をEtherCATマスターとして、MyActuator X4をスレーブとして使用し、JetsonとEtherCATデバイス間の通信を確立する方法を実演します。


1. ハードウェア接続
EtherCATマスターとして、Jetsonは通常そのEthernetインターフェースを使用してEtherCATスレーブデバイスに接続します。

多くのスレーブデバイスは標準的なEthernetポートを提供していないため、Ethernet接続を**4ピンインターフェース(Tx+、Tx–、Rx+、Rx–)**に変換するアダプターが必要になることがよくあります。

物理的なEtherCAT接続を確立した後も、ほとんどのスレーブデバイスには追加の外部電源が必要です。
2. EtherCATドライバーのインストール
このセクションでは、JetPack 6.2 BSPに対応するL4T 36.4.3を例として、JetsonにEtherCATドライバーをインストールする方法を示します。
EtherCATドライバーのビルドに必要な依存関係をインストールします:
sudo apt update
sudo apt install build-essential cmake libtool autoconf automake
EtherCATドライバーのソースコードを取得し、コンパイルしてインストールします:
git clone https://gitlab.com/etherlab.org/ethercat.git
cd ethercat
./bootstrap # to create the configure script, if downloaded from the repo
./configure --sysconfdir=/etc
make all modules
sudo make modules_install install
sudo depmod -a
ドライバーが正常にインストールされたことを確認するには、以下のコマンドを実行します。
ec_masterとec_genericの2つのカーネルモジュールが表示されるはずです:
sudo lsmod | grep "ec_"

3. EtherCATの設定
EtherCATドライバーをインストールした後、マスターとスレーブデバイス間の通信を有効にするためにいくつかの設定が必要です。
まず、/etc/ethercat.confの設定ファイルを編集します:
sudo vim /etc/ethercat.conf
Jetsonに接続されているEthernetインターフェースの名前に応じて、/etc/ethercat.confの2つのパラメータを変更します:
MASTER0_DEVICE="eno1" # Replace eno1 with the Ethernet interface used for EtherCAT
DEVICE_MODULES="generic"
eno1をEtherCATに使用するEthernetインターフェースに置き換えてください。ifconfigコマンドを使用してインターフェース名を確認できます。
EtherCATサービスを再起動した後、/devディレクトリにEtherCATマスターデバイスが表示されるはずです:
sudo systemctl restart ethercat
ls /de/EtherCAT*

(オプション)/dev/EtherCATが見つからない場合は、カーネルモジュールを手動でロードしてみてください:
sudo modprobe ec_master devices="eno1" # Replace eno1 with the Ethernet interface used for EtherCAT
sudo modprobe ec_generic
sudo systemctl restart ethercat
eno1をEtherCATに使用するEthernetインターフェースに置き換えてください。
(オプション)EtherCATに使用するEthernetインターフェースがNetworkManagerによって占有されている場合があります。以下のコマンドを使用して解放できます:
sudo nmcli dev set eno1 managed no # Replace eno1 with the Ethernet interface used for EtherCAT
sudo nmcli dev set eno1 managed on # Replace eno1 with the Ethernet interface used for EtherCAT
eno1をEtherCATに使用するEthernetインターフェースに置き換えてください。
4. JetsonとEtherCATスレーブ間の通信テスト
JetsonでEtherCATマスターノードが正しく初期化され、ハードウェア接続が適切に確立されたことを確認した後、ターミナルでJetsonとEtherCATデバイス間の通信をテストできます。
EtherCATデバイスをスキャンし、データ送信をテストしてパケット損失率が正常範囲内にあるかを確認します:
sudo ethercat rescan
sudo ethercat master

バス上のすべてのEtherCATデバイスをリストします:
sudo ethercat rescan
sudo ethercat slaves -v

インデックス0のEtherCATデバイスの問題を表示します:
sudo ethercat rescan
sudo ethercat pdos -p 0 #0 to n
-pの後のパラメータは0からnまでの任意の値にできます。

5. 例 – JetsonでEtherCATモーターを制御する(MyActuator X4)
前のセクションの設定と検証手順に基づいて、Jetsonデバイスを使用してEtherCATモーターを制御できるようになったはずです。
このセクションでは、MyActuator X4を例として、JetsonからEtherCATモーターを制御する方法を実演します。
このセクションは参考用のみです。各EtherCATモーターは異なる通信プロトコルを使用するため、特定のデバイスで使用されるプロトコルに応じて例を適応させる必要があります。
この例では、MyActuator X4 EtherCATモーターを制御するためのサンプルコードを提供します。GitHubからダウンロードしてコンパイルしてください:
git clone https://github.com/jjjadand/ethercat-myctor.git
cd src/build
cmake ..
make
この例はEtherCAT-Masterに基づいて実装されています。プログラムのフローチャートを以下に示します:
プログラムフローチャート
┌──────────────────────────────────────┐
│ 1. Master Initialization │
├──────────────────────────────────────┤
│ ecrt_request_master() │
│ ecrt_master_create_domain() │
│ ecrt_master_slave_config() │
│ Configure Distributed Clock (DC) │
│ Register PDO entries (RxPDO/TxPDO) │
│ ecrt_master_activate() │
│ Get domain memory pointer │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ 2. PREOP → SAFEOP Transition │
├──────────────────────────────────────┤
│ Slave boots in PREOP │
│ Master exchanges SDO if needed │
│ (optional: set 0x6060 = CSP) │
│ DC start time prepared │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ 3. SAFEOP → OP Transition │
├──────────────────────────────────────┤
│ Domain becomes active (WKC > 0) │
│ Application loop starts running │
│ Master supplies application time │
│ Master synchronizes DC clocks │
│ Slave goes OP (operational) │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ 4. CiA-402 State Machine │
├──────────────────────────────────────┤
│ Write ControlWord = 0x0006 (Shutdown)│
│ Wait READY_TO_SWITCH_ON │
│ Write ControlWord = 0x0007 (SwitchOn)│
│ Wait SWITCHED_ON │
│ Write ControlWord = 0x000F (EnableOp)│
│ Wait OPERATION_ENABLED │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ 5. Enter CSP Motion Operation │
├──────────────────────────────────────┤
│ Write Mode of Operation (0x6060=8) │
│ Read Actual Position (0x6064) │
│ Initialize Target Position (607A) │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ 6. Real-Time Cyclic Operation │
├──────────────────────────────────────┤
│ loop at 1 kHz (or higher): │
│ - Sleep until next cycle │
│ - ecrt_master_application_time() │
│ - ecrt_master_sync_reference_clock │
│ - ecrt_master_sync_slave_clocks │
│ - Receive / process domain │
│ - Generate new target position │
│ - Write ControlWord = 0x000F │
│ - Write OperationMode = 8 (CSP) │
│ - Write new TargetPosition │
│ - Queue & send domain │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ 7. Monitoring & Fault Handling │
├──────────────────────────────────────┤
│ Read status word (0x6041) each cycle │
│ Detect faults (bit3) │
│ Detect target reached (0x0400) │
│ Optionally read torque/velocity │
│ Execute FAULT RESET if needed │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ 8. Shutdown │
├──────────────────────────────────────┤
│ Stop real-time thread │
│ Write ControlWord=0 (disable) │
│ Release EtherCAT master │
└──────────────────────────────────────┘
リアルタイムカーネルなしでJetson上のEtherCATモーターを制御する場合、EtherCATデバイスとの安定した同期を確保するためにCPU周波数を固定することが推奨されます。
サンプルをコンパイルした後、ターミナルで以下のコマンドを実行してください:
sudo jetson_clocks # lock CPU frequency for stability
sudo ./ethercat_master
プログラムを実行した後、約2秒待つとモーターがループ動作を開始します。

リソース
技術サポート & 製品ディスカッション
弊社製品をお選びいただき、ありがとうございます!お客様の製品体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルをご用意しています。