การเร่งความเร็วเมื่ออุปกรณ์เอียง


13

ตอนนี้ฉันกำลังทำงานกับอุปกรณ์ที่ใช้ 3D accelerometer (โดยใช้ขนาด + -2g) และ 3D gyroscope (โดยใช้ขนาด + -250g) -sensor

ฉันสามารถอ่านเวกเตอร์ที่เป็นไปได้ทั้งหมด (X, Y, Z) และความเร่ง (g's) และอัตราเชิงมุม (dps) และมุมที่อุปกรณ์อยู่ในปัจจุบัน แต่ปัญหาของฉันคือเมื่ออุปกรณ์เอียง (0g เมื่อไม่มีการเอียง) การเร่งความเร็วอยู่ระหว่าง (ลง) 0g -> - 1g หรือระหว่าง (ขึ้นไป) 0g-> 1g ขึ้นอยู่กับมุมของอุปกรณ์ในปัจจุบัน ภาพด้านล่างคือภาพที่หวังว่าจะได้มีการล้างความคิด

หวังว่านี่จะช่วยได้

อุปกรณ์จะอยู่ในรถและควรวัดความเร่งเมื่อรถชะลอตัว (เบรก) อย่างไรก็ตามหากอุปกรณ์อยู่ในแนวลาดเอียงอยู่แล้วมาตรวัดความเร่งจะวัดความเร่งที่ทำให้เกิดความเอียงซึ่งทำให้ยากที่จะบอกได้ว่าอุปกรณ์มีความเร่งอย่างแท้จริงหรือไม่หรือเป็นเพียงความลาดเอียงที่ทำให้เกิดความเร่ง

X และ Y -Axis สร้าง 0g และแกน Z คือ 1g เมื่ออุปกรณ์ไม่มีการเอียงและอยู่บนพื้นผิวเรียบ การเอียงทำให้แกน X อ่านไปทาง 1 กรัมหากเอียงไปทางขึ้นและ -1g เมื่อลงด้านล่าง ถึง + -1g เมื่ออุปกรณ์อยู่ในระดับ 90 * จากตำแหน่งเดิม

ฉันคิดว่าจะกำจัดความเร่งที่ทำให้เกิดความเอียงและวัดความเร่งที่แท้จริงของอุปกรณ์ แต่ก็ไม่สามารถคิดออกจากปัญหานี้ได้ด้วยข้อมูลต่อไปนี้ที่ฉันสามารถสร้างได้

โดยทั่วไปฉันคิดว่าถ้าฉันสามารถวัดความเร่งของแกน X (ภาพ) ได้เท่านั้นแม้ว่าเซ็นเซอร์จะเอียงเหมือนในภาพก็ตาม

หวังว่าข้อความนี้จะไม่เข้าใจยากเกินไปเนื่องจากทักษะภาษาอังกฤษของฉันและวิธีที่ฉันพยายามอธิบายปัญหาของฉัน


2
ทำไมคุณไม่วัดเมื่อไม่มีการเร่งความเร็วที่น่าสนใจและใช้มันเป็นจุดเปรียบเทียบ
PlasmaHH

ฉันคิดว่ามันไม่ได้ผล หากอุปกรณ์ยังคงสมบูรณ์แกน X และ Y คือ 0g และแกน Z 1g การเอียงทำให้แกน X อ่านได้ตั้งแต่ -1 กรัมถึง 1 กรัมขึ้นอยู่กับความเอียงเช่นที่ฉันระบุ การเบรกทำให้ค่าแกน X ที่วัดได้ลดลง (ความเร่งเชิงลบทำให้รถช้าลง) หากอุปกรณ์อยู่ในแนวนอนเอียงไปด้านล่างดังนั้นมันจะอยู่ระหว่าง 0 กรัม - (-1 กรัม) ฉันจะบอกได้อย่างไรว่านี่ไม่ใช่การเร่งความเร็วที่เกิดจากการเบรก?
jumbojohn

ทำไมคุณไม่คำนวณการเร่งความเร็วโดยรวมของสามแกนแทนที่จะเป็นแค่แกน Y ฉันคิดว่ามันเป็นสิ่งพื้นฐานที่จะต้องพิจารณาทั้งสามแกนใช่มั้ย!? สิ่งนี้
charansai

LSM6DSM ไม่มี magnetometer คุณได้รับข้อมูลนี้จากที่ไหน ฉันคิดว่าคุณใช้ X-NUCLEO-IKS01A1 board จาก ST ซึ่งมีทั้ง GyM / accelerometer LSM6DSM และ LIS3MDL Magnetometer
MrGerber

@MrGerber ขอบคุณสำหรับการสังเกตว่า มันไม่ดีที่ฉันจะอ่านแผ่นข้อมูลของเซ็นเซอร์ผิด
jumbojohn

คำตอบ:


18

เฉพาะภาพร่างของโซลูชัน

พิจารณาทั้ง 3 แกน

ความเร่งเนื่องจากแรงโน้มถ่วงโดยไม่คำนึงถึงความเอียงจะเป็น 1G เสมอในฐานะผลรวมเวกเตอร์ของ X, Y, Z ไม่ว่าจะเอียงเท่าใดก็ตาม คุณสามารถนึกภาพการเร่งความเร็วขณะพักหรือเคลื่อนไหวนิ่งเป็นจุดบนทรงกลมที่มีรัศมี 1G (หากคุณอยู่ในแนวราบอย่างสมบูรณ์จุดนั้นจะเป็น (0, 0, -1) คือด้านล่างของคุณโดยตรง)

การเร่งความเร็วเนื่องจากเบรกจะทำให้ทรงกลมบิดเบี้ยว ผลรวมเวกเตอร์ของ X, Y, Z จะไม่เป็น 1G อีกต่อไป

ดังนั้น

A=X2+Y2+Z2

A

AA

นอกจากว่าคุณกำลังเลี้ยวหรือลื่นไถลดังนั้นคุณต้องมีอินพุตจากพวงมาลัยและ ABS เพื่อให้แน่ใจ ที่กลายเป็นปัญหาการรวมข้อมูล วิธีนี้จะให้ค่าประมาณความเร่ง หากต้องการตรวจสอบอย่างละเอียดและปรับแต่งค่าประมาณนั้นให้รวมเข้ากับแหล่งข้อมูลอื่น ๆ (ที่ไม่น่าเชื่อถือ) เช่นเดียวกับคำตอบของ Phil Frost โดยใช้ตัวกรองคาลมาน


ที่จริงฉันไม่เคยทำงานกับ accelerometer / gyroscope มาก่อนดังนั้นภาพรวมไม่ชัดเจนว่าสิ่งเหล่านี้ทำงานอย่างไรและคณิตศาสตร์ไม่ใช่ทักษะที่แข็งแกร่งที่สุดของฉันดังนั้นฉันขอขอบคุณเคล็ดลับ / การชี้แจงขอบคุณ
jumbojohn

ในขณะที่ถูกต้องฉันมีความสงสัยอย่างมากว่าระยะขอบของข้อผิดพลาดจะมีความสำคัญ อย่าลืมการเร่งความเร็วแนวตั้งจะทำให้ทรงกลมบิดเบี้ยว (เช่นการกระแทกความเร็วหลุมบ่อ) ดังนั้นคุณอาจจำเป็นต้องแก้ปัญหาโดยขึ้นอยู่กับการใช้งาน
Chris H

แต่แรงโน้มถ่วงไม่คงที่หากดูยากพอ ในขณะที่ถนนที่สูงที่สุดในสหรัฐอเมริกาลดลงเพียงแค่ $ g $ ประมาณ 0.1% การไปจากเสาไปยังเส้นศูนย์สูตรจะทำให้เกิดความแตกต่าง 0.5% ธรณีวิทยายังสามารถสร้างความแตกต่างของลำดับความสำคัญนี้ อาจไม่ใช่ตัวเปลี่ยนเกม แต่อย่าเพิกเฉยต่อการสอบเทียบ
Chris H

คุณต้องแก้ไขรัศมีของทรงกลม G ตามตำแหน่งของคุณหรือวัดก่อนที่จะเปิดเครื่องยนต์ นั่นไม่ใช่ปัญหา ฉันยอมรับว่าการกระแทกอาจต้องได้รับการจัดการควบคู่ไปกับการลื่นไถลและการบังคับเลี้ยว
Brian Drummond

การปรับเทียบก่อนสตาร์ทเครื่องยนต์เป็นสิ่งที่ฉันคิด การปรับเทียบทำได้รวดเร็วแม้ว่าผู้สร้างจะไม่ได้เป็นผู้ใช้ปลายทาง
Chris H

9

ความผิดพลาดหลักของคุณคือการไม่เร่งความเร็วแบบเวกเตอร์เดียว เมื่อรถจอดนิ่งเวกเตอร์นั้นจะขึ้นไป 1 กรัมเสมอ อย่ามองแค่ส่วนประกอบ X ของข้อมูล accelerometer แบบดิบ ทำคณิตศาสตร์เวกเตอร์ที่แท้จริง

แต่ปัญหาของฉันคือเมื่ออุปกรณ์เอียง (0g เมื่อไม่เอียง) การเร่งอยู่ระหว่าง (ลง) 0g -> - 1g หรือระหว่าง (ขึ้นไป) 0g-> 1g

ไม่นี่คือประเด็น สิ่งที่คุณกำลังพูดอาจเป็นจริงสำหรับองค์ประกอบ X ของเอาท์พุท accelerometer แต่มันไม่เป็นความจริงสำหรับการเร่งความเร็วเมื่อรถจอดอยู่

ความเร่งในอุดมคติที่วัดได้จะเป็นความเร่งที่แท้จริงของรถ (เทียบกับพื้นโลก) รวมถึงการเร่งความเร็ว 1 กรัมเนื่องจากแรงโน้มถ่วง หลังอยู่เสมอในทิศทางขึ้น หากคุณรู้ทิศทางของรถคุณสามารถลบ 1 กรัมนี้ได้เนื่องจากแรงโน้มถ่วงเพื่อค้นหาความเร่งที่คุณกำลังมองหา

โปรดทราบว่ามีข้อผิดพลาดในการอ่านเช่นนี้โดยเฉพาะจากเซ็นเซอร์ MEMS ราคาถูก ในขณะที่คุณควรจะได้รับความคิดที่ดีเกี่ยวกับเหตุการณ์ระยะสั้นเช่นการเร่งความเร็วอย่างหนักหรือการเบรกอย่างแรงข้อมูลนี้ไม่มีที่ไหนดีพอที่จะนำทางเฉื่อยนานกว่าสองสามวินาทีที่ดีที่สุด


การเร่งความเร็ว (วัด) เนื่องจากแรงโน้มถ่วงอยู่ในทิศทาง "ขึ้น" หรือไม่? ในขณะที่การอ่านคุณจะได้รับจากอุปกรณ์ที่เหลือในแรงโน้มถ่วงของโลกจะเหมือนกับที่คุณได้รับนอกสนามแรงโน้มถ่วง แต่เร่งในทิศทาง (ขึ้นกับอุปกรณ์) "ขึ้น"?
psmears

@psmears: ใช่คุณพูดถูก แรงลดลง แต่ความเร่งปรากฏชัดขึ้น แก้ไขแล้ว.
Olin Lathrop

5

accelerometer ให้เวกเตอร์สามมิติซึ่งเป็นผลรวมของแรงโน้มถ่วงและการเร่งความเร็วอื่น ๆ ในรถเนื่องจากเครื่องยนต์, เบรก, หรือแรงอื่น ๆ ที่กระทำกับรถ วัตถุประสงค์ของคุณคือการลบการเร่งความเร็วความโน้มถ่วงจากเอาต์พุตของ accelerometer เพื่อค้นหาแรงอื่น ๆ ที่เหลืออยู่

เพื่อความแม่นยำที่ดีที่สุดคุณไม่สามารถคาดเดาแรงโน้มถ่วงได้เสมอ "ลง" เมื่อเทียบกับ accelerometer ตัวอย่างเช่นรถอาจอยู่บนเนินเขา การคำนวณทั้งหมดของคุณจะต้องทำกับคณิตศาสตร์เวกเตอร์สามมิติและคุณต้องมีการประมาณทิศทางของรถเพื่อให้คุณรู้ทิศทางของเวกเตอร์แรงโน้มถ่วงที่จะลบออก

กรองคาลมาเป็นแนวทางร่วมกันที่นี่ แนวคิดก็คือนำข้อมูลทั้งหมดที่คุณมีซึ่งอาจเปลี่ยนการวางแนวของรถจากนั้นทำการวัดค่าเฉลี่ยถ่วงน้ำหนักรวมกับสิ่งที่คุณรู้เกี่ยวกับฟิสิกส์ที่ทำหน้าที่อยู่ในรถ การวางแนวใหม่ของรถและวิธีการที่ "ลง"

ยิ่งคุณมีข้อมูลมากขึ้นเท่าไหร่คุณก็ยิ่งสามารถสร้างแบบจำลองทางฟิสิกส์ของรถยนต์ได้แม่นยำมากขึ้นเท่านั้น

ตัวอย่างเช่นถ้าคุณมีไจโรและคุณวัดระยะห่างระหว่างรถคุณสามารถทำนายว่าเวกเตอร์แรงโน้มถ่วงกำลังหมุนไปทางด้านหลังของรถ ในระยะสั้นพูดว่าเมื่อรถเพิ่งเริ่มขึ้นไปบนเนินเขานี่จะช่วยให้เวกเตอร์แรงโน้มถ่วงสันนิษฐานทิศทางที่ถูกต้องได้อย่างรวดเร็ว

คุณอาจจะถือว่ารถโดยเฉลี่ยจะไม่เบรคหรือเร่งความเร็ว ดังนั้นเอาท์พุทที่ผ่านการกรองต่ำของ accelerometer อาจป้อนเข้าไปในการประเมินว่าทิศทาง "ลง" คืออะไร สิ่งนี้ให้การวัดระยะยาวโดยไม่ขึ้นอยู่กับแรงเฉื่อย

การรวมข้อมูลจากเครื่องวัดความเร่งและเครื่องวัดการหมุนวนเพื่อประมาณทิศทางของแรงโน้มถ่วงจึงให้การประมาณที่แม่นยำกว่าการวัดเพียงอย่างเดียว

คุณสามารถรวมสิ่งที่คุณรู้เพิ่มเติมเกี่ยวกับซองปฏิบัติการที่เป็นไปได้ของยานพาหนะ ตัวอย่างเช่นรถไม่สามารถขับขึ้นหรือลงเนินที่สูงเกินไปดังนั้นเมื่อมาตรวัดความเร่งระบุมุมที่รุนแรงคุณอาจมีน้ำหนักน้อยลงสมมติว่าเอาต์พุตส่วนใหญ่เกิดจากการเบรกหรือเครื่องยนต์ไม่ใช่แรงโน้มถ่วง

คุณรู้ว่าถ้าคนขับเหยียบเบรกนี่จะเป็นการย้ายเวกเตอร์การเร่งความเร็วและคุณสามารถลบสิ่งนี้ออกจากองค์ประกอบ "ลง" โดยประมาณ

หรือถ้าคุณมีข้อมูล GPS และแผนที่คุณอาจรวมการประมาณความชันของรถตามตำแหน่ง หากคุณมีข้อมูลที่มีความแม่นยำสูงคุณอาจรู้ได้อย่างแม่นยำว่ารถคันนั้นอยู่ที่ใด หากคุณมีข้อมูลความแม่นยำต่ำเพียงอย่างเดียวก็ยังมีประโยชน์ ตัวอย่างเช่นหากรถอยู่ในแคนซัสภูเขาไม่น่าจะเป็นไปได้ หากรถอยู่ในซานฟรานซิสโกเนินเขามีแนวโน้มมากขึ้นและคุณอาจให้น้ำหนักกับมาตรวัดความเร่งน้อยลง

หากคุณมีข้อมูลเกี่ยวกับการสิ้นเปลืองน้ำมันเชื้อเพลิงและความเร็วโดยรู้ว่ามีการบริโภคน้ำมันเชื้อเพลิงมากขึ้นเมื่อขึ้นเนินคุณอาจใช้สิ่งนี้เพื่อประเมินว่ารถนั้นแหลมขึ้นหรือลงตามประสิทธิภาพการใช้เชื้อเพลิง

และอื่น ๆ ยิ่งคุณรู้มากเท่าไหร่คุณก็จะยิ่งคาดการณ์ได้มากขึ้นเท่านั้น


3

คุณต้องใช้อัลกอริทึมฟิวชั่นและใช้เซ็นเซอร์ 3D-accelerometer, 3D-Gyro และ 3D-Magnetic ด้วยอัลกอริธึมฟิวชั่นนี้คุณจะได้รับทัศนคติแรงโน้มถ่วงของโลกช่วยในการอ้างอิงเพื่อตรวจจับมุมขอบฟ้า - ระยะห่าง / เอียง / หมุน อีกสองเซ็นเซอร์ mag / gyro ช่วยกรองการเคลื่อนไหวแบบไดนามิก ในขณะที่รถยนต์ของคุณจะเลี้ยวซ้าย / ขวา .. แรงเหวี่ยงจะถูกเพิ่มเข้าไป เมื่อคุณมีทัศนคติคุณสามารถลบเวกเตอร์ความโน้มถ่วงและแยกส่วนการเร่งผลลัพธ์ในแกนทั้งสาม


3

เป็นวิธีพื้นฐานที่สำคัญมากคุณสามารถใช้ตัวกรองความถี่สูงเพื่อกำจัดส่วนที่คงที่ของการเร่งความเร็ว (ซึ่งสอดคล้องกับแรงโน้มถ่วง) และรักษาส่วนของตัวแปรที่เกิดจากการเปลี่ยนแปลงของรถยนต์ สมมติว่าrawเป็นเวกเตอร์ที่มีการวัด X, Y และ Z ของคุณและaccเป็นการเร่งความเร็วรถยนต์โดยไม่มีแรงโน้มถ่วง แล้วก็

void correct_for_gravity(float *raw, float *acc)
{
   const float k = 0.9;
   static float gravity[3];

   gravity[0] = k * gravity[0] + (1 - k) * raw[0];
   gravity[1] = k * gravity[1] + (1 - k) * raw[1];
   gravity[2] = k * gravity[2] + (1 - k) * raw[2];

   acc[0] = raw[0] - gravity[0];
   acc[1] = raw[1] - gravity[1];
   acc[2] = raw[2] - gravity[2];
}

ส่วนประกอบแต่ละส่วนของaccยังคงได้รับผลกระทบจากความเอียง แต่บรรทัดฐานเวกเตอร์ไม่ใช่:

norm_acc = sqrt(acc[0]*acc[0] + acc[1]*acc[1] + acc[2]*acc[2]);

แน่นอนว่าวิธีนี้ไม่แม่นยำมากโดยเฉพาะถ้าความลาดเอียงเปลี่ยนในอัตราที่สูง นี่เป็นเรื่องเกี่ยวกับคณิตศาสตร์ที่ไร้เดียงสาที่ทำให้คุณได้รับ หากคุณต้องการความแม่นยำที่ดีขึ้นเรียนรู้วิธีใช้ตัวกรองคาลมาน


1

คำตอบอยู่ในความหมายที่ถูกต้องของ"ชะลอตัวลง"

จากคำถามของคุณ:

อุปกรณ์จะอยู่ในรถและควรวัดความเร่งเมื่อรถชะลอตัว (เบรก)

อย่างไรก็ตามการชะลอตัวลงไม่เบรกไม่เท่ากัน มีสองคำจำกัดความที่เป็นไปได้:

  1. ความเร็วของรถที่สัมพันธ์กับพื้นลดลง
  2. เบรกรถยนต์ถูกนำไปใช้

ความแตกต่างนี้มีความสำคัญในการขึ้นและลง ในดาวน์ฮิลล์ความเร็วของรถจะเพิ่มขึ้นหากไม่ใช้เบรก และในที่สูงขึ้นความเร็วสามารถลดความเร็วลงแม้ในขณะที่ไม่เบรก

ปรากฎว่าการตรวจจับ 1. ยากกว่า 2 อย่างมากลองกำหนดแกนสัมพันธ์กับทิศทางของรถ: X: ทิศทางด้านหน้า - หลัง, Y: ทิศทางซ้ายขวา, Z: ทิศทางขึ้น - ลง แกนทั้งหมดถูกจัดชิดกับรถยนต์

Solutions:

  1. สำหรับคำจำกัดความ 1 วิธีที่ดีที่สุดคือสมมติว่าความเร็วของรถสามารถเปลี่ยนแปลงได้ในทิศทาง X เท่านั้น จากนั้นความเร่งที่วัดได้a = g + vโดยที่gคือความเร่งเนื่องจากแรงต้านแรงโน้มถ่วงและvคือความเร่งเนื่องจากการเปลี่ยนแปลงความเร็ว คุณสามารถสมมติว่าความยาวของgเท่ากับ 9.8 m / s²และvนั้นอยู่ในทิศทาง X เสมอ ดังนั้น(g_x + v_x, g_y, g_z) = (a_x, a_y, a_z)ซึ่งจะช่วยให้v_x = a_x - sqrt ((9.8m / s²) ² - g_y² - g_z²) สิ่งนี้จะทำงานได้ตราบใดที่| v | น้อยกว่า| g |หรือกล่าวอีกนัยหนึ่งความเร่งเนื่องจากมอเตอร์หรือเบรกน้อยกว่า 1G ควรมีข้อสันนิษฐานที่ปลอดภัยถ้ารถของคุณมีตัวเพิ่มจรวด

  2. สำหรับนิยาม 2 คุณสามารถอ่านค่าแกน x ได้โดยตรง หากรถไม่เร่งหรือเบรกแรงแรงโน้มถ่วงเพียงอย่างเดียวที่กระทำต่อมันคือแรงปกติของพื้นผิวถนน แรงนี้อยู่ในทิศทาง z เสมอเมื่อเทียบกับรถยนต์ดังนั้นจึงไม่เปลี่ยนการอ่านแกน x เบรคและมอเตอร์ทำหน้าที่เฉพาะในทิศทาง x และจะมองเห็นได้โดยตรงในการอ่านนี้


0

ดูเหมือนว่าคุณกำลังใช้อุปกรณ์ "overkill" สำหรับแอปพลิเคชันของคุณ คุณควรใช้อุปกรณ์ที่ใช้วัดความเร่งของ x & y เท่านั้นวิธีนี้ความเอียงจะไม่มีผลที่วัดได้ แม้ว่าการเร่งความเร็วโดยรวมอาจเล็กลงหรือใหญ่ขึ้นเนื่องจากความเอียง แต่อุปกรณ์จะวัดเฉพาะส่วนประกอบ x & y ของการเร่งความเร็วบนเครื่องบินที่ยานพาหนะใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.