مدخل إلى Aeronet ، الحلقة 4: البحث واللعنة


نحن اليوم نجمع بين برنامج للتحكم بدون طيار مستقل مع برنامج للكشف عن الكرة من أجل انفجار الكرة مع طائرة بدون طيار مستقلة.


في المقالات السابقة ، درسنا إطلاق طائرة بدون طيار افتراضية وحقيقية ، وكذلك تطوير عقدة ROS التي تحدد وتحول إحداثيات الكرة في الفضاء . الآن سنقوم بإعادة تشكيل برنامج التحكم في الطائرة بدون طيار بحيث يحاول تلقائيًا انفجار الكرة.


برنامج الطيران الى الكرة


يعتمد البرنامج الذي يطير إلى الكرة على نفس دورة التحكم في السرعة كما في برنامج التحكم اليدوي .
الفرق هو أنه بدلاً من مفاتيح التحكم من لوحة المفاتيح ، يتم التحكم في ناقل السرعة بدون طيار بواسطة معلومات حول موضع الكرة التي تم الحصول عليها من الموضوع /baloon_detector/twist .
setvel_forward سرعات setvel_forward وناقلات setvel_forward بحيث حلقت الطائرة بدون طيار داخل الكرة مباشرة.
إذا كانت الطائرة بدون طيار لا ترى الكرة لأكثر من 0.2 ثانية ، فنحن نعتقد أننا انفجرناها ووضعناها في وضع الهبوط.


ويرد النص الكامل للبرنامج أدناه: (crash_baloon.py)
 #!/usr/bin/env python # coding=UTF-8 # baloon position steering import rospy import mavros import mavros.command as mc from mavros_msgs.msg import State from geometry_msgs.msg import PoseStamped, Twist, Quaternion, TwistStamped from mavros_msgs.srv import CommandBool from mavros_msgs.srv import SetMode import tf.transformations as t import math current_state=State() current_pose = PoseStamped() current_vel = Twist() baloon_twist = TwistStamped() def state_callback(data): global current_state current_state=data def localpose_callback(data): global current_pose current_pose = data def baloon_callback(data): global baloon_twist baloon_twist = data def publish_setvel(event): global current_pose, setvel_pub, setvel, setvel_forward, baloon_twist q=current_pose.pose.orientation.x, current_pose.pose.orientation.y,current_pose.pose.orientation.z,current_pose.pose.orientation.w roll, pitch, yaw = t.euler_from_quaternion(q) setvel.linear.x = setvel_forward * math.cos(yaw) setvel.linear.y = setvel_forward * math.sin(yaw) setvel_pub.publish(setvel) def main(): global current_pose, setvel, setvel_pub, setvel_forward, baloon_twist rospy.init_node("offbrd",anonymous=True) rate=rospy.Rate(10) state=rospy.Subscriber("/mavros/state",State,state_callback) pose_sub=rospy.Subscriber("/mavros/local_position/pose",PoseStamped,localpose_callback) baloon_sub=rospy.Subscriber("/baloon_detector/twist",TwistStamped,baloon_callback) setvel_pub=rospy.Publisher("/mavros/setpoint_velocity/cmd_vel_unstamped",Twist,queue_size=1) arming_s=rospy.ServiceProxy("/mavros/cmd/arming",CommandBool) set_mode=rospy.ServiceProxy("/mavros/set_mode",SetMode) setvel=Twist() setvel_forward = 0 arming_s(True) set_mode(0,"AUTO.TAKEOFF") print 'Taking off.....\r' rospy.sleep(5) for i in range (0,10): setvel_pub.publish(setvel) rate.sleep() set_mode(0,"OFFBOARD") setvel_timer = rospy.Timer(rospy.Duration(0.05), publish_setvel) while not rospy.is_shutdown(): time_delay = rospy.Time.now().to_sec() - baloon_twist.header.stamp.to_sec() #print baloon_twist print 'time delay = ',time_delay if time_delay<0.2:#    0.2   if baloon_twist.twist.linear.x > 0.8: setvel_forward = 1.5 elif baloon_twist.twist.linear.x > 0.8: setvel_forward = 0.0 else: setvel_forward = -0.5 setvel.angular.z = baloon_twist.twist.angular.z*4 if baloon_twist.twist.angular.y<0: setvel.linear.z=0.5 elif baloon_twist.twist.angular.y>0.2: setvel.linear.z=-0.25 else: setvel.linear.z=0 else:#    setvel.angular.z=setvel_forward=setvel.linear.z=0 print setvel, setvel_forward rate.sleep() set_mode(0,"AUTO.LAND") print 'Landing.......\r' setvel_timer.shutdown() rospy.sleep(5) if __name__=="__main__": main() 

توصيات التصحيح


من أجل تصحيح الأخطاء ، نوصي باختيار مساحة مفتوحة ، وإرفاق الكرة بالقاعدة ، والتأكد من عدم وجود كائنات حمراء في الجوار ، بحيث لا توجد إيجابيات خاطئة لبرنامج التوجيه.
يجب التحقق من تشغيل برنامج التوجيه ، قبل الرحلة ، باستخدام متصفح ، على 192.168.11.1:8080:


إذا تم تكوين كل شيء بشكل صحيح ، يجب أن يميز البرنامج الكرة بثقة وألا يسبب إيجابيات خاطئة.


في بداية برنامج التوجيه ، من المعلوم أن الطائرة بدون طيار سترى الكرة بعد الإقلاع. خلاف ذلك ، ستعتقد الطائرة بدون طيار أن الكرة قد انفجرت بالفعل ، وستتحول إلى وضع الهبوط.
في المستقبل ، يمكنك تعديل البرنامج - قم بالاقتراب من الكرة ، على سبيل المثال ، باستخدام وضع AUTO.MISSION. وبعد الوصول إلى نقطة GPS المطلوبة ، قم بالتبديل إلى وضع البحث المرئي.
ويتم اختيار معاملات للسرعات في الدورة الرئيسية للبرنامج تجريبيا لطائرة بدون طيار محددة.


في المسابقات ، تبدو محاولات اقتحام الكرة كما يلي:



سأكون ممتناً لتعليقات وأسئلة أولئك الذين يحاولون تكرار تجربتنا.


يتم تحميل أكواد المصدر للبرامج على جيثب .

Source: https://habr.com/ru/post/ar471450/


All Articles