Mục lục:

Bộ điều khiển ROS Robotic dựa trên Matlab: 9 bước
Bộ điều khiển ROS Robotic dựa trên Matlab: 9 bước

Video: Bộ điều khiển ROS Robotic dựa trên Matlab: 9 bước

Video: Bộ điều khiển ROS Robotic dựa trên Matlab: 9 bước
Video: Thiết kế và mô phỏng bộ điều khiển trượt cho cánh tay robot 2 bậc tự do (nhóm 14 -2021) 2024, Tháng mười một
Anonim
Image
Image
Bộ điều khiển ROS Robotic dựa trên Matlab
Bộ điều khiển ROS Robotic dựa trên Matlab

Kể từ khi tôi còn là một đứa trẻ, tôi đã luôn mơ ước được trở thành Người Sắt và tôi vẫn làm như vậy. Iron Man là một trong những nhân vật hoàn toàn có thể xảy ra trên thực tế và đơn giản là tôi khao khát trở thành Iron Man vào một ngày nào đó ngay cả khi mọi người cười nhạo tôi hoặc nói rằng điều đó là không thể bởi vì "điều đó chỉ là không thể cho đến khi ai đó làm được điều đó" -Arnold Schwarzenegger.

ROS là một khuôn khổ mới nổi được sử dụng để phát triển các hệ thống rô bốt phức tạp. Các ứng dụng của nó bao gồm: Hệ thống lắp ráp tự động, Điện thoại, Cánh tay giả và Máy móc hạng nặng của ngành công nghiệp.

Các nhà nghiên cứu và kỹ sư tận dụng ROS để phát triển các nguyên mẫu, trong khi các nhà cung cấp khác nhau sử dụng nó để tạo ra sản phẩm của họ. Sử dụng MATLAB để tạo liên kết giao diện với ROS là một cách tiếp cận mới có thể giúp các nhà nghiên cứu, kỹ sư và nhà cung cấp phát triển các giải pháp mạnh mẽ hơn.

Vì vậy, hướng dẫn này là về cách tạo Bộ điều khiển ROS Robotic dựa trên Matlab, đây sẽ là một trong số rất ít các hướng dẫn về điều này trên mạng và trong số rất ít các hướng dẫn ROS. Mục tiêu của dự án này là thiết kế một bộ điều khiển có thể điều khiển bất kỳ ROS-rô bốt nào được kết nối với mạng của bạn. Vậy hãy bắt đầu!

tín dụng chỉnh sửa video: Ammar Akher, tại [email protected]

Quân nhu

Các thành phần sau được yêu cầu cho dự án:

(1) ROS PC / Robot

(2) Bộ định tuyến

(3) PC với MATLAB (phiên bản: 2014 trở lên)

Bước 1: Thiết lập mọi thứ

Đang thiết lập mọi thứ
Đang thiết lập mọi thứ

Đối với hướng dẫn này, tôi đang sử dụng Ubuntu 16.04 cho máy tính linux và ros-kinetic của mình, vì vậy để tránh nhầm lẫn, tôi khuyên bạn nên sử dụng ros kinetic và ubuntu 16.04 vì nó hỗ trợ tốt nhất cho ros-kinetic. Để biết thêm thông tin về cách cài đặt ros kinetic, hãy truy cập https://wiki.ros.org/kinetic/Installation/Ubuntu. Đối với MATLAB, bạn có thể mua giấy phép hoặc tải xuống phiên bản đường mòn từ đây.

Bước 2: Hiểu cách hoạt động của bộ điều khiển

Hiểu cách hoạt động của bộ điều khiển
Hiểu cách hoạt động của bộ điều khiển

Một máy tính chạy bộ điều khiển robot trên MATLAB. Bộ điều khiển lấy địa chỉ IP và cổng của máy tính / rô bốt ros.

Chủ đề ros được sử dụng để giao tiếp giữa bộ điều khiển và máy tính / rô bốt ros, chủ đề này cũng được bộ điều khiển lấy làm đầu vào. Modem được yêu cầu để tạo một mạng LAN (mạng cục bộ) và là thứ gán địa chỉ Ip cho tất cả các thiết bị được kết nối với mạng của nó. Do đó máy tính / rô bốt ros và máy tính chạy bộ điều khiển phải được kết nối với cùng một mạng (tức là mạng của modem). Vì vậy, bây giờ bạn đã biết "cách nó hoạt động", hãy chuyển sang "cách nó được xây dựng"…

Bước 3: Tạo giao diện ROS-MATLAB

Tạo giao diện ROS-MATLAB
Tạo giao diện ROS-MATLAB
Tạo giao diện ROS-MATLAB
Tạo giao diện ROS-MATLAB
Tạo giao diện ROS-MATLAB
Tạo giao diện ROS-MATLAB

Giao diện ROS-MATLABInterface là một giao diện hữu ích cho các nhà nghiên cứu và sinh viên để tạo mẫu các thuật toán rô bốt của họ trong MATLAB và thử nghiệm nó trên rô bốt tương thích với ROS. rô bốt hỗ trợ ROS hoặc trong các trình mô phỏng rô bốt như Gazebo và V-REP.

Để cài đặt hộp công cụ hệ thống rô bốt trên MATLAB của bạn, chỉ cần đi tới tùy chọn Tiện ích bổ sung trên thanh công cụ và tìm kiếm hộp công cụ rô bốt trong trình khám phá tiện ích bổ sung. Bằng cách sử dụng hộp công cụ robot, chúng tôi có thể xuất bản hoặc đăng ký một chủ đề, chẳng hạn như nút ROS và chúng tôi có thể biến nó thành một chủ ROS. Giao diện MATLAB-ROS có hầu hết các chức năng ROS mà bạn có thể yêu cầu cho các dự án của mình.

Bước 4: Lấy địa chỉ IP

Lấy địa chỉ IP
Lấy địa chỉ IP
Lấy địa chỉ IP
Lấy địa chỉ IP

Để bộ điều khiển hoạt động, bạn bắt buộc phải biết địa chỉ ip của rô bốt / máy tính ROS của mình và máy tính chạy bộ điều khiển trên MATLAB.

Để lấy ip máy tính của bạn:

Trên Windows:

Mở dấu nhắc lệnh và nhập lệnh ipconfig và ghi lại địa chỉ IPv4

Đối với Linux:

Gõ lệnh ifconfig và ghi lại địa chỉ inet. Bây giờ bạn đã có địa chỉ ip, đã đến lúc xây dựng GUI…

Bước 5: Tạo GUI cho Bộ điều khiển

Tạo GUI cho Bộ điều khiển
Tạo GUI cho Bộ điều khiển
Tạo GUI cho Bộ điều khiển
Tạo GUI cho Bộ điều khiển
Tạo GUI cho Bộ điều khiển
Tạo GUI cho Bộ điều khiển

Để tạo GUI, hãy mở MATLAB và nhập hướng dẫn vào cửa sổ lệnh. Điều này sẽ mở ra ứng dụng hướng dẫn mà chúng tôi sẽ tạo GUI của mình. Bạn cũng có thể sử dụng trình thiết kế ứng dụng trên MATLAB để thiết kế GUI của mình.

Chúng tôi sẽ tạo tổng cộng 9 nút (như trong hình):

6 nút nhấn: Foward, Backward, Left, Right, Connect to Robot, Disconnect

3 nút có thể chỉnh sửa: Ros pc ip, cổng và tên chủ đề.

Các nút có thể chỉnh sửa là các nút sẽ lấy ip của máy tính ROS, cổng của nó và tên Chủ đề làm đầu vào. Tên Chủ đề là những gì mà bộ điều khiển MATLAB và rô bốt / máy tính ROS giao tiếp với nhau. Để chỉnh sửa chuỗi trên nút có thể chỉnh sửa, nhấp chuột phải vào nút >> vào thuộc tính Thanh tra >> Chuỗi và chỉnh sửa văn bản của nút.

Khi GUI của bạn hoàn tất, bạn có thể lập trình các nút. Đây là nơi mà niềm vui thực sự bắt đầu…

Bước 6: Lập trình các nút có thể chỉnh sửa GUI

Lập trình các nút có thể chỉnh sửa GUI
Lập trình các nút có thể chỉnh sửa GUI
Lập trình các nút có thể chỉnh sửa GUI
Lập trình các nút có thể chỉnh sửa GUI
Lập trình các nút có thể chỉnh sửa GUI
Lập trình các nút có thể chỉnh sửa GUI
Lập trình các nút có thể chỉnh sửa GUI
Lập trình các nút có thể chỉnh sửa GUI

GUI được lưu dưới dạng tệp.fig nhưng mã / chức năng gọi lại được lưu ở định dạng.m. Tệp.m chứa mã cho tất cả các nút của bạn. Để thêm chức năng gọi lại vào các nút của bạn, hãy nhấp chuột phải vào nút> > Xem các cuộc gọi lại >> cuộc gọi lại. Thao tác này sẽ mở tệp.m cho GUI của bạn đến nơi nút cụ thể đó được xác định.

Lệnh gọi lại đầu tiên mà chúng tôi sẽ viết mã là cho nút có thể chỉnh sửa IP ROS. Trong hàm edit1_Callback, hãy viết đoạn mã sau:

function edit1_Callback (hObject, eventdata, handle)

ros_master_ip toàn cầu

ros_master_ip = get (hObject, 'String')

Ở đây, hàm được định nghĩa là edit1_Callback, nói đến nút có thể chỉnh sửa đầu tiên. Khi chúng ta nhập địa chỉ IP từ mạng ROS vào nút có thể chỉnh sửa này, nó sẽ lưu trữ địa chỉ IP dưới dạng một chuỗi trong một biến toàn cục có tên là ros_master_ip.

Sau đó, ngay dưới _OpeningFcn (hObject, eventdata, handle, varargin) xác định như sau (xem hình):

ros_master_ip toàn cầu

global ros_master_port

teleop_topic_name toàn cầu

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/ cmd_vel_mux / input / teleop';

Bạn chỉ cần mã hóa cứng toàn cầu ip ros-pc (ros_master_ip), cổng (ros_master_port) và tên Chủ đề Teleop. Điều này có nghĩa là nếu bạn để trống các nút có thể chỉnh sửa, các giá trị được xác định trước này sẽ được sử dụng khi bạn kết nối.

Lệnh gọi lại tiếp theo mà chúng ta sẽ viết mã là cho nút Cổng có thể chỉnh sửa.

Trong hàm edit2_Callback, hãy viết mã sau:

function edit2_Callback (hObject, eventdata, handle)

global ros_master_port

ros_master_port = get (hObject, 'String')

Ở đây, hàm được định nghĩa là edit2_Callback, nó đề cập đến nút có thể chỉnh sửa thứ hai. Khi chúng ta nhập cổng của máy tính / robot ros tại đây từ mạng ROS trong nút có thể chỉnh sửa này, nó sẽ lưu trữ cổng dưới dạng một chuỗi trong một biến toàn cục có tên là ros_master_port.

Tương tự, lệnh gọi lại tiếp theo mà chúng ta sẽ viết mã là cho nút có thể chỉnh sửa Tên chủ đề.

Trong hàm edit3_Callback, hãy viết đoạn mã sau:

function edit3_Callback (hObject, eventdata, handle)

teleop_topic_name toàn cầu

teleop_topic_name = get (hObject, 'String')

Tương tự như ros_master_port, điều này cũng được lưu trữ dưới dạng chuỗi trong một biến toàn cục.

Tiếp theo, chúng ta sẽ xem xét các chức năng gọi lại cho các nút nhấn…

Bước 7: Lập trình các nút đẩy GUI

Lập trình các nút đẩy GUI
Lập trình các nút đẩy GUI
Lập trình các nút đẩy GUI
Lập trình các nút đẩy GUI

Các nút nhấn mà chúng tôi đã tạo trước đây là những nút chúng tôi sẽ sử dụng để di chuyển, kết nối và ngắt kết nối robot khỏi bộ điều khiển. Các lệnh gọi lại của nút nhấn được định nghĩa như sau:

ví dụ. function pushbutton6_Callback (hObject, eventdata, handle)

Lưu ý: tùy thuộc vào thứ tự mà bạn tạo các nút nhấn, chúng sẽ được đánh số tương ứng. Do đó, hàm pushbutton6 trong tệp.m của tôi có thể là Chuyển tiếp trong khi trong tệp.m của bạn, nó có thể là Quay lại, vì vậy hãy ghi nhớ điều đó. Để biết chức năng chính xác cho nút nhấn của bạn, chỉ cần nhấp chuột phải vào >> Xem lệnh gọi lại >> lệnh gọi lại và nó sẽ mở ra chức năng cho nút nhấn của bạn nhưng đối với hướng dẫn này, tôi giả sử nó giống như của tôi.

Đối với nút Kết nối với rô bốt:

Trong hàm pushbutton6_Callback (hObject, eventdata, handle):

function pushbutton6_Callback (hObject, eventdata, handle) global ros_master_ip

ros_master_port toàn cầu

teleop_topic_name toàn cầu

robot toàn cầu

velmsg toàn cầu

ros_master_uri = strcat ('https://', ros_master_ip, ':', ros_master_port)

setenv ('ROS_MASTER_URI', ros_master_uri)

rosinit

robot = rospublisher (teleop_topic_name, 'shape_msgs / Twist');

velmsg = rosmessage (người máy);

Lệnh gọi lại này sẽ thiết lập biến ROS_MASTER_URI bằng cách nối ros_master_ip và cổng, sau đó lệnh rosinit sẽ khởi tạo kết nối. Sau khi kết nối, nó sẽ tạo một nhà xuất bản của hình học_msgs / Twist, sẽ được sử dụng để gửi tốc độ lệnh. Tên chủ đề là tên mà chúng tôi đưa ra trong hộp chỉnh sửa. Sau khi kết nối thành công, chúng ta sẽ có thể thao tác với các nút nhấn Forward, Backward, Left, Right.

Trước khi thêm callbacks vào mông đẩy Forward, Backward, chúng ta cần khởi tạo tốc độ của vận tốc tuyến tính và vận tốc góc.

Do đó bên dưới _OpeningFcn (hObject, eventdata, handle, varargin) xác định như sau (xem hình):

global left_spinVelocity global right_spinVelocity

chuyển tiếp toàn cầu

lạc hậu toàn cầu

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

lùi lại Vận tốc = -3;

Lưu ý: tất cả các vận tốc đều tính bằng rad / s

Bây giờ các biến toàn cục đã được định nghĩa, chúng ta hãy lập trình các nút chuyển động.

Đối với nút Tiến:

function pushbutton4_Callback (hObject, eventdata, handle) global velmsg

robot toàn cầu

teleop_topic_name toàn cầu

chuyển tiếp toàn cầu

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

gửi (rô bốt, khóa dán);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Tương tự cho nút Backward:

function pushbutton5_Callback (hObject, eventdata, handle)

velmsg toàn cầu

robot toàn cầu

lạc hậu toàn cầu

teleop_topic_name toàn cầu

velmsg. Angular. Z = 0;

velmsg. Linear. X = backVelocity;

gửi (rô bốt, khóa dán);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Tương tự cho nút bên trái: function pushbutton3_Callback (hObject, eventdata, handle)

robot vận tốc toàn cầu global left_spinVelocity

teleop_topic_name toàn cầu

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

gửi (rô bốt, khóa dán);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Tương tự đối với nút bấm Bên phải:

robot toàn cầu velmsgglobal

global right_spinVelocity

teleop_topic_name toàn cầu

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

gửi (rô bốt, khóa dán);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Khi tất cả các chức năng gọi lại đã được thêm và các tệp được lưu, chúng tôi có thể kiểm tra bộ điều khiển của mình.

Bước 8: Thiết lập cấu hình mạng trên ROS PC (Linux)

Thiết lập cấu hình mạng trên PC ROS (Linux)
Thiết lập cấu hình mạng trên PC ROS (Linux)
Thiết lập cấu hình mạng trên PC ROS (Linux)
Thiết lập cấu hình mạng trên PC ROS (Linux)

Chúng tôi sẽ thử nghiệm bộ điều khiển trên máy tính ros (Linux), điều này sẽ yêu cầu thiết lập cấu hình mạng. Nếu bạn cũng đang chạy bộ điều khiển trên máy tính linux, bạn cũng sẽ phải thiết lập cấu hình mạng ở đó.

Cấu hình mạng:

Mở cửa sổ đầu cuối của bạn và nhập gedit.bashrc

Khi tệp được mở, hãy thêm những thứ sau:

Cấu hình máy #Robot

xuất ROS_MASTER_URI = https:// localhost: 11311

Địa chỉ #IP của nút chính ROS

xuất ROS_HOSTNAME =

xuất ROS_IP =

echo "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

echo "ROS_MASTER_URI:" $ ROS_MASTER_URI

Bạn phải làm theo bước này mọi lúc do việc gán IP động.

Bước 9: Chạy bộ điều khiển

Chạy bộ điều khiển
Chạy bộ điều khiển

Chúng tôi sẽ kiểm tra bộ điều khiển của mình trên một bot Turtle ở Gazebo.

Để cài đặt Gazebo, vui lòng tham khảo

Để cài đặt bot Turtle, vui lòng tham khảo

Mở thư mục mà bạn đã lưu các tệp.fig và.m của mình trên MATLAB và nhấn Run (như trong hình). Thao tác này sẽ mở bộ điều khiển trên PC. Trước khi nhấn kết nối, hãy đảm bảo rằng trình mô phỏng bot rùa của bạn đang hoạt động.

Để kiểm tra mô phỏng TurtleBot của bạn:

Mở Terminal trên máy tính Ros và nhập: $ roslaunch rùabot_gazebo rùabot_world.launch. Điều này sẽ mở ra một mô phỏng của Turtlebot trên PC đó. Tên chủ đề của TurtleBot là / cmd_vel_mux / input / teleop, mà chúng tôi đã cung cấp trong ứng dụng. Bot rùa của bạn sẽ bắt đầu di chuyển khi bạn nhấn Tiến lên, Lùi lại, v.v.

Để xem vận tốc tuyến tính và góc:

Mở một thiết bị đầu cuối mới và nhập lệnh: $ rostopic echo / cmd_vel_mux / input / teleop

Và bạn đã có, Bộ điều khiển ROS Robotic dựa trên Matlab của riêng bạn. Nếu bạn thích tài liệu hướng dẫn của tôi, hãy bình chọn cho nó trong Cuộc thi Tác giả Lần đầu tiên và chia sẻ nó với càng nhiều người càng tốt. Cảm ơn bạn.

Đề xuất: