TurtleBot3电子手册:
http://emanual.robotis.com/docs/en/platform/turtlebot3/overview/
1.仿真环境下建图
roslaunch turtlebot3_gazebo turtlebot3_world.launch
roslaunch turtlebot3_slam turtlebot3_slam.launch
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
rosrun map_server map_saver -f fangzhen(-f后面加的是待命名的文件名,保存位置是当前运行终端的根目录下)
2.启动多机器人编队
roslaunch turtlebot3_gazebo multi_turtlebot3.launch
./fangzhen.sh
(roslaunch turbot3_navigation navigation_multi_map.launch map_file:=$HOME/fangzhen.yaml
roslaunch turbot3_navigation navigation_multi_0.launch
roslaunch turbot3_navigation navigation_multi_1.launch
roslaunch turbot3_navigation navigation_multi_2.launch
roslaunch turbot3_rviz navigation_multi.launch(
rosbag record tb3_0/odom tb3_1/odom tb3_2/odom
rosrun set_point set_point
3.matlab出角速度线速度图片
filepath = fullfile(‘D:\Desktop\路径’);
bag_v = rosbag(filepath);
bagselect_odom = select(bag_v, ‘Topic’, ‘/tb3_0/odom’);
bagselect_odom_combined = select(bag_v,‘Topic’,’/tb3_1/odom’);
bagselect_odom_combined_combined = select(bag_v,‘Topic’,’/tb3_2/odom’);
msgs_odom = readMessages(bagselect_odom);
v1 = timeseries(bagselect_odom,‘Twist.Twist.Linear.X’);
v2 = timeseries(bagselect_odom_combined,‘Twist.Twist.Linear.X’); %%线速度图像
v3 = timeseries(bagselect_odom_combined_combined,‘Twist.Twist.Linear.X’);
% v1 = timeseries(bagselect_odom,‘Twist.Twist.Angular.Z’);
% v2 = timeseries(bagselect_odom_combined,‘Twist.Twist.Angular.Z’); %%角速度图像
% v3 = timeseries(bagselect_odom_combined_combined,‘Twist.Twist.Angular.Z’);
% ts_odom = timeseries(bagselect_odom, ‘Pose.Pose.Position.X’);
% ts2_odom = timeseries(bagselect_odom,‘Pose.Pose.Position.Y’);
% ts3_odom = timeseries(bagselect_odom,‘Pose.Pose.Position.X’);
% ts_odom_combined = timeseries(bagselect_odom_combined, ‘Pose.Pose.Position.X’);
% ts2_odom_combined = timeseries(bagselect_odom_combined,‘Pose.Pose.Position.Y’);
% ts2_odom_combined = timeseries(bagselect_odom_combined,‘Pose.Pose.Position.Y’);
% q0 = timeseries(bagselect_odom, ‘Pose.Pose.Orientation.X’);
% q1 = timeseries(bagselect_odom, ‘Pose.Pose.Orientation.Y’);
% q2 = timeseries(bagselect_odom, ‘Pose.Pose.Orientation.Z’);
% q3 = timeseries(bagselect_odom, ‘Pose.Pose.Orientation.W’);
% [yaw_1,pitch_1,roll_1]=quat2angle([q0 q1 q2 q2],‘ZYX’);
% q_1 = [q0 q1 q2 q2];
% n_1=quatnormalize(q_1);
% [yaw_1,pitch_1,roll_1]=dcm2angle(n_1, ‘ZYX’);
% y1 = yaw_1.data;
%
% q4 = timeseries(bagselect_odom_combined, ‘Pose.Pose.Orientation.X’);
% q5 = timeseries(bagselect_odom_combined, ‘Pose.Pose.Orientation.Y’);
% q6 = timeseries(bagselect_odom_combined, ‘Pose.Pose.Orientation.Z’);
% q7 = timeseries(bagselect_odom_combined, ‘Pose.Pose.Orientation.W’);
% [yaw_2,pitch_2,roll_2]=quat2angle([q4 q5 q6 q7],‘ZYX’);
% q_2 = [q4 q5 q6 q7];
% n_2=quatnormalize(q_2);
% [yaw_2,pitch_2,roll_2]=dcm2angle(n_2, ‘ZYX’);
% y2 = yaw_2.data;
a = v1.Time;
b = v1.data;
c = v2.Time;
d = v2.data;
t = v3.Time;
u = v3.data;
% e = ts_odom.data;
% f = ts2_odom.data;
% g = ts_odom_combined.data;
% h = ts2_odom_combined.data;
% i = ts_odom.Time;
% j = ts2_odom_combined.Time;
plot(a,b,‘b’);
hold on;
plot(c,d,‘r’)
hold on;
plot(t,u,‘m’)
% line([1.606e+,279.101],[0.26,0.26],‘linestyle’,’–’);
set(gca,‘XTick’,560:5:620); %%前后分别对应图像的起点和终点
set(gca,‘XTicklabel’,{‘0’,‘5’,‘10’,‘15’,‘20’,‘25’,‘30’,‘35’,‘40’,‘45’,‘50’,‘55’,‘60’});
% set(gca,‘YTick’,-0.05:0.05:0.5);
% axis([248.862 279.101 -0.05 0.5]);
% text(248.862,0.3,‘0.26m/s’,‘fontsize’,24);
xlabel(‘时间(s)’,‘fontsize’,24,‘Fontname’,‘Helvetica’);
ylabel(‘速度(m/s)’,‘fontsize’,24,‘Fontname’,‘Helvetica’);
set(gcf,‘position’,[400,400,724,400])
% plot(c,d,‘r’);
% figure;
% plot(e,f,‘b’);
% hold on;
% plot(g,h,‘r’);
%角速度
% plot(i,y1,‘b’);
% hold on;
% plot(j,y2,‘r’);
%axis([0 3.5 0 2.0]);
legend(‘机器人A’,‘机器人B’,‘机器人C’);
1.起点终点设置
2.建地图
机器人起点位置设置
在gazebo里分别设置三个起点
通过gazebo可以看到位置坐标
在navigation设置机器人三个起点位置
分别设置终点位置