.. note::
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
**参加する理由は?**
- **エキスパートサポート**:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
- **学び&共有**:ヒントやチュートリアルを交換してスキルを向上させましょう。
- **独占的なプレビュー**:新製品の発表や先行プレビューに早期アクセスしましょう。
- **特別割引**:最新製品の独占割引をお楽しみください。
- **祭りのプロモーションとギフト**:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[|link_sf_facebook|]をクリックして今すぐ参加しましょう!
.. _py_cliff:
5. 崖検出
===========================
PiCar-Xに少し自己保護意識を与えて、自身のグレースケールモジュールを使用して崖からの突進を避けるようにしましょう。
この例では、車は休止状態になります。
もし車を崖(段差)のほうへ押すと、緊急的に起動して後退します。
**コードの実行**
.. raw:: html
.. code-block::
cd ~/picar-x/example
sudo python3 5.cliff_detection.py
**コード**
.. note::
以下のコードを **変更/リセット/コピー/実行/停止** することができます。しかし、それをする前に、 ``picar-x/example`` のようなソースコードのパスに移動する必要があります。コードを変更した後、直接実行して効果を確認できます。
.. raw:: html
.. code-block:: python
from picarx import Picarx
from time import sleep
px = Picarx()
# px = Picarx(grayscale_pins=['A0', 'A1', 'A2'])
# manual modify reference value
px.set_cliff_reference([200, 200, 200])
last_state = "safe"
if __name__ == '__main__':
try:
while True:
gm_val_list = px.get_grayscale_data()
gm_state = px.get_cliff_status(gm_val_list)
# print("cliff status is: %s" % gm_state)
if gm_state is False:
state = "safe"
px.stop()
else:
state = "danger"
px.backward(80)
if last_state == "safe":
sleep(0.1)
last_state = state
except KeyboardInterrupt:
print("\nKeyboardInterrupt: stop and exit")
finally:
px.stop()
sleep(0.1)
**どのように動作するのか?**
崖を検出する機能は次のようになります:
* ``get_grayscale_data()``:このメソッドは直接3つのセンサーの読み取り値を出力します。右から左に向かっています。エリアが明るいほど、得られる値が大きくなります。
* ``get_cliff_status(gm_val_list)``:このメソッドは3つのプローブの読み取り値を比較し、結果を出力します。結果が真であれば、車の前方に崖があることが検出されます。