ตั้งแต่จรวดไปจนถึงหุ่นยนต์ และ Python เกี่ยวข้องอะไรกับมัน เรื่องราวของศิษย์เก่า GeekBrains

ตั้งแต่จรวดไปจนถึงหุ่นยนต์ และ Python เกี่ยวข้องอะไรกับมัน เรื่องราวของศิษย์เก่า GeekBrains
วันนี้เราจะเผยแพร่เรื่องราวของการเปลี่ยนแปลงสู่ไอทีของ Andrey Vukolov ความหลงใหลในอวกาศในวัยเด็กทำให้เขาต้องศึกษาวิทยาศาสตร์จรวดที่ MSTU ความเป็นจริงอันโหดร้ายทำให้ฉันลืมความฝัน แต่ทุกอย่างกลับกลายเป็นสิ่งที่น่าสนใจยิ่งขึ้น การเรียนภาษา C++ และ Python ช่วยให้ฉันได้ทำงานที่น่าตื่นเต้นไม่แพ้กัน นั่นคือการเขียนโปรแกรมลอจิกของระบบควบคุมหุ่นยนต์

การเริ่มต้น

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

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

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

ผลิตภัณฑ์ซอฟต์แวร์ทั้งหมดได้รับการพัฒนาตามคำสั่งพิเศษและได้รับการอนุมัติจากคณะกรรมการรักษาความลับ (ปัจจุบันเป็นส่วนหนึ่งของ FSTEC) นักพัฒนาซอฟต์แวร์จำเป็นต้องลงทะเบียนและให้สิทธิ์ใช้งานโค้ดทุกบรรทัดอย่างแท้จริง ซอฟต์แวร์ทั้งหมดจะเป็นความลับในระดับงานในตอนแรก ส่วนหนึ่งอธิบายได้ว่าเหตุใดซอฟต์แวร์ที่ใช้ฝึกนักศึกษาวิทยาศาสตร์จรวดจึงได้รับการพัฒนาในช่วงทศวรรษ 90 เป็นอย่างล่าสุด

เมื่อถึงเวลาที่ฉันสำเร็จการศึกษาจากสถาบัน ฉันสามารถทำงานที่ภาควิชาทฤษฎีกลไก และเริ่มพัฒนาโปรแกรมจำลองกระบวนการทางการศึกษาใน C++ ดังนั้นฉันจึงมีตัวอย่างสำหรับการเปรียบเทียบและสามารถชั่งน้ำหนักข้อดีและข้อเสียได้ ทางเลือกนั้นชัดเจน และฉันค่อยๆ เริ่มหันไปสนใจไอทีและหุ่นยนต์ กลศาสตร์ประยุกต์นั้นสนุกกว่าวิทยาศาสตร์จรวดมาก ไม่ว่าจะเป็นปัญหาที่ยังไม่ได้รับการแก้ไข สภาพแวดล้อมแบบเปิด การขาดอุตสาหกรรมการพัฒนา ความต้องการซอฟต์แวร์จำลองสถานการณ์อย่างเร่งด่วน ในวิทยาการหุ่นยนต์ มีสถาปัตยกรรมที่ยังไม่แน่นอนของซอฟต์แวร์ทั่วไป และความจำเป็นในการใช้อัลกอริธึมที่ซับซ้อนซ้ำๆ ซึ่งรวมถึงตรรกะคลุมเครือและจุดเริ่มต้นของ AI ดังนั้นหลังจากโปรแกรมแรกของฉันสำหรับการประมวลผลข้อมูลการทดลอง ฉันแทบไม่เคยกลับไปใช้จรวดอีกเลย (ยกเว้นโครงการที่สำเร็จการศึกษา)

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

จากการสอนไปจนถึงการเขียนโปรแกรม

ตั้งแต่จรวดไปจนถึงหุ่นยนต์ และ Python เกี่ยวข้องอะไรกับมัน เรื่องราวของศิษย์เก่า GeekBrains
ที่งาน IFTOMM World Congress พร้อมด้วยนักศึกษากลุ่มวิจัย (ฉันทางขวา)

ฉันทำงานที่ MSTU ในแผนกสุ่มตัวอย่างเป็นเวลา 10 ปี โดยสอนวิชาทฤษฎีกลไก เขาตีพิมพ์ผลงานทางวิทยาศาสตร์ (ดูท้ายบทความ) ค่อยๆ ย้ายจากกลศาสตร์ไปสู่ ​​CAD และวิทยาการหุ่นยนต์ และสุดท้ายเขาก็ตัดสินใจลาออกจากการสอน เพื่ออธิบายเหตุผลของการตัดสินใจครั้งนี้ให้ชัดเจนที่สุด ข้าพเจ้าจะบอกว่าในอีกสิบปี หลักสูตรการศึกษาที่ผมสอนไม่ได้เปลี่ยนทศนิยมแม้แต่ตำแหน่งเดียว แม้ว่ากลศาสตร์ประยุกต์จะก้าวไปข้างหน้าอย่างประสบความสำเร็จมากเมื่อพิจารณาจากสิ่งพิมพ์

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

และในที่สุดฉันก็มาถึงวิทยาการหุ่นยนต์เช่นนี้: ในปี 2007-2009 เราเริ่มเตรียมงานทางวิทยาศาสตร์ชิ้นแรกร่วมกับศาสตราจารย์ A. Golovin และ N. Umnov ที่นั่น ฉันต้องใช้อัลกอริธึมเพื่อกำหนดเส้นทางของวัตถุจากการถ่ายภาพแฟลช จากหัวข้อนี้ ถือเป็นก้าวหนึ่งสู่วิชันซิสเต็ม, OpenCV และระบบปฏิบัติการหุ่นยนต์ (แม้ว่าตอนนั้นฉันไม่ได้คิดถึงขนาดดังกล่าวด้วยซ้ำ) หลังจากนั้น ในที่สุดฉันก็มุ่งเน้นไปที่กลศาสตร์ประยุกต์และหุ่นยนต์ในการวิจัย และการพัฒนาก็กลายเป็นกิจกรรมสนับสนุน

อย่างไรก็ตาม ในการหางานใหม่ด้านวิทยาการหุ่นยนต์ จำเป็นต้องปรับปรุงและเสริมความรู้ด้านการเขียนโปรแกรมของฉัน ท้ายที่สุดแล้ว ฉันไม่เคยเรียนไอทีโดยเฉพาะ ยกเว้นหลักสูตรมหาวิทยาลัยหนึ่งปี (ObjectPascal และ Borland VCL ในภาษา C++) และอาศัยคณิตศาสตร์ในด้านการพัฒนาทางทฤษฎี

ตอนแรกฉันพิจารณาตัวเลือกสำหรับหลักสูตรเต็มเวลาที่สถาบันในประเทศของฉัน จริงอยู่ เป็นที่ชัดเจนว่าแทบจะเป็นไปไม่ได้เลยที่จะรวมการศึกษาดังกล่าวเข้ากับงานในแผนก เนื่องจากตารางงานที่ไม่ปกติและงานประจำนอกตารางงานของตนเอง (การทดแทน ฯลฯ) ฉันจึงค่อยมาคิดที่จะเรียนหลักสูตรแบบชำระเงินทางไกลให้จบ ฉันมาที่ GeekBrains ตามคำแนะนำของอาจารย์จากศูนย์ฝึกอบรม Mail.ru Technopark ซึ่งตั้งอยู่ใน Baumanka และลงทะเบียนในหลักสูตร Python Programmer

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

นี่คือวิธีที่ฉันรับมือกับภาระงาน: ฉันแก้ไขปัญหาบนท้องถนน ทักษะนี้ซึ่งพัฒนาขึ้นจากการเดินทางเพื่อทำธุรกิจหลายครั้ง กลับกลายเป็นว่ามีประโยชน์มาก เพราะถ้าไม่มีทักษะนี้ ฉันคงไม่สามารถทำการบ้านทั้งหมดให้เสร็จได้ (และยังมาแทนที่การทำสมาธิด้วย...) ฉันเรียนรู้การเขียนโค้ดขณะเดินทางโดยใช้แล็ปท็อป สมาร์ทโฟน และคีย์บอร์ดสมาร์ทโฟนไร้สาย

แล็ปท็อปของฉันคือ Dell Latitude 3470 และสมาร์ทโฟนทุกเครื่องที่มีเส้นทแยงมุม 5.5 นิ้วขึ้นไปที่จับคู่กับแป้นพิมพ์ Logitech K 810 BT ก็ใช้ได้ โดยทั่วไป ฉันแนะนำผลิตภัณฑ์ Logitech ให้กับทุกคน มีความน่าเชื่อถือมากและทนทานต่อสภาวะการใช้งานที่รุนแรงมาก (และนี่ไม่ใช่โฆษณา)

ตั้งแต่จรวดไปจนถึงหุ่นยนต์ และ Python เกี่ยวข้องอะไรกับมัน เรื่องราวของศิษย์เก่า GeekBrains
คีย์บอร์ดโลจิเทค K810

Python เอื้อต่องานดังกล่าวมาก - หากคุณมีโปรแกรมแก้ไขที่ดี แฮ็กการเขียนโปรแกรมอื่น: ใช้การเชื่อมต่อระยะไกลกับเดสก์ท็อปหรือสภาพแวดล้อมรันไทม์ ฉันทำงานหลายอย่างสำเร็จโดยใช้เว็บเซิร์ฟเวอร์ที่ปลอดภัยซึ่งใช้งาน Django บนคอมพิวเตอร์ที่บ้าน ฉันทำงานบนรถไฟโดยใช้ซอฟต์แวร์ PyDroid, DroidEdit, Maxima

ทำไมต้องหลาม?

ไม่นานก่อนที่ฉันจะลองใช้ PHP เป็นภาษาสคริปต์ระบบ ในตอนแรกฉันศึกษา Python ด้วยตัวฉันเองและค่อยๆ “เพื่อตัวฉันเอง” ฉันตัดสินใจศึกษาอย่างจริงจังหลังจากที่ฉันได้เรียนรู้เกี่ยวกับการมีอยู่ของการเชื่อมต่อที่มีประสิทธิภาพระหว่าง Python และ C++ ในระดับโมดูล - ดูเหมือนน่าสนใจที่จะแบ่งปันอัลกอริธึมที่ได้รับการปรับปรุงและขั้นตอนการเตรียมข้อมูลภายในภาษาเดียวกัน

ตัวอย่างที่ง่ายที่สุด: มีระบบควบคุมสำหรับไดรฟ์ที่ทรงพลังที่ไม่ได้มาตรฐานซึ่งใช้งานบนเครื่องฝังตัวที่มีโปรเซสเซอร์ RISC ในภาษา C ++ การจัดการเกิดขึ้นผ่าน API ที่ขึ้นกับเครื่องภายนอก ซึ่งรองรับ เช่น การสื่อสารระหว่างระบบย่อยผ่านเครือข่าย ในระดับสูง อัลกอริธึมการทำงานของไดรฟ์จะไม่ได้รับการแก้ไขหรือไม่คงที่ (จำเป็นต้องโหลดอัลกอริธึมที่แตกต่างกันขึ้นอยู่กับกระบวนการทำงาน)

หนึ่งในวิธีที่ดีที่สุดในการบรรลุระบบดังกล่าวคือการใช้ API ระบบย่อย C++ เฉพาะเครื่องเป็นพื้นฐานสำหรับชุดคลาส Python ที่ทำงานบนล่ามข้ามแพลตฟอร์ม ดังนั้นนักพัฒนาระดับบนสุดจะไม่จำเป็นต้องคำนึงถึงคุณสมบัติของเครื่องฝังตัวและระบบปฏิบัติการ เขาจะทำงานกับคลาส Python ที่ทำหน้าที่เป็น "ตัวห่อ" ของ API ระดับต่ำ

ฉันต้องเรียนรู้การเชื่อมโยง C++ และ Python เกือบตั้งแต่เริ่มต้น เป็นที่ชัดเจนว่าความสามารถเชิงวัตถุในระดับสูงมีความสำคัญมากกว่าในระดับต่ำมาก ด้วยเหตุนี้ เราจึงต้องเปลี่ยนแนวทางในการออกแบบและใช้งาน API โดยสมบูรณ์ โดยเลือกคลาสที่ระดับ Python และแชร์ข้อมูลส่วนกลางใน C/C++ ทำความคุ้นเคยกับการสร้างโค้ด: ตัวอย่างเช่น กรอบงาน ROS เองจะสร้างชื่อและอ็อบเจ็กต์ใน Python ดังนั้นคุณต้องคำนึงถึงความแตกต่างของภาษา โดยเฉพาะอย่างยิ่งในการพิมพ์ เมื่อออกแบบอินเทอร์เฟซของคุณ

การทำงานในปัจจุบัน: Python และ Robot Control Logic

ตอนนี้ฉันทำงานเป็นโปรแกรมเมอร์ Python และ C++ ที่ Robotics Research and Education Center ที่ Moscow State Technical University เราดำเนินโครงการวิจัยและเครื่องมือซอฟต์แวร์ที่ได้รับมอบหมายจากหน่วยงานภาครัฐ: เราพัฒนาเครื่องมือปรับแต่งด้วยระบบการมองเห็นทางเทคนิคในตัวและอัลกอริธึมการควบคุมอัตโนมัติระดับสูงที่ไม่ขึ้นอยู่กับระบบ

ปัจจุบัน ฉันเขียนโปรแกรมลอจิกระดับสูงสำหรับระบบควบคุมหุ่นยนต์ใน Python ภาษานี้เชื่อมโยงโมดูลที่ได้รับการปรับให้เหมาะสมที่สุดที่เขียนด้วย C++, แอสเซมเบลอร์ และ Go เข้าด้วยกัน

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

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

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

ความรู้อะไรที่จำเป็นสำหรับงานดังกล่าว?

จำเป็นต้องศึกษาภาษาเทมเพลต C++ และความสามารถเชิงวัตถุของ Python ทักษะที่แทบจะไม่มีใครแทนที่ได้คือความสามารถในการออกแบบและจัดทำเอกสาร API เป็นความคิดที่ดีที่จะสำรวจความสามารถของไลบรารีพิเศษเช่น Boost::Python ผู้ที่ทำงานกับซอฟต์แวร์ระดับต่ำจะต้องจัดการกับการเรียกระบบแบบมัลติเธรด (ที่ระดับเคอร์เนล) และการเรียกระบบ Linux/UNIX/QNX อย่างแน่นอน เพื่อปรับปรุงความเข้าใจของคุณเกี่ยวกับหลักการของวิทยาการหุ่นยนต์ การทำความคุ้นเคยกับกรอบระบบปฏิบัติการหุ่นยนต์จะมีประโยชน์มาก

ฉันพยายามมีภาษาโปรแกรมที่คอมไพล์และตีความอย่างน้อยหนึ่งภาษาที่กำลังพัฒนาและเป็นที่ต้องการ นี่เป็นกลยุทธ์แห่งชัยชนะในการทำงานด้านวิศวกรรม โดยมีความต้องการอย่างต่อเนื่องในการพัฒนาอัลกอริธึมที่มีความเชี่ยวชาญสูง (อ่าน: ผิดปกติ) และนำไปใช้ในภาษาที่คอมไพล์ งานในการเตรียมข้อมูลสำหรับซอฟต์แวร์ดังกล่าวน่าพอใจกว่ามากในการแก้ไขโดยใช้ภาษาที่แปล ในตอนแรก ชุดของฉันประกอบด้วย C++, Pascal และ BASIC หลังจากนั้น PHP และ BASH ได้ถูกเพิ่มเข้าไป

เครื่องมือในการพัฒนาจะมีประโยชน์ในการสอนนักเรียนได้อย่างไร

แผนหลักสำหรับการพัฒนาทางวิชาชีพในขณะนี้คือการพยายามจัดเตรียมพื้นฐานทางวิทยาศาสตร์สำหรับการใช้เครื่องมือพัฒนาซอฟต์แวร์ระดับมืออาชีพในการสอน เพื่อพัฒนาและทดสอบวิธีการสอน

ตั้งแต่ปี 2016 ฉันเริ่มการทดลองครั้งใหญ่ในการแนะนำเครื่องมือการพัฒนา เช่น ภาษาโปรแกรม, IDE, โปรแกรมสร้างเอกสาร, ระบบควบคุมเวอร์ชัน เข้าสู่การฝึกสอนในระดับอุดมศึกษา ตอนนี้เราประสบความสำเร็จในการได้รับผลลัพธ์ที่สามารถสรุปได้ในเชิงคุณภาพแล้ว

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

อย่างไรก็ตาม ฉันไม่ได้ละทิ้งการฝึกสอน - ฉันพัฒนาหลักสูตรเต็มเวลาเชิงลึกเกี่ยวกับการออกแบบและการบริหาร Linux สำหรับสถาบันการศึกษาขั้นสูงที่ MSTU และฉันสอนด้วยตัวเอง

งานวิทยาศาสตร์

ผลงานยุคแรก
ประเด็นการวางแผนการเดินเมื่อออกแบบระบบเดินสี่ขาโดยใช้ตัวอย่างการเดินของม้า (2010 g.)

ในประเด็นจลนศาสตร์และการโหลดองค์ประกอบรองรับของขาหน้าของม้าในขั้นตอนการเข้าใกล้ส่วนรองรับซึ่งเป็นส่วนประกอบของวงจรการทำงานของผู้เสนอญัตติสี่ขา (2012 g.)

จากครั้งสุดท้าย
การประยุกต์ใช้การจำลองการผลิตเกียร์ 3 มิติสำหรับกลไกการสอนและทฤษฎีเครื่องจักร (2019 g.)

วิธีการจำแนกสิ่งกีดขวางทางโครงสร้างและการประยุกต์ในการค้นหาวัตถุบรรเทาทุกข์ (2018 g.)

ผลงานอื่นๆ ที่จัดทำดัชนีโดยฐานข้อมูลการอ้างอิงทางวิทยาศาสตร์สามารถดูได้ในโปรไฟล์ของฉันที่ ResearchGate. บทความส่วนใหญ่เกี่ยวกับการเคลื่อนที่ของเครื่องจักร มีผลงานเกี่ยวกับการสอนทางวิศวกรรมและซอฟต์แวร์เพื่อการศึกษา

ที่มา: will.com

เพิ่มความคิดเห็น