@fwettyan

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

pythonのドローンのプログラムについての質問

解決したいこと
ドローンがアークタンジェントの角度を検出し、その角度が-90~0、0~85度の間(ドローンカメラ画像の第二第三象限)であれば左旋回。95~180、-90~-180の間(ドローンカメラ画像の第一第四象限)なら右旋回。86~94度の間であればホバリングということをさせ、水色の線に青の線が重なるようにドローンを自動で旋回させたいです。
まとめると、赤と緑の角度を検出し、その角度分だけドローンを旋回させ、水色の縦線と青の線が重なったらドローンがホバリングする、を繰り返したいです。
画像の一つはドローンのカメラ画像、もう一つはプログラムの画像です。
2021-11-19 (2).png

スクリーンショット (15).png

if分をどの様に書けばよいか、教えていただけると幸いです。
ご教授お願い致します。

0 likes

1Answer

こちらの図を前提に考えてみました!
間違っていたらコメントでご指摘ください。

drone.png

if 85 < a < 95 : #1
	# 何もしない
	pass
elif deltaX >= 0: #2
	# 反時計回り
	drone.counter_clockwise()
elif deltaX < 0: #3
	# 時計回り
	drone.clockwise()

【解説的なもの】
#1でまず「何もしない」ときを判定します。
#1Falseの場合、#2および#3ブロックでコサインの正負により左右の旋回を決定します。
コサインが正、すなわち$-90^\circ \le \alpha \le 85^\circ$のとき左旋回をします。
コサインが負、すなわち$-180^\circ < \alpha < -90^\circ$または$95^\circ \le \alpha \le 180^\circ$のとき右旋回します。
ここで、$\alpha$は緑→赤ベクトルの角度です。

0Like

Comments

  1. @fwettyan

    Questioner

    ありがとうございます。
    bizzさんの画像の通りであってます。
    deltaXを用いれば左右の旋回が自動でできるってことですか?
    bizzさんがくれたコードをそのまま入力しても大丈夫なんでしょうか?
  2. 自動で?というのはよくわからないですが、deltaXとコサインの正負は等しいため旋回方向の判定が可能です。

    少し補足すると、緑のマークが画像のように第1象限にある時、コサインは負であり、deltaXも負です。実際に計算して確かめてみれば良いと思います。

    また、drone.clockwiseがどんな実装になっているのかわからなかったので引数は空にしましたが、旋回する量を引数とするならば角度aの正負には気をつけた方が良いでしょう(右旋回に負の値を入れると左旋回になる???)。

Your answer might help someone💌