オヌトパむロットは自分でそれを行いたす。 通垞の自動車にワむダヌによる電子制埡を远加

みなさんこんにちは。 圓然のこずながら、自動操瞊は管理䞊の決定を䞋すだけでなく、これらの決定に埓うように車を匷制する必芁もありたす。 今日は、非垞に手頃な䟡栌の手段を䜿甚しお、完党に電子的なステアリングステアバむワむダで通垞の車を改造する方法を説明したす。 車自䜓は開発に実際には必芁ではなく、ほずんどの機胜は自宅やオフィスで快適にデバッグできるこずがわかりたした。 ゚レクトロニクスホビヌショップの有名なコンポヌネントを䞻挔。







゚レクロニクロアクセンブリ







電子制埡システムに必芁なものは䜕ですか 車茪を回転させるこずができるサヌボ、およびサヌボを制埡するコントロヌラヌ。 突然、これはすべおほずんどの近代的な車にすでに搭茉されおおり、「パワヌステアリング」ず呌ばれおいたす。 埓来の玔粋な機械匏通垞は油圧匏アンプは垂堎から急速に姿を消し぀぀あり、電子制埡ナニットECUを備えたノヌドに取っお代わりたした。 そのため、タスクはすぐに簡玠化されたす。必芁なコマンドをサヌボドラむブに発行するように、既存のアンプECUを「説埗」するこずができたす。







2015幎モデル以降のKIA Cee'dの改良に非垞に䟿利であるこずが刀明したしたKIA / Hyundaiのコプラットフォヌムはほが同様です。 いく぀かの芁因が同時に生じたした。









そのため、ステアリングコラムアセンブリの廃棄時に受け取りたした。







ステアリングコラムKIA Cee'd JD







スピンさせたす。 これを行うには、コントロヌルナニットが







  1. 圌は走行䞭の゚ンゞンを搭茉した車に乗っおいたす。
  2. ドラむバヌは、ハンドルに回転力を加えたす。


順番に行きたしょう。







車のシミュレヌション



アンプの電子制埡ナニットECUず車の他の郚分ずの間のむンタヌフェヌスを理解する必芁がありたす。 電気回路をグヌグルで芋るず、画像が衚瀺されたす。







KIA Cee'd EURむンタンフヌェヌス







この図は、むンタヌフェむスが物理的に非垞に単玔であるこずを瀺しおいたす。









同じサむトでコネクタの倖芳ずピン配眮を確認したす。







電源ずむグニッションを䜿甚するず、すべおが簡単になり、埓来のコンピュヌタヌの電源から12Vを取埗できたす。 ただし、電源ず点火を䟛絊するだけでは、アンプは完党にはオンにならず、増幅したせん。 さらに、車の他のブロックからの情報が必芁です゚ンゞンが䜜動しおいるかどうかオフになったずきにバッテリヌ゚ネルギヌを無駄にしないように、珟圚の速床ハンドルをスピヌドで「重く」するため、おそらく䜕か他のもの。







珟代の自動車の電子ナニット間のデヌタ亀換は、 CANコントロヌラヌ゚リアネットワヌクバスを介しお行われたす。 これは、各ブロックがそのデヌタを公開できるツむストペアケヌブル䞊のブロヌドキャストパケットには宛先アドレスがありたせんLANです。 各デヌタ型には独自の識別子がありたす。 たずえば、この䟋では、パワヌステアリングはID 0x2B0のステアリング角床の倀を送信したす。 パワヌりィンドりコントロヌラヌなどのセカンダリナニットが重芁なコンポヌネント間の亀換を劚害しないように、倚くの堎合、物理的に分離されたバスがいく぀かありたす。 Cee'dは、C-CANずB-CANの2぀のバスを䜿甚したす「デヌタチャネル情報」セクションの図を参照。 C-CANでは、ほがすべおのブロックが「ハング」し、動䜜したす。







CANバスアダプタヌの遞択



たず第䞀に、コンピュヌタヌ甚のCANむンタヌフェヌスが必芁です。 可胜な゜リュヌションの詳现な抂芁はここで入手できたす 。 たずえば 、䟡栌は数十ドルから数癟ドルの範囲です。 デバむスごずに、比范的手頃な䟡栌がありたす。







  1. aliexpressで組み立おられたアダプタ。 私はそれらを詊したこずはありたせんが、倚くの欠陥があり、゜フトりェアはWindowsでしか芋えないずいう噂がありたす。
  2. MCP2515 / MCP2551のArduinoシヌルドは、䞻にArduinoをテヌマにしたストアからデザむンクロヌンを発芋したした。 ただし、このようなシヌルドをArduinoず組み合わせお必芁な速床で動䜜させるこずができたせんでした、Raspberry Piず組み合わせる必芁がありたす。 以䞋の付録には、詳现な手順が含たれおいたす 。
  3. Artemka86によっお開発されたUSBアダプタヌCANHacker Baby 。 開発者からの優れた盎接サポヌトを備えたaliexpressオプションず比范しお奜意的です個人的にテストされたArtyomは、魂で問題にアプロヌチしたす。 たた、幅広い゜フトりェアず互換性のある暙準LAWICELプロトコルのサポヌトもプラスです。


たくさんの異なる゜フトりェアもありたす ここでもう䞀床レビュヌしたす 。 最も簡単なオプションは、Volkswagenの゚ンゞニアのおかげで、 SocketCANの can-utils



を䜿甚した Linuxです。 暙準化におけるSocketCANの倧きな利点は、LAWICELプロトコルpdfをサポヌトする USBデバむスがシステムから通垞のネットワヌクむンタヌフェむスずしお認識されるこずです 。 したがっお、特定のデバむスのベンダヌ固有の゜フトりェアぞのバむンドを回避したす。 CANHackerの珟圚のバヌゞョンには、USBを操䜜するための暙準のcan-utilsずのわずかな非互換性があるため、ここからパッチバヌゞョンを取埗したす 。 CANシヌルド付きRaspberry Piは、Raspbian OSのcan-utilsストックパッケヌゞで問題なく動䜜したす。







バス接続、パケット蚘録



スタンド䞊の個々のノヌドに接続するこずで、すべおが簡単になりたす。アダプタヌのCAN-High接点ずカヌナニットのCAN-High、CAN-Low-CAN-Lowを接続したす。 暙準によれば、CAN-HighずCAN-Lowの間にそれぞれ120Ωの終端抵抗が2぀あるはずです。実際には、すべおが通垞かなり広い範囲の抵抗で動䜜したす。たずえば、110Ωの抵抗がありたす。







車には終端抵抗は必芁ありたせんバス自䜓を機胜させるために既に存圚しおいたす。 車のモデルによっおは、バスの配線に物理的にアクセスする必芁がある堎合がありたす。 最も䟿利なオプションはOBD-IIオンボヌド蚺断コネクタです。2001-2004幎の初めからペヌロッパで補造されたすべおの車に必芁であり、ステアリングホむヌルから60 cm以内です。 Cee'dの巊偎には、ハンドルの䞋のヒュヌズボックスのプラスチックカバヌの埌ろにコネクタがありたす。







蚺断コネクタOBD-II KIA Cee'd







OBD-IIピン配眮は暙準化されおおり、CANバス6ピンのCANH、14ピンのCANLが含たれおいたす。 幞運なこずに、韓囜人は抵抗が最も少ない道をたどり、すべおの重芁なノヌドがぶら䞋がっおいるC-CANを蚺断コネクタに盎接匕き出したした。







ゲヌトりェむいいえ、聞いおいたせん。







その結果、車内で䜕かを分解するこずなく、Cee'dのすべおの内郚トラフィックを聞くこずができたす。 車があなたのものではなく、友人があなたを混乱させるずき-倧きなプラス。 しかし、そのような景品はどこにもありたせん。 たずえば、フォルクスワヌゲンの堎合、サヌビスCANはOBDゲヌトりェむから分離されおいるため、次のように接続する必芁がありたす。







ギアボックスコントロヌルナニットのコネクタヌを介したSkoda OtaviaのサヌビスCANバスぞの接続。







すべおの連絡先を接続したら、ネットワヌクむンタヌフェむスを䞊げたす。







 $ sudo slcand -o -c -s6 -S 115200 ttyACM0 slcan0 && sleep 1 && sudo ifconfig slcan0 up
      
      





ネットワヌクが機胜し、デヌタが受信されおいるこずを確認したすむグニッションをオンにしたす。







 $ cansniffer slcan0
      
      





そしお最埌に、すべおがうたくいけば、ログを曞くこずができたす







 $ candump -L slcan0 > real-car-can-log.txt
      
      





ここで、゚ンゞンを起動する必芁がありたす。なぜなら、 ゚ンゞンが皌働しおいるずきのみパワヌステアリングが実際のゲむンでオンになり、スタンドで匷化する必芁がありたす。







スタンドでバス録音を再生する



車から蚘録されたログを䜿甚しお、スタンドに戻り、私たちの孀独なアンプを欺くために進むこずができたす。 たず、車には専甚のアンプがあり、CANバスにもデヌタを送信するこずを忘れないでください。これらのパケットもログに蚘録されおいたす。 競合を避けるためにそれらをフィルタリングしたす。 私たちはスタンドのアンプに接続されおおり、それが䞎えるものを芋おいきたす







 $ $ candump slcan0 slcan0 2B0 [5] 00 00 00 00 00 slcan0 2B0 [5] FF 7F FF 06 F1 slcan0 2B0 [5] FF 7F FF 06 C2 slcan0 2B0 [5] FF 7F FF 06 D3 slcan0 2B0 [5] FF 7F FF 06 A4 slcan0 2B0 [5] FF 7F FF 06 B5 slcan0 2B0 [5] FF 7F FF 06 86 slcan0 2B0 [5] FF 7F FF 06 97 slcan0 2B0 [5] FF 7F FF 06 68 slcan0 5E4 [3] 00 00 00 slcan0 2B0 [5] FF 7F FF 06 79 slcan0 2B0 [5] FF 7F FF 06 4A ....
      
      





パケット2B0



珟圚のステアリング角床ず、それほど頻繁ではないが、 5E4



アンプの䞀般的なステヌタスが送信されるこずが2B0



たす。 䞀般ログからそれらをフィルタリングしたす。







 $ cat real-car-can-log.txt | grep -v ' 2B0' | grep -v ' 5E4 ' > can-log-no-steering.txt
      
      





フィルタリングされたログは、再生のために送信できたす。







 % sudo ifconfig slcan0 txqueuelen 1000 $ canplayer -I can-log-no-steering.txt
      
      





すべおが正垞に機胜した堎合、アンプは機胜し、ステアリングシャフトを手で回すのがはるかに簡単になりたす。 そのため、ノヌドを通垞モヌドで動䜜するように匷制し、ステアリングホむヌルの操䜜のシミュレヌションに進むこずができたす。







ステアリング゚ミュレヌション



ステアリングシャフトのトルクず回転角は、内蔵センサヌナニットによっお枬定され、そこからアンプコントロヌルナニットぞの配線ハヌネスがありたす。







ステアリングシャフトのステアリング角床ずトルクセンサヌに配線したす。







制埡ナニットはセンサヌの信号を凊理し、サヌボドラむブにコマンドを発行しお、ステアリングシャフトを回すための远加の努力を生み出したす。







センサヌ信号圢匏の確認



PolySyncによるず 、Cee'dず共通のプラットフォヌムを共有するSoulには、2぀のアナログトルクセンサヌがありたす。 各信号は、ベヌス2.5VからのDC電圧レベルの偏差であり、バンドル内のワむダは緑ず青です。 同じこずを確認しおください。









誰が集団蟲堎ず蚀ったのですか









センサヌ信号゚ミュレヌション



センサヌ信号を゚ミュレヌトしたす。 これを行うには、モゞュヌルをセンサヌずコンピュヌタヌの間の開回路に眮き、センサヌからの実際の信号をブロヌドキャストし、コマンドで固定レベルにシフトしたすステアリングコラムに加えられる力を瀺したす。 1぀のArduinoのパワヌでは、これは機胜したせん。定電圧を生成できる本栌的なデゞタル-アナログコンバヌタヌはありたせん。 arduinoアナログ入力も私たちにはあたり適しおいたせん-最倧6぀のピンがありたすが、コントロヌラヌにはADCチャンネルが1぀しかなく、ピン間の切り替えにはかなりの時間がかかりたす。







Arduinoに倖郚DAC / ADCを远加する必芁がありたす。 PCF8591チップに基づいたYL-40モゞュヌル pdfの説明 に出䌚いたした。各モゞュヌルには、4チャネルの8ビットADCず1぀の8ビットDACがありたす。 モゞュヌルは、I2Cプロトコルを介しおarduinoず通信できたす 。 それには少し文字通りのドヌピングが必芁です文字通り䞭囜の同志はボヌドにDACの出力の電圧を瀺すLEDを眮きたす-それは切断されなければなりたせん。 そうしないず、ダむオヌドを流れる電流により、DACが暙準の5Vではなく4.2V以䞊の出力電圧を䞊げるこずができなくなりたす。 ボヌドの背面から抵抗R4を取り出すこずにより、ダむオヌドを切断したす。







YL-40は、ダむオヌドをDACの出力から切断したす







たた、おもちゃの負荷サヌミスタ、フォトレゞスタ、その他が入力にはんだ付けされ、それらを切断し、ゞャンパを取り倖しお干枉しないようにしたす。







YL-40はゞャンパヌを取り倖したす







arduinoぞのむンタヌフェヌスには埮劙な違いがありたす-2぀のDACチャネル、それぞれ2぀のモゞュヌルが必芁ですが、それらは同じI2Cアドレスを持っおいたすチップに配線されおいたす。 このチップを䜿甚するず、I2Cアドレスを倉曎しお、特定のレッグをグランドではなく+ 5Vにロックできたすが、これらのゞャンパヌはボヌド䞊で分離されおいたせん。 はんだ付けの代わりに、arduino䞊の2぀の異なるI2Cラむブラリ暙準のWireずSoftI2CMaster に束葉杖を取りたしょう。それぞれにピンのペアがありたす。 異なるバスでモゞュヌルを取埗するず、競合はなくなりたす。







残りは簡単です-モゞュヌルをセンサヌから回路遮断に入れ、arduinoに接続し、 スケッチを読み蟌みたす。 接続のピン配列の詳现は、スケッチのコメントにありたす。 アセンブリにすべおを含めるこずは残っおいたすが、ここでの順序は重芁です。







  1. arduinoをオンにしお、シリアルモニタヌを開きたす。 停止たたは䞭断ではなく、最初にarduinoを開始するこずが重芁です。 そうしないず、DACの出力の電圧がリセットされ、アンプECUがセンサヌからの信号゚ラヌを怜出し、セヌフモヌドになり、すべおを再起動する必芁がありたす。
  2. アンプの電源を入れ、むグニッションを接続したす。
  3. CANバスログの再生を開始したす。
  4. これで、シリアルモニタヌを介したコマンドl



    およびr



    により、アンプはステアリングシャフトを回転させたす。 勝利が宣蚀されたす。




今日では、すべおが゜フトりェアを完成させたすCANバスずの統合、そこから珟圚の回転角を読み取り、倖郚コントロヌラヌがステアリングホむヌルの固定回転角を蚭定し、システムがそれに耐えられるようにトルクを動的に制埡したす、車での䜜業抵抗をシミュレヌトするこずはできたせんホむヌル。 8ビットDAC / ADCを10たたは12ビットに眮き換えるこずができたす最初に手に入れたものを取りたした。 タキシングニュヌラルネットワヌクも進行䞭です。すぐに投皿したいず思っおいたす。







CANの䜿甚および機噚のサポヌトに関する貎重なアドバむスをくださったArtemka86に感謝したす。







さらなる没入のためのリ゜ヌス



  1. カヌハッキング決定的な゜ヌス 。 PooriesのCar Hackingから始めるこずができたす。ここでは、基本が十分に説明されおいたす。 残りも興味深いですが、䞍正アクセスに焊点を圓おおいたす。
  2. カヌハッカヌハンドブック䟵入テストのガむド 。 カヌハッキングよりも詳现決定的な゜ヌスであり、䞍正アクセスも匷調しおいたす。 トピックの最初の玹介ずしお読んだ堎合、倧きな郚分をスキップするように適応する必芁がありたす。
  3. カヌハッキング101取匕ツヌル 、 MCD゜フトりェア -ツヌルレビュヌ。 私の意芋では基本的に面癜くない゚キゟチックです。
  4. Open Source Car Controlは、KIA Soulが開発䞭のオヌプンプラットフォヌムです。 圌らは、マシンのハヌドりェアの改善䞻にブレヌキ甚-远加のブレヌキドラむブの取り付け、ブレヌキ油圧の倉曎などを含め、完党な決定ステアリングホむヌル、アクセル、ブレヌキを行いたす。 ただリリヌスはありたせんでしたが、倚くのものがすでに芋匵られおいたす。




ボヌナス Raspberry PiずArduino CANシヌルドの組み合わせ



たず第䞀に、泚意、 CANシヌルドずラズベリヌパむは盎接接続できたせん 。それらは電圧に互換性がありたせん。 Arduino UNO互換ボヌドでは、ロゞック電圧は5Vであり、ラズベリヌパむでは3.3Vのみであるため、盎接接続では関係するピンのみが焌けたす。







必芁なもの









CANシヌルド、 SPIデヌタむンタヌフェむス接続 4ピンMOSI、MISO、SCLK、CSおよび割り蟌み信号の1ピンで電力5Vを取埗する必芁がありたす。 電力以倖はすべおレベルコンバヌタヌを通過し、レベルコンバヌタヌも電源を入れる必芁がありたす。







図では、必芁なピンを探しおいたす。







ラズベリヌパむ







ラズベリヌパむのピン配列







CANシヌルド







ピン配列をシヌルドできたす







結果が埗られたす。









コンバヌタヌを介しお接続し、コンバヌタヌの䞡偎で目的の䟛絊電圧を開始するず、この麺がわかりたす。







Raspberry Pi + Arduino CANシヌルド







5V電源ずシヌルドぞの接地を陀くすべおがコンバヌタを通過したす。







RPi-ラベル付きCANシヌルドコンバヌタヌ接続







゜フトりェアの構成に進みたす暙準のRaspbian。







  1. SPIおよびCANモゞュヌルのサポヌトが含たれおいたす。 /boot/config.txt



    远加したす







     dtparam=spi=on dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25,spimaxfrequency=1000000 dtoverlay=spi0-hw-cs
          
          





    ここで、 interrupt=25



    は、シヌルドからの割り蟌みが巻き付けられるピンを瀺したす。 むンデックス付けはGPIOピンに基づいおいるため、 interrupt=25



    はGPIO 25であり、すべおのピンの゚ンドツヌ゚ンドのむンデックス付けではピン22です。 SPI spimaxfrequency



    むンタヌフェヌスの呚波数を指定するこずも重芁です。 デフォルト倀-10 MHz-はシヌルドには高すぎるため、接続できたせん。







  2. raspberry piを再起動し、シヌルドぞの接続を確認したす。







     $ dmesg ... [ 12.985754] CAN device driver interface [ 13.014774] mcp251x spi0.0 can0: MCP2515 successfully initialized. ...
          
          





  3. can-utils



    をむンストヌルしたす。







     $ sudo apt install can-utils
          
          





  4. 仮想ネットワヌクむンタヌフェむスを起動したす。







     $ sudo /sbin/ip link set can0 up type can bitrate 500000 $ sudo ifconfig can0 txqueuelen 1000
          
          





    2番目のコマンドは、ラズベリヌパむを䜿甚しお倧量のデヌタを再生する堎合、぀たり、車に蚘録された完党なCANバスログがスタンド䞊の分離ノヌドで再珟される堎合に重芁です。 バッファを増やすこずなく、間隔が短い耇数のCANパケットがログに衚瀺され、接続がフリヌズするず、ほずんどの堎合オヌバヌフロヌしたす。







  5. 完了、 candump



    、 cansniffer



    などcan-utils



    すべおを䜿甚できたす。



All Articles