Từ tên lửa đến robot và Python phải làm gì với nó. Câu chuyện của cựu sinh viên GeekBrains

Từ tên lửa đến robot và Python phải làm gì với nó. Câu chuyện của cựu sinh viên GeekBrains
Hôm nay chúng tôi đăng câu chuyện về quá trình chuyển đổi sang CNTT của Andrey Vukolov. Niềm đam mê không gian thời thơ ấu của anh đã từng khiến anh theo học ngành khoa học tên lửa tại MSTU. Hiện thực phũ phàng khiến tôi quên đi giấc mơ mà mọi chuyện lại càng trở nên thú vị hơn. Việc học C++ và Python cho phép tôi làm được công việc thú vị không kém: lập trình logic cho hệ thống điều khiển robot.

bắt đầu

Tôi thật may mắn khi được say mê về không gian suốt thời thơ ấu của mình. Vì vậy, sau giờ học, tôi không hề đắn đo xem mình nên đi học ở đâu và vào MSTU. Bauman, tới Khoa Kỹ thuật Động cơ Tên lửa. Tuy nhiên, bản thân nhánh của khóa học - động cơ bột hoặc chất lỏng của tên lửa vũ trụ - hoàn toàn không cần phải chọn: vào năm 2001, một ủy ban giảng viên đặc biệt vẫn phân bổ các nhóm đối tượng đăng ký. Tôi bị vướng vào một thùng thuốc súng.

Vào thời điểm đó, “sự bùng nổ tên lửa” chỉ tồn tại trong các kế hoạch; các kỹ sư nhận được mức lương ít ỏi và làm việc trong các phòng thiết kế và viện nghiên cứu khép kín đặc biệt, hầu như không có triển vọng phát triển nghề nghiệp và nghề nghiệp. Tuy nhiên, tên lửa bột ở Nga hoàn toàn là sản phẩm quân sự.

Hiện nay lĩnh vực này đang có nhu cầu, nhưng trong quá trình học, tôi nhận ra rằng trong khoa học tên lửa, hầu như không thể thực hiện được bất kỳ hoạt động nào theo sáng kiến ​​​​của riêng mình. Trên thực tế, đây là nghĩa vụ quân sự. Ví dụ, làm việc trong ngành tên lửa, tôi sẽ hoàn toàn không có cơ hội phát triển phần mềm một cách độc lập, ngay cả đối với bản thân mình, vì hoạt động này được quản lý chặt chẽ.

Tất cả các sản phẩm phần mềm đều được phát triển độc quyền theo đơn đặt hàng đặc biệt và được sự chấp thuận của ủy ban bí mật (hiện là một bộ phận của FSTEC). Nhà phát triển ở đó được yêu cầu phải đăng ký và cấp phép cho mọi dòng mã. Tất cả phần mềm ban đầu đều bí mật ở cấp độ nhiệm vụ. Điều này phần nào giải thích tại sao phần mềm hiện nay được sử dụng để đào tạo sinh viên khoa học tên lửa lại được phát triển muộn nhất vào những năm 90.

Đến khi tốt nghiệp học viện, tôi xin vào làm việc tại khoa lý thuyết cơ chế và bắt đầu phát triển một trình mô phỏng quy trình giáo dục bằng C++ nên tôi có một ví dụ để so sánh và có thể cân nhắc ưu nhược điểm. Sự lựa chọn là hiển nhiên và tôi dần dần bắt đầu chuyển sang lĩnh vực CNTT và robot. Cơ học ứng dụng thú vị hơn nhiều so với khoa học tên lửa: nhiều vấn đề chưa được giải quyết, môi trường mở, thiếu ngành phát triển, nhu cầu cấp thiết về phần mềm mô phỏng. Trong chế tạo robot, có một kiến ​​trúc chưa ổn định của phần mềm phổ biến và nhu cầu triển khai nhiều lần các thuật toán phức tạp, bao gồm logic mờ và sự khởi đầu của AI. Vì vậy, sau chương trình xử lý dữ liệu thực nghiệm đầu tiên, tôi gần như không bao giờ quay trở lại với tên lửa (ngoại trừ đồ án tốt nghiệp của tôi).

Kết quả là tôi có cơ hội làm việc trong chuyên ngành của mình chỉ bốn tháng trước khi tốt nghiệp tại một nhà máy gần Moscow về kết cấu composite cho ngành hàng không vũ trụ. Sau khi học xong, tôi thậm chí không cần phải tìm việc làm mà ngay lập tức đến dạy cơ học ứng dụng tại khoa robot.

Từ giảng dạy đến lập trình

Từ tên lửa đến robot và Python phải làm gì với nó. Câu chuyện của cựu sinh viên GeekBrains
Tại Đại hội Thế giới IFTOMM với các thành viên sinh viên của nhóm nghiên cứu (tôi ở bên phải)

Tôi đã làm việc tại MSTU ở bộ phận lấy mẫu trong 10 năm, giảng dạy một khóa học về lý thuyết cơ chế. Ông đã xuất bản các công trình khoa học (xem cuối bài), chuyển dần từ cơ khí sang CAD và robot. Và cuối cùng anh quyết định nghỉ dạy. Để minh họa rõ ràng nhất cho lý do dẫn đến quyết định này, tôi sẽ nói rằng trong mười năm qua, khóa học tôi dạy không hề thay đổi một chữ số thập phân nào. Mặc dù cơ học ứng dụng, theo đánh giá của các ấn phẩm, đã tiến triển rất thành công.

Ngoài ra, công việc ngày càng giống công việc quan liêu - báo cáo, chương trình, tiêu chuẩn và hàng tấn giấy tờ. Trong điều kiện như vậy, niềm vui giảng dạy đã được thay thế bằng việc báo cáo về việc nhận được niềm vui này, và điều này còn hơn cả khó chịu đối với một chuyên gia hành nghề.

Và cuối cùng tôi đến với robot như thế này: vào năm 2007-2009, cùng với các giáo sư A. Golovin và N. Umnov, chúng tôi bắt đầu chuẩn bị những công trình khoa học đầu tiên. Ở đó, tôi phải sử dụng thuật toán để xác định đường đi của các vật thể từ chụp ảnh nhấp nháy. Từ chủ đề này, đây là một bước tiến tới thị giác máy, OpenCV và Hệ điều hành robot (mặc dù vào thời điểm đó tôi thậm chí còn chưa nghĩ đến quy mô như vậy). Sau đó, cuối cùng tôi tập trung vào cơ học ứng dụng và robot trong nghiên cứu, và phát triển trở thành một hoạt động hỗ trợ.

Tuy nhiên, để tìm được một công việc mới về robot, tôi cần phải trau dồi và bổ sung kiến ​​thức lập trình. Rốt cuộc, tôi chưa bao giờ nghiên cứu cụ thể về CNTT, ngoại trừ khóa học đại học kéo dài một năm (ObjectPascal và Borland VCL trong C++), và dựa vào toán học cho các khía cạnh lý thuyết của sự phát triển.

Lúc đầu, tôi cân nhắc các lựa chọn cho các khóa học toàn thời gian tại học viện quê hương của mình. Đúng vậy, người ta nhanh chóng nhận ra rằng hầu như không thể kết hợp những nghiên cứu như vậy với công việc tại khoa do lịch trình không thường xuyên và công việc thường xuyên ngoài lịch trình của chính mình (thay thế, v.v.). Vì vậy, tôi dần nảy ra ý tưởng hoàn thành các khóa học trả phí từ xa. Tôi đến GeekBrains theo lời giới thiệu của các giáo sư từ trung tâm đào tạo Mail.ru Technopark, đặt tại Baumanka, và đăng ký khóa học Lập trình viên Python.

Các khóa học không gây khó khăn gì, vấn đề duy nhất là tôi liên tục phải kết hợp chúng với công việc tại khoa, công tác khoa học và sự kiện. Thời gian eo hẹp đến mức hầu hết các mối quan hệ xã hội bên ngoài gia đình đều phải hy sinh (may mắn thay là tạm thời).

Đây là cách tôi giải quyết khối lượng công việc: Tôi giải quyết các vấn đề trên đường đi. Kỹ năng này, được phát triển qua nhiều chuyến công tác, hóa ra lại rất hữu ích, vì nếu không có nó, tôi thậm chí sẽ không thể hoàn thành tất cả bài tập về nhà của mình (và nó cũng thay thế thiền...). Tôi đã học cách viết mã khi đang di chuyển bằng máy tính xách tay, điện thoại thông minh và bàn phím điện thoại thông minh không dây của mình.

Máy tính xách tay của tôi là Dell Latitude 3470 và bất kỳ điện thoại thông minh nào có đường chéo từ 5.5 inch trở lên được ghép nối với bàn phím Logitech K 810 BT đều được. Nói chung, tôi giới thiệu các sản phẩm của Logitech cho mọi người; chúng rất đáng tin cậy và có thể chịu được các điều kiện sử dụng rất khắc nghiệt (và đây không bao giờ là quảng cáo).

Từ tên lửa đến robot và Python phải làm gì với nó. Câu chuyện của cựu sinh viên GeekBrains
Bàn phím Logitech K810

Python rất thuận lợi cho công việc như vậy - nếu bạn có một trình soạn thảo tốt. Một cách lập trình khác: sử dụng kết nối từ xa tới máy tính để bàn hoặc môi trường thời gian chạy. Tôi đã hoàn thành một số tác vụ bằng cách sử dụng máy chủ web an toàn chạy Django trên máy tính ở nhà của mình. Tôi đã làm việc trên tàu, sử dụng phần mềm PyDroid, DroidEdit, Maxima.

Tại sao lại là Python?

Không lâu sau, tôi đã thử sử dụng PHP làm ngôn ngữ kịch bản hệ thống. Ban đầu tôi tự học Python và từng chút một “cho chính mình”. Tôi quyết định nghiên cứu nghiêm túc sau khi biết về sự tồn tại của kết nối hiệu quả giữa Python và C++ ở cấp độ mô-đun - có vẻ thú vị khi chia sẻ các thuật toán tối ưu hóa và quy trình chuẩn bị dữ liệu trong cùng một ngôn ngữ.

Ví dụ đơn giản nhất: có một hệ thống điều khiển cho một ổ đĩa mạnh mẽ không chuẩn, được triển khai trên một máy nhúng có bộ xử lý RISC, bằng C++. Việc quản lý diễn ra thông qua API phụ thuộc vào máy bên ngoài, hỗ trợ, chẳng hạn như giao tiếp giữa các hệ thống con qua mạng. Ở mức cao, thuật toán vận hành biến tần không được sửa lỗi hoặc không cố định (cần tải các thuật toán khác nhau tùy theo quy trình làm việc).

Một trong những cách tốt nhất để đạt được một hệ thống như vậy là sử dụng API hệ thống con C++ dành riêng cho máy làm cơ sở cho một tập hợp các lớp Python chạy trên trình thông dịch đa nền tảng. Do đó, nhà phát triển cấp cao nhất sẽ không phải tính đến các tính năng của máy nhúng và hệ điều hành của nó; anh ta sẽ chỉ làm việc với các lớp Python hoạt động như “trình bao bọc” của API cấp thấp.

Tôi gần như phải học cách liên kết C++ và Python từ đầu. Rõ ràng là khả năng hướng đối tượng ở mức cao quan trọng hơn nhiều so với ở mức thấp. Vì điều này, chúng tôi đã phải thay đổi hoàn toàn cách tiếp cận thiết kế và triển khai API, chọn các lớp ở cấp độ Python và chia sẻ dữ liệu toàn cầu trong C/C++. Làm quen với việc tạo mã: ví dụ: khung ROS tự tạo tên và đối tượng bằng Python, do đó bạn phải tính đến sự khác biệt về ngôn ngữ, đặc biệt là trong cách gõ, khi thiết kế giao diện của mình.

Làm việc ở hiện tại: Logic điều khiển Python và Robot

Hiện tôi đang làm lập trình viên Python và C++ tại Trung tâm Giáo dục và Nghiên cứu Robot tại Đại học Kỹ thuật Quốc gia Moscow. Chúng tôi thực hiện các dự án nghiên cứu và công cụ phần mềm do các cơ quan chính phủ ủy quyền: chúng tôi phát triển các bộ điều khiển có hệ thống thị giác kỹ thuật tích hợp và các thuật toán điều khiển tự động cấp cao độc lập với hệ thống.

Hiện tại, tôi lập trình logic cấp cao cho hệ thống điều khiển robot bằng Python; ngôn ngữ này liên kết các mô-đun được tối ưu hóa cao được viết bằng C++, trình biên dịch mã và Go với nhau.

Trong lập trình thuật toán điều khiển robot, hai nhóm thuật toán lớn được sử dụng. Đầu tiên trong số chúng được triển khai trực tiếp trên thiết bị, ở mức độ thấp - đây là phần mềm tích hợp của bộ điều khiển truyền động, bộ tập trung đường dây liên lạc và các hệ thống con tương tác của người vận hành.

Các thuật toán ở đây được thiết kế để kiểm soát tốc độ thực thi và độ tin cậy vượt xa hiệu suất của toàn bộ rô-bốt. Điều thứ hai là bắt buộc vì tính bảo mật của toàn bộ hệ thống phụ thuộc vào phần mềm điều khiển cấp thấp.

Nhóm thuật toán thứ hai xác định toàn bộ hoạt động của robot. Đây là những chương trình cấp cao, điểm nhấn trong quá trình phát triển là tính rõ ràng và tốc độ thực hiện thuật toán, thường khá phức tạp. Ngoài ra, phần mềm cấp cao trên robot rất thường xuyên bị thay đổi trong quá trình thiết lập và thử nghiệm. Để phát triển như vậy, không thể thiếu các ngôn ngữ thông dịch có mục đích chung.

Những kiến ​​thức nào cần thiết cho công việc như vậy?

Bắt buộc phải nghiên cứu ngôn ngữ mẫu C++ và khả năng hướng đối tượng của Python. Một kỹ năng gần như không thể thay thế là khả năng thiết kế và ghi lại API. Sẽ là một ý tưởng hay nếu khám phá khả năng của các thư viện chuyên biệt như Boost::Python. Những người làm việc với phần mềm cấp thấp chắc chắn sẽ phải xử lý các lệnh gọi hệ thống đa luồng (ở cấp kernel) và Linux/UNIX/QNX. Để nâng cao hiểu biết của bạn về các nguyên tắc của robot, việc làm quen với khung Hệ điều hành robot là rất hữu ích.

Tôi cố gắng có ít nhất một ngôn ngữ lập trình được biên dịch và một ngôn ngữ lập trình được giải thích đang phát triển và có nhu cầu. Đây là một chiến lược thành công khi làm việc trong lĩnh vực kỹ thuật, nơi luôn có nhu cầu phát triển các thuật toán chuyên môn cao (đọc: bất thường) và triển khai chúng bằng các ngôn ngữ biên dịch. Nhiệm vụ chuẩn bị dữ liệu cho phần mềm như vậy sẽ dễ giải quyết hơn nhiều bằng cách sử dụng các ngôn ngữ thông dịch. Ban đầu, bộ của tôi bao gồm C++, Pascal và BASIC, sau đó thêm PHP và BASH.

Làm thế nào các công cụ phát triển có thể hữu ích trong việc giảng dạy học sinh

Kế hoạch phát triển chuyên môn chính hiện nay là cố gắng cung cấp cơ sở khoa học cho việc sử dụng các công cụ phát triển phần mềm chuyên nghiệp trong sư phạm, phát triển và thử nghiệm các phương pháp giảng dạy.

Kể từ năm 2016, tôi đã bắt đầu thử nghiệm lớn trong việc giới thiệu các công cụ phát triển - ngôn ngữ lập trình, IDE, trình tạo tài liệu, hệ thống kiểm soát phiên bản - vào thực tiễn giảng dạy ở giáo dục đại học. Bây giờ chúng ta đã thành công trong việc thu được những kết quả có thể khái quát hóa về mặt chất lượng.

Ví dụ, việc đưa các phiên bản tài liệu vào quá trình giáo dục sẽ cải thiện đáng kể chất lượng bài tập của học sinh, tuy nhiên, chỉ với một điều kiện bắt buộc: học sinh làm việc cùng nhau trong các dự án chung. Việc phát triển các phương pháp giảng dạy các môn kỹ thuật sử dụng các công cụ phát triển phần mềm chuyên nghiệp hiện đang được nhóm nghiên cứu của tôi, bao gồm các sinh viên, ứng viên và sinh viên các chương trình giáo dục bổ sung tại MSTU tích cực thực hiện.

Nhân tiện, tôi vẫn không rời bỏ công việc giảng dạy của mình - tôi đã phát triển khóa học toàn thời gian chuyên sâu của riêng mình về thiết kế và quản trị Linux cho Viện Nghiên cứu Nâng cao tại MSTU và tôi tự dạy khóa học đó.

Công việc khoa học

Làm việc sớm
Các vấn đề về lập kế hoạch dáng đi khi thiết kế hệ thống đi bộ bằng bốn chân sử dụng ví dụ thực hiện dáng đi của ngựa (2010)

Về vấn đề động học và tải trọng của bộ phận đỡ chân trước của ngựa trong giai đoạn tiếp cận giá đỡ như một bộ phận của chu trình làm việc của động cơ bốn chân (2012)

Từ cuối cùng
Ứng dụng mô phỏng chế tạo bánh răng 3D phục vụ giảng dạy cơ chế và lý thuyết máy (2019)

Phương pháp nhận biết chướng ngại vật kết cấu và ứng dụng trong tìm kiếm vật thể cứu trợ (2018)

Các công trình khác được cơ sở dữ liệu trích dẫn khoa học lập chỉ mục có thể xem trong hồ sơ của tôi trên Cổng nghiên cứu. Hầu hết các bài viết đều dành cho chuyển động của máy móc, có những công trình về sư phạm kỹ thuật và phần mềm giáo dục.

Nguồn: www.habr.com

Thêm một lời nhận xét