natto_canable¶
CANAbleをSocketCANインターフェースとして使用するためのパッケージです。
canable¶
canable ノードは、CANAble デバイスを使用して CAN 通信を行います。
機能¶
- 指定した SocketCAN インターフェース(デフォルト: can0)へソケットを作成してバインド
- 受信データを別スレッドで常時読み取り、natto_msgs::msg::Can 型でパブリッシュ
- natto_msgs::msg::Can 型のトピックを購読して CAN フレームを送信
- 書き込み失敗時のリトライと、必要に応じたソケット再初期化
- 初期化や書き込み処理でのログ出力(INFO/WARN/ERROR/FATAL)
パラメーター¶
| パラメーター名 | 型 | デフォルト値 | 説明 |
|---|---|---|---|
| can_interface | string | "can0" | 使用する CAN インターフェース名 |
| retry_open_can | bool | true | CAN ソケット初期化のリトライを有効化 |
| retry_write_can | bool | true | 書き込みリトライを有効化 |
| max_retry_write_count | int | 5 | 書き込みの最大リトライ回数 |
| use_fd | bool | false | CAN FD フレームを使用する場合は true に設定 |
パブリッシャー¶
| トピック名 | メッセージ型 | 説明 |
|---|---|---|
| receive | natto_msgs/msg/Can | 受信した CAN フレーム |
サブスクライバー¶
| トピック名 | メッセージ型 | 説明 |
|---|---|---|
| transmit | natto_msgs/msg/Can | 送信する CAN フレーム |
事前準備 (Classicの場合)¶
Classic CAN ~1Mbpsの場合
ファームウェアの書き込み¶
- CANAbleのボタンを押しながらUSBを接続します
USBの場所を確認します/dev/bus/usb/001/002` ですの場合は$ lsusb Bus 001 Device 002: ID 16d0:117e MCS CANable2 b158aa7 github.com/normaldotcom/canable2.git- 権限を設定します
$ sudo chmod 0666 /dev/bus/usb/001/002 - 公式サイト にアクセスし、
candlelightを選択し書き込みます
udevルールの設定¶
-
CANAbleのシリアル番号を確認します
$ lsusb Bus 001 Device 003: ID 1d50:606f OpenMoko, Inc. Geschwister Schneider CAN adapterこの場合$ lsusb -v -d 1d50:606f | grep Serial iSerial 3 004A00433136500C2039384D004A00433136500C2039384Dがシリアル番号になります -
/etc/udev/rules.d/99-canable.rulesを作成し、以下の内容を記述しますSUBSYSTEM=="usb", ATTR{idVendor}=="1d50", ATTR{idProduct}=="606f", ATTR{serial}=="004A00433136500C2039384D", SYMLINK+="can", MODE="0666", \ RUN+="/sbin/ip link set can0 type can bitrate 1000000", \ RUN+="/sbin/ip link set can0 txqueuelen 1000", \ RUN+="/sbin/ip link set can0 up"bitrateは使用するCANの通信速度に合わせて変更してください
-
udevルールを再読み込みします
$ sudo udevadm control --reload-rules $ sudo udevadm trigger - CANAbleを接続し、CANとして認識しているかを確認します
または
$ ls /dev/can /dev/can$ ip a 41: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10 link/can
事前準備 (FDの場合)¶
CAN FD 〜8Mbpsの場合
このリポジトリ を参考に自分でファームをビルド、書き込みしてください udevルールの設定に dbitrate, fd の設定を追加してください
SUBSYSTEM=="usb", ATTR{idVendor}=="1d50", ATTR{idProduct}=="606f", ATTR{serial}=="004A00433136500C2039384D", SYMLINK+="can", MODE="0666", \
RUN+="/sbin/ip link set can0 type can bitrate 1000000 dbitrate 2000000 fd on", \
RUN+="/sbin/ip link set can0 txqueuelen 1000", \
RUN+="/sbin/ip link set can0 up"