ROS + MATLAB에서 레이저 값을 얻고 그려 보았습니다.
소개
ROS와 MATLAB이 공동 출연 할 수 있음에도 불구하고 의외로 알려지지 않은 것과 참고가되는 프로그램이 적기 때문에 씁니다.
게다가 ROS를 보통의 PC에 넣는 것은 힘들습니다 Rasp이라면 곧 할 수 있으므로
목적
ROS와 Matlab의 병용
상세
ROS와 MATLAB을 동시에 취급할 수 있으면 예를 들어 ROS가 들어간 Raspi로 Laser의 값을 취득, 그것을 MATLAB상에서 취득해, 로봇의 모터의 지령치를 생성(Matlab의 제어 라이브러리 툴을 사용할 수 있다→여기 중요) Raspi의 GPIO를 통해 Raspi에서 모터를 움직일 수 있습니다.
준비하는 것
· Raspi (Ubuntu mate 16.04)
・PC(Matlab이 들어간 PC(2017a 이상 추천))
・UST-10(Hokuyo 전기)
이런 식으로 배선
코드
①Raspi로 roscre를 시작
roscore
②Raspi로 LRS를 사용할 수 있는 라이브러리를 일으킵니다
설치 방법을 찾으면 있으므로 가십시오.
(ROS의 좋은 점은 이런 식으로 도서관을 사용할 수있는 것입니다)
③ Matlab의 코드는 이런 느낌
Main file
main.m
%% 初期化作業
clear
close all
% ROS初期化
% raspiのIPを入力(変更する場合)
% ROSCOREのIPをいれてください
rosinit('http://'ここにIP':11311')
%% 各ノード立ち上げ
% Subscriber
% Topic : /Scan
% Topic Type : MatlabはSubscribeする場合はTopic名のみで受信可能
% Callback_func : laser_func
% Topicを受信し次第@laser_funcを実行
matlab_sub_node = rossubscriber('/scan', @laser_func);%レーザの値を取得してくるSubscriber
%% またはreceiveでも値を得ることが可能
%% 片付け
rosshutdown
laser_func 함수에서
laser_func.m%% Laser_func
function laser_func(obj, message, src);
%% global変数(Publishノード)
global matlab_pub_node
%% massageを受信
distance = ((message.Ranges);%距離データ()
distance_num = length(distance);%データの数
Max_angle = message.AngleMax;%最大角度
min_angle = message.AngleMin;%最小角度
angle_step = message.AngleIncrement;%ステップ角度
angle = min_angle: angle_step :Max_angle;%角度行列
%Laserのスペック
max_det_dis = 25;
%外れ値処理(値がとれずに35となった場合)
for n = 1:1:distance_num
if distance(n) > max_det_dis && n > 1%端以外の外れ値は1つ前の角度の距離と同様
distance(n) = distance(n-1);
elseif n == 1 && distance(n) > max_det_dis%端は0に
distance(n) = 0;
end
end
%% ここから下に処理を書いてください %%%%%%%%%%%%%%
%distanceは距離データ行列
%angleは角度行列
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 描画
refresh%リセット
for n_all = 1:1:distance_num
X_all_Data(n_all) = distance(n_all) * cos(angle(n_all));
Y_all_Data(n_all) = distance(n_all) * sin(angle(n_all));
end
plot(X_all_Data, Y_all_Data, 'LineWidth', 3, 'Color', [0 0 1]);
hold on
%描画範囲
XLIM = max(X_all_Data);
YLIM = max(Y_all_Data);
xlim([-XLIM XLIM]);
ylim([-YLIM YLIM]);
hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Matlab의 ROS 라이브러리는 receive를 사용해도 Topic의 값을 얻을 수 있지만 ROS처럼 보이지 않으므로 callback 함수를 사용합니다.
실행해 보면,
그려주었습니다! !
다음에는 이것을 사용해도 것을 검출하는 알고리즘을 해 보겠습니다!
또한 프로그램이 github에 올라 있습니다.
Twitter도 확인 부탁드립니다
htps : // 라고 해서 r. 코m/슈니치세키구 1
Reference
이 문제에 관하여(ROS + MATLAB에서 레이저 값을 얻고 그려 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MENDY/items/9274ba347bb8b524ec38
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
ROS와 Matlab의 병용
상세
ROS와 MATLAB을 동시에 취급할 수 있으면 예를 들어 ROS가 들어간 Raspi로 Laser의 값을 취득, 그것을 MATLAB상에서 취득해, 로봇의 모터의 지령치를 생성(Matlab의 제어 라이브러리 툴을 사용할 수 있다→여기 중요) Raspi의 GPIO를 통해 Raspi에서 모터를 움직일 수 있습니다.
준비하는 것
· Raspi (Ubuntu mate 16.04)
・PC(Matlab이 들어간 PC(2017a 이상 추천))
・UST-10(Hokuyo 전기)
이런 식으로 배선
코드
①Raspi로 roscre를 시작
roscore
②Raspi로 LRS를 사용할 수 있는 라이브러리를 일으킵니다
설치 방법을 찾으면 있으므로 가십시오.
(ROS의 좋은 점은 이런 식으로 도서관을 사용할 수있는 것입니다)
③ Matlab의 코드는 이런 느낌
Main file
main.m
%% 初期化作業
clear
close all
% ROS初期化
% raspiのIPを入力(変更する場合)
% ROSCOREのIPをいれてください
rosinit('http://'ここにIP':11311')
%% 各ノード立ち上げ
% Subscriber
% Topic : /Scan
% Topic Type : MatlabはSubscribeする場合はTopic名のみで受信可能
% Callback_func : laser_func
% Topicを受信し次第@laser_funcを実行
matlab_sub_node = rossubscriber('/scan', @laser_func);%レーザの値を取得してくるSubscriber
%% またはreceiveでも値を得ることが可能
%% 片付け
rosshutdown
laser_func 함수에서
laser_func.m%% Laser_func
function laser_func(obj, message, src);
%% global変数(Publishノード)
global matlab_pub_node
%% massageを受信
distance = ((message.Ranges);%距離データ()
distance_num = length(distance);%データの数
Max_angle = message.AngleMax;%最大角度
min_angle = message.AngleMin;%最小角度
angle_step = message.AngleIncrement;%ステップ角度
angle = min_angle: angle_step :Max_angle;%角度行列
%Laserのスペック
max_det_dis = 25;
%外れ値処理(値がとれずに35となった場合)
for n = 1:1:distance_num
if distance(n) > max_det_dis && n > 1%端以外の外れ値は1つ前の角度の距離と同様
distance(n) = distance(n-1);
elseif n == 1 && distance(n) > max_det_dis%端は0に
distance(n) = 0;
end
end
%% ここから下に処理を書いてください %%%%%%%%%%%%%%
%distanceは距離データ行列
%angleは角度行列
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 描画
refresh%リセット
for n_all = 1:1:distance_num
X_all_Data(n_all) = distance(n_all) * cos(angle(n_all));
Y_all_Data(n_all) = distance(n_all) * sin(angle(n_all));
end
plot(X_all_Data, Y_all_Data, 'LineWidth', 3, 'Color', [0 0 1]);
hold on
%描画範囲
XLIM = max(X_all_Data);
YLIM = max(Y_all_Data);
xlim([-XLIM XLIM]);
ylim([-YLIM YLIM]);
hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Matlab의 ROS 라이브러리는 receive를 사용해도 Topic의 값을 얻을 수 있지만 ROS처럼 보이지 않으므로 callback 함수를 사용합니다.
실행해 보면,
그려주었습니다! !
다음에는 이것을 사용해도 것을 검출하는 알고리즘을 해 보겠습니다!
또한 프로그램이 github에 올라 있습니다.
Twitter도 확인 부탁드립니다
htps : // 라고 해서 r. 코m/슈니치세키구 1
Reference
이 문제에 관하여(ROS + MATLAB에서 레이저 값을 얻고 그려 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MENDY/items/9274ba347bb8b524ec38
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
· Raspi (Ubuntu mate 16.04)
・PC(Matlab이 들어간 PC(2017a 이상 추천))
・UST-10(Hokuyo 전기)
이런 식으로 배선
코드
①Raspi로 roscre를 시작
roscore
②Raspi로 LRS를 사용할 수 있는 라이브러리를 일으킵니다
설치 방법을 찾으면 있으므로 가십시오.
(ROS의 좋은 점은 이런 식으로 도서관을 사용할 수있는 것입니다)
③ Matlab의 코드는 이런 느낌
Main file
main.m
%% 初期化作業
clear
close all
% ROS初期化
% raspiのIPを入力(変更する場合)
% ROSCOREのIPをいれてください
rosinit('http://'ここにIP':11311')
%% 各ノード立ち上げ
% Subscriber
% Topic : /Scan
% Topic Type : MatlabはSubscribeする場合はTopic名のみで受信可能
% Callback_func : laser_func
% Topicを受信し次第@laser_funcを実行
matlab_sub_node = rossubscriber('/scan', @laser_func);%レーザの値を取得してくるSubscriber
%% またはreceiveでも値を得ることが可能
%% 片付け
rosshutdown
laser_func 함수에서
laser_func.m%% Laser_func
function laser_func(obj, message, src);
%% global変数(Publishノード)
global matlab_pub_node
%% massageを受信
distance = ((message.Ranges);%距離データ()
distance_num = length(distance);%データの数
Max_angle = message.AngleMax;%最大角度
min_angle = message.AngleMin;%最小角度
angle_step = message.AngleIncrement;%ステップ角度
angle = min_angle: angle_step :Max_angle;%角度行列
%Laserのスペック
max_det_dis = 25;
%外れ値処理(値がとれずに35となった場合)
for n = 1:1:distance_num
if distance(n) > max_det_dis && n > 1%端以外の外れ値は1つ前の角度の距離と同様
distance(n) = distance(n-1);
elseif n == 1 && distance(n) > max_det_dis%端は0に
distance(n) = 0;
end
end
%% ここから下に処理を書いてください %%%%%%%%%%%%%%
%distanceは距離データ行列
%angleは角度行列
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 描画
refresh%リセット
for n_all = 1:1:distance_num
X_all_Data(n_all) = distance(n_all) * cos(angle(n_all));
Y_all_Data(n_all) = distance(n_all) * sin(angle(n_all));
end
plot(X_all_Data, Y_all_Data, 'LineWidth', 3, 'Color', [0 0 1]);
hold on
%描画範囲
XLIM = max(X_all_Data);
YLIM = max(Y_all_Data);
xlim([-XLIM XLIM]);
ylim([-YLIM YLIM]);
hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Matlab의 ROS 라이브러리는 receive를 사용해도 Topic의 값을 얻을 수 있지만 ROS처럼 보이지 않으므로 callback 함수를 사용합니다.
실행해 보면,
그려주었습니다! !
다음에는 이것을 사용해도 것을 검출하는 알고리즘을 해 보겠습니다!
또한 프로그램이 github에 올라 있습니다.
Twitter도 확인 부탁드립니다
htps : // 라고 해서 r. 코m/슈니치세키구 1
Reference
이 문제에 관하여(ROS + MATLAB에서 레이저 값을 얻고 그려 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MENDY/items/9274ba347bb8b524ec38
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
roscore
main.m
%% 初期化作業
clear
close all
% ROS初期化
% raspiのIPを入力(変更する場合)
% ROSCOREのIPをいれてください
rosinit('http://'ここにIP':11311')
%% 各ノード立ち上げ
% Subscriber
% Topic : /Scan
% Topic Type : MatlabはSubscribeする場合はTopic名のみで受信可能
% Callback_func : laser_func
% Topicを受信し次第@laser_funcを実行
matlab_sub_node = rossubscriber('/scan', @laser_func);%レーザの値を取得してくるSubscriber
%% またはreceiveでも値を得ることが可能
%% 片付け
rosshutdown
%% Laser_func
function laser_func(obj, message, src);
%% global変数(Publishノード)
global matlab_pub_node
%% massageを受信
distance = ((message.Ranges);%距離データ()
distance_num = length(distance);%データの数
Max_angle = message.AngleMax;%最大角度
min_angle = message.AngleMin;%最小角度
angle_step = message.AngleIncrement;%ステップ角度
angle = min_angle: angle_step :Max_angle;%角度行列
%Laserのスペック
max_det_dis = 25;
%外れ値処理(値がとれずに35となった場合)
for n = 1:1:distance_num
if distance(n) > max_det_dis && n > 1%端以外の外れ値は1つ前の角度の距離と同様
distance(n) = distance(n-1);
elseif n == 1 && distance(n) > max_det_dis%端は0に
distance(n) = 0;
end
end
%% ここから下に処理を書いてください %%%%%%%%%%%%%%
%distanceは距離データ行列
%angleは角度行列
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 描画
refresh%リセット
for n_all = 1:1:distance_num
X_all_Data(n_all) = distance(n_all) * cos(angle(n_all));
Y_all_Data(n_all) = distance(n_all) * sin(angle(n_all));
end
plot(X_all_Data, Y_all_Data, 'LineWidth', 3, 'Color', [0 0 1]);
hold on
%描画範囲
XLIM = max(X_all_Data);
YLIM = max(Y_all_Data);
xlim([-XLIM XLIM]);
ylim([-YLIM YLIM]);
hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Reference
이 문제에 관하여(ROS + MATLAB에서 레이저 값을 얻고 그려 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MENDY/items/9274ba347bb8b524ec38텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)