为TurtleBot创建UI
这个例子展示了如何创建一个UI收集传感器数据和控制TurtleBot®机器人。你可以使用UI和显示测程法和激光扫描数据阅读和teleoperate机器人速度通过发送命令。
对于这个示例,指定所有的代码和相关的回调函数在一个MATLAB®文件函数。
设置界面及其组件
创建一个函数,设置UI控制机器人。指定的尺寸按钮,每个按钮的回调。
指定函数头的UI。
函数turtlebot_UI
创建UI和隐藏在构建它。
图(f =“可见”,“关闭”,“位置”[50900570]);
为不同的按钮添加组件和轴用于图数据。指定是很重要的“回调”
名称-值对正确的处理函数。这些函数指定。
hforward = uicontrol (“风格”,“按钮”,…“字符串”,“前进”,“位置”(770440、70、25),…“回调”,@forwardCB);hleft = uicontrol (“风格”,“按钮”,…“字符串”,“左”,“位置”(730400、70、25),…“回调”,@leftCB);hright = uicontrol (“风格”,“按钮”,…“字符串”,“对”,“位置”(815400、70、25),…“回调”,@rightCB);hback = uicontrol (“风格”,“按钮”,…“字符串”,“回来”,“位置”(770360、70、25),…“回调”,@backCB);hgetOdom = uicontrol (“风格”,“按钮”,…“字符串”,“让奥多姆”,“位置”(730320、70、25),…“回调”,@getOdomCB);hreset = uicontrol (“风格”,“按钮”,…“字符串”,“重置”,“位置”(815320、70、25),…“回调”,@resetCB);hgetScan = uicontrol (“风格”,“按钮”,…“字符串”,“扫描”,“位置”(730280、70、25),…“回调”,@getScanCB);hclear = uicontrol (“风格”,“按钮”,…“字符串”,“清楚”,“位置”(815280、70、25),…“回调”,@clearCB);哈=轴(“单位”,“像素”,“位置”[60600400]);
显示UI添加后通过设置的所有组件可见
来“上”
。
%使UI可见f。可见=“上”;
连接到机器人
连接到你的TurtleBot机器人利用其特定的IP地址。你的模拟或真实TurtleBot必须在相同的ROS网络计算机MATLAB运行。
ipaddress =“192.168.192.130”;%你的机器人的IP地址tbot = turtlebot (ipaddress, 11311);tbot.Velocity。TopicName =' / cmd_vel ';
初始化变量所需的传感器数据。重置TurtleBot的测程法。
odomList = [];scanPts = [];resetOdometry (tbot);
为UI按钮指定回调函数
每个UI按钮有一个回调函数,激活当按钮被按下。你在你指定这些功能turtlebot_UI
函数文件。
创建方向按钮回调控制机器人。
函数eventdata forwardCB(源)setVelocity (tbot, 0.25, 0)结束函数eventdata leftCB(源)setVelocity (tbot 0 0.25)结束函数eventdata rightCB(源)setVelocity (tbot 0 -0.25)结束函数eventdata backCB(源)setVelocity (tbot, -0.25, 0)结束
的输入setVelocity
接口的对象,turtlebot
,线速度和角速度。
创建回调函数和清晰的测程法和激光扫描数据。plotOdom
和plotScan
是便利的函数绘制测程法和激光扫描当前轴。
函数getOdomCB plotOdom(来源、eventdata)结束函数eventdata resetCB(源)resetOdometry (tbot);odomList = [];plotOdom结束函数eventdata getScanCB(源)plotOdom在plotScan举行从结束函数eventdata clearCB(源)scanPts = [];plotOdom结束
指定plotOdom
和plotScan
功能,这情节传感器数据对当前轴在UI中。
函数plotOdom%得到当前并保存测程法和情节奥多姆= getOdometry (tbot);odomList = [odomList;odom.Position (1) odom.Position (2)];情节(odomList (: 1) odomList (:, 2),“b”)举行在箭袋(odom.Position (1) odom.Position (2),…cos (odom.Orientation(1)),罪(odom.Orientation (1)),“r”,…“线宽”,2)从xlim ([5,5]) ylim([5,5])网格在结束函数plotScan%情节激光扫描数据的当前测程法[扫描,scanMsg] = getLaserScan (tbot);奥多姆= getOdometry (tbot);车= readCartesian (scanMsg);scanPts =[购物车(:1)+ odom.Position(1)车(:,2)+ odom.Position (2)];偏航= odom.Orientation (1);R = [cos(偏航)sin(偏航);罪(偏航)因为(偏航)];scanPts = (R * scanPts ') ';情节(scanPts (: 1) scanPts (:, 2),“k”)xlim ([5,5]) ylim([5,5])网格在结束
结束turtlebot_UI
函数。确保所有的示例代码都是在这之间结束
和函数头。
结束
运行界面和控制机器人
调用turtlebot_UI
运行功能。UI创建和连接到机器人。设置您的机器人在运行界面之前。
turtlebot_UI
使用按钮来移动机器人。点击得到奥多姆绘制一个新的测程法(蓝色)或点得到扫描绘制当前激光扫描数据(黑)。
另请参阅
turtlebot
|getOdometry
|getLaserScan
|setVelocity