pip3 install python-can
pip3 install python-can-remote
pip3 install pygame
それぞれのCANメッセージのクラスが用意されている。 すべてのクラスは、以下のメソッドを持つ
-
setDataFromCANMessage CANメッセージから、メッセージのパラメータにパースする
-
setDataFromInt 変数を受け取り、メッセージごとのパラメータにセットする
-
dataParser メッセージごとのパラメータにパースする(まだ可読状態ではない)
-
toInt 可読状態ではないパラメータをInt型に変換して可読状態にする
-
view メッセージの各パラメータを表示する
-
toData メッセージごとのパラメータから、CANメッセージのデータに変換する
- setDataFromInt
- toData
- setDataFromCANMessage
- (内部的に)dataParser
- (内部的に)toInt
- toData
- sender.py の接続先を以下に修正する
なお、「ws://localhost:54701/」は python-can-remote のサーバIPに合わせる
self.bus = can.interface.Bus('ws://localhost:54701/', bustype='remote', preserve_timestamps=True)
- python-can-remote を起動する
python -m can_remote --interface=virtual --channel=0 --bitrate=500000
- ハンコンの値を取得して、CANに流す
python3 handle_controller.py
- CANの値を確認する
python3 python-can-remote_viewer.py
Lawicel CAN を USB接続した状態で、以下のコマンドを実行するとCANインタフェースを python-can で制御可能になる
sudo slcand -o -s6 -t hw /dev/ttyUSB0
sudo ip link set up can0
なお、Lawicel CAN をつなぎ直した場合は、 /dev/ttyUSBX の X が 0 からインクリメントされるかもしれないので注意。
以下のコマンドを実行して、CANが流れているかを確認できる
candump slcan0
- sender.py の接続先を以下に修正する
self.bus = can.interface.Bus(bustype='socketcan', channel="slcan0", bitrate=500000, app_name='python-can')
-
「PIXKITでCANインタフェースをopenする方法」に従って、CANを読み書きできるようにする
-
ハンコンの値を取得して、CANに流す
python3 handle_controller.py
- PIXKITのコントローラーを「seld driving」に変更して、CANの制御を受け付けるようにする
このエミュレーションでは、ハンドルコントロールによる操作をGUIソフトウェアで行える。 また、送られたコマンドを元にPIXKITからのフィードバックメッセージも送信される。(ID : 500, 501, 502)
- sender.py のバスをリモートにする
例
self.bus = can.interface.Bus('ws://localhost:54701/', bustype='remote', preserve_timestamps=True)
- python-can-remoteを立ち上げる
python -m can_remote --interface=virtual --channel=0 --bitrate=500000
- ハンドルのエミュレーションプログラムを立ち上げる
python3 emulate_handle.py
- PIXKITのエミュレーションプログラムを立ち上げる
python3 emulate_feedback_generator.py