项目六任务3:智慧场景下的线控底盘应用开发-学生手册_第1页
项目六任务3:智慧场景下的线控底盘应用开发-学生手册_第2页
项目六任务3:智慧场景下的线控底盘应用开发-学生手册_第3页
项目六任务3:智慧场景下的线控底盘应用开发-学生手册_第4页
项目六任务3:智慧场景下的线控底盘应用开发-学生手册_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务6.3智慧场景下的线控底盘应用开发-学生手册【任务导入】想象一下,你置身于一个拥有智能感知和自动化控制的工厂车间。机器在节奏鲜明的运转中,但是这一切看似毫不费力,因为这些机器的底盘正被一种新型的线控技术所驱动。这不再是传统的控制方式,而是一种集智慧和灵活性于一身的创新应用。在这个场景中,线控底盘应用的开发成为了焦点。这项技术不仅仅是简单地控制机器的移动,而是通过智能化的算法和传感器,使得机器能够更加智能地感知周围环境,并做出相应的反应。而你,作为这个领域的一名开发者,将扮演着重要的角色。你将与工程师团队紧密合作,利用最新的技术和算法,设计出更加智能和可靠的线控底盘应用。通过本次课程,我们将学习在如何基于ROS系统来完成线控底盘的开发和操作,并通过这个过程掌握在windows系统中如何搭建Ubuntu系统。SHAPE提示:此次任务我们将通过VMwareWorkstation搭建Ubuntu虚拟机,并在虚拟机中完成线控底盘的应用开发,实现对线控底盘的实时控制与可视化。提示:此次任务我们将通过VMwareWorkstation搭建Ubuntu虚拟机,并在虚拟机中完成线控底盘的应用开发,实现对线控底盘的实时控制与可视化。

【学习目标】素质目标熟悉产品设计以及技术特点,培养学生规范操作的意识;理解开发相关函数与技术,培养学生一丝不苟的工匠精神;通过不同实操任务,锻炼学生解决实际问题的能力。知识目标熟悉并掌握ROS常见的消息类型[K92];熟悉并理解poll函数与read函数[K93];熟悉在Ubuntu下ROS系统的搭建[K94];熟悉并理解ROS系统下线控底盘的可视化开发[K95];熟悉并理解ROS系统下线控底盘的控制[K96]。能力目标能说出ROS常见的消息类型[A82];能独立完成键盘监听相关逻辑部分代码[A83];掌握ROS系统下线控底盘的可视化开发[A84];掌握ROS系统下线控底盘的控制[A85];能够独立完成线控底盘控制节点源码修改[A86]。【知识准备】一、开发硬件介绍1.产品概述格仕线控物流底盘(Gersh-glTruckCar)基于乘用车级电子电气架构而开发搭载线控转向、线控制动、线控驱动、线控声光、轮速传感器、格仕底盘域控制器Gersh-VCU、远距遥控器,为低速无人驾驶提供高性能线控底盘。该底盘开放全线控协议,支持遥控驾驶以及L4级无人驾驶,适用于园区运载、物流配送、科研教学等场景。2.功能介绍(1)线控协议预留CAN总线接口,开放线控接口协议,支持二次开发,支持搭载不同无人驾驶算法,便于进行教学、科研、测试等工作。(2)车辆功能线控制动、线控转向、线控驱动、线控声光功能,可通过远距遥控器控制车辆的运动状态,实现遥控驾驶功能。(3)车辆控制使用者可通过USERCAN、远距遥控器或无人驾驶域控制器发送报文,控制底盘的运动状态。(4)关键部件可提供VCU的电气参数规格书,可提供定制化开发。3.技术特点(1)整体设计前悬架设计为麦弗逊式悬架,后悬架设计为钣式非独立悬架满足复杂路面的应用场景。(2)开发设计车架采用开放式设计,便于查看线控部件的运行状态,便于科研教学等的进行;整车正向开发设计,流水线量产,且支持产品的定制开发。(3)动力系统采用带BMS的动力锂电池+启动电池的双电力系统,能够增大续航里程与电池寿命,削弱车辆启动时的有害电压脉冲,实现动力几余(4)用户上位机使用者可基于该上位机对底盘的线控部件进行单独调试与通信检测,大大提升无人车的开发效率。二、ROS常见消息类型ROS(RobotOperatingSystem)是一种用于编写机器人软件的框架。在ROS中,消息类型是通过.msg文件定义的。这些文件被编译成对应于特定编程语言的代码。以下是一些常见的ROS消息类型及其C++实例代码。1.std_msgs/Stringstd_msgs/String是一个简单的消息,包含一个std::string。在C++中,可以用来发送C++标准库中的字符串。#include"std_msgs/String.h"std_msgs::Stringmsg;msg.data="Hello,ROS!";2.std_msgs/InT32std_msgs/Int32是一个包含一个32位整数的简单消息。在C++中,可以用来发送C++标准库中的整数。#include"std_msgs/Int32.h"std_msgs::Int32msg;msg.data=123;3.geometry_msgs/Twistgeometry_msgs/Twist是一个表示线速度和角速度的消息,常用于发布机器人的速度指令。#include"geometry_msgs/Twist.h"geometry_msgs::Twistmsg;msg.linear.x=0.5;//设置线速度为0.5米/秒msg.angular.z=0.5;//设置角速度为0.5弧度/秒4.nav_msgs/Odometrynav_msgs/Odometry是ROS系统中常用的消息类型之一,用于表示机器人的位置和姿态以及速度信息。std_msgs/Headerheaderstringchild_frame_idgeometry_msgs/PoseWithCovariancepose//位置和方向;规定在header.frame_idgeometry_msgs/TwistWithCovariancetwist//角速度和线速度;规定在child_frame_id坐标系下三、poll函数与read函数1.poll函数(1)poll函数介绍poll函数是一种用于监控多个文件描述符状态变化的系统调用,它能够同时监控多个文件描述符,以便在它们中的任何一个就绪(例如,可读、可写或有异常条件)时接收通知。poll函数通过将当前的文件指针挂到等待队列中,以便在文件描述符就绪时能够被通知。poll函数的原型为intpoll(structpollfd*fds,nfds_tnfds,inttimeout),其中:1)fds是一个指向structpollfd数组的指针,每个数组元素都是一个structpollfd结构,用于指定测试某个给定的文件描述符的条件。structpollfd包含三个成员:intfd(文件描述符),shortevents(等待的事件),和shortrevents(实际发生的事件)。2)nfds是监控数组中文件描述符的数量。3)timeout是毫秒级等待时间,如果设置为0,则poll函数立即返回;如果设置为-1,则poll函数会一直挂起直到一个指定事件发生;如果大于0,则表示等待指定的毫秒数。(2)poll函数作用与参数含义1)poll函数作用对文件描述符(文件、终端设备)中准备好读、写或出错状态的描述符的总数量2)poll函数参数含义第一个参数:文件描述符(0代表键盘输入);第二个参数:用于标记第一个参数中的结构踢元素的总数量;第三个参数:poll函数调用阻塞的时间,单位:毫秒;返回值:文件描述符(终端)个数。2.read函数(1)read函数介绍其函数原型如下:ssize_tread(intfd,void*buf,size_tcount);其中,fd是文件描述符,buf是存放读取数据的缓冲区,count是要读取的字节数。read函数返回实际读取的字节数,如果返回-1表示读取失败。(2)read函数作用与参数含义1)read函数作用read函数用于从文件描述符中读取数据,并将数据存储到缓冲区中。2)read函数参数含义第一个参数:文件描述符(0代表键盘输入);第二个参数:用于存放读取到的字符;第三个参数:每次读取的数量:逐个字符依次读取,且每次只读取一个。3.键盘监听相关逻辑代码if((num=poll(&fds,1,250))<0{//返回值少于0,则异常ROS_INFO("poll函数异常");return0;}elseif(num>0){//返回值大于0用户没有输入内容,则正常开始读数据if(read(0,&c,1)<0){ROS_INFO("read函数异常");return0;}}else{//返回值等于0用户没有输入内容,会返回if(dirty==ture){dirty=false;}continue;}【任务实施】一、实施准备1.工具设备清单表5-3-SEQ表_5-3-\*ARABIC4工具设备清单分类名称数量图例实训设备线控底盘1套测试电脑1套CAN测试仪1套防护工具工作手套1双辅助材料无纺布1张2.检查设备(1)穿戴好工作手套和安全帽,将工具设备等摆放在工位上。(2)检查线控底盘外观是否正常,内部零件是否齐全,线束连接是否正常。(3)检查测试电脑外观是否正常。(4)连接CAN测试仪外观是否正常无破损。3.连接设备(1)将车辆外接CAN0接口连接到CAN测试仪CAN1通道,如REF_Ref166511184\h图6-3-1所示。图6-3-SEQ图_6-3-\*ARABIC1连接CAN测试工具(2)通过拨码开关,将CAN1的终端电阻R1拨到ON的位置,如REF_Ref166511753\h图6-3-2所示,接入终端电阻。图6-3-SEQ图_6-3-\*ARABIC2接入终端电阻(3)使用USB连接线将CAN分析仪连接到电脑,如REF_Ref166511760\h图6-3-3所示。图6-3-SEQ图_6-3-\*ARABIC3连接电脑4.启动设备(1)按下车辆的电源开关,启动车辆,如REF_Ref166511736\h图6-3-4所示。图6-3-SEQ图_6-3-\*ARABIC4启动车辆(2)长按遥控器的电源键(左右各一个,同时长按3秒),如REF_Ref166511853\h图6-3-5所示,启动遥控器。图6-3-SEQ图_6-3-\*ARABIC5开启遥控器(3)将遥控器最右侧SWD拨杆开关往下拨动,进入遥控驾驶模式,如REF_Ref166512100\h图6-3-6所示。图6-3-SEQ图_6-3-\*ARABIC6进入遥控驾驶模式(4)在遥控模式下按下遥控器背面右边按钮时,进入自动驾驶模式,如REF_Ref166512116\h图6-3-7所示。图6-3-SEQ图_6-3-\*ARABIC7切换至自动驾驶模式(5)按下测试电脑的电源开关,启动测试电脑。二、线控底盘ROS系统开发1.安装ROS1系统(1)输入指令检查是否安装CMake,如果成功安装如所示;如果未安装输入下列命令安装CMake。sudoaptinstallcmake图6-3-SEQ图_6-3-\*ARABIC8检查cmake版本(2)打开终端,输入以下命令,添加ROS软件源。sudosh-c'./etc/lsb-release&&echo"deb/ros/ubuntu/`lsb_release-cs`main">/etc/apt/sources.list.d/ros-latest.list'图6-3-SEQ图_6-3-\*ARABIC9添加ROS软件源(3)输入下列命令,设置ROS安装密钥。sudoapt-keyadv--keyserver'hkp://:80'--recv-keyC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654图6-3-SEQ图_6-3-\*ARABIC10设置安装密钥(4)输入下列命令,更新Ubuntu软件源。sudoaptupdate图6-3-SEQ图_6-3-\*ARABIC11更新软件源(5)输入下列命令,安装ROS桌面完整版。sudoaptinstallros-melodic-desktop-full图6-3-SEQ图_6-3-\*ARABIC12安装ROS桌面完整版(6)输入下列命令,设置ROS环境变量。echo"source/opt/ros/melodic/setup.bash">>~/.bashrcsource~/.bashrc图6-3-SEQ图_6-3-\*ARABIC13设置ROS环境变量(7)安装ROS工具。sudoaptinstallpython-rosdeppython-rosinstallpython-rosinstall-generatorpython-wstoolbuild-essential图6-3-SEQ图_6-3-\*ARABIC14安装ROS工具(8)输入下列指令,并将下列地址复制在host文件后保存,确保ROS初始化成功。sudogedit/etc/hosts地址:331853github.io9468193333333333333333950125029492830027017406087168图6-3-SEQ图_6-3-\*ARABIC15配置初始化地址(9)输入下列命令,初始化ROS安装。sudorosdepinit图6-3-SEQ图_6-3-\*ARABIC16初始化ROS安装(10)安装ROS系统完成后,输入下列命令,若小海龟和rviz成功启动,确保ROS成功安装,具体如REF_Ref167096591\h图6-3-19,REF_Ref167096596\h图6-3-20所示。roscorerosrunturtlesimturtlesim_noderosrunrvizrviz图6-3-SEQ图_6-3-\*ARABIC17启动turtle图6-3-SEQ图_6-3-\*ARABIC18启动rviz2.线控底盘可视化开发(1)将需要编译的ROS功能包利用共享文件夹的形式,允许主机和虚拟机同时访问,操作的具体步骤为“虚拟机”-“设置”-“选项”。启用共享文件夹,并将提前在主机设置好的共享文件夹路径添加到虚拟机设置中,如REF_Ref166664710\h图6-3-42所示。图6-3-SEQ图_6-3-\*ARABIC19共享文件夹(2)在panzhi_dis文件夹中开启终端,利用命令将“99-myusb.rules”加入到指定路径中,如REF_Ref166664858\h图6-3-43所示。sudocp./99-myusb.rules/etc/udev/rules.d/图6-3-SEQ图_6-3-\*ARABIC20添加规则文件(3)在终端里分别进入“chassis-usbcan_ws”、“myrobot_ws”、“simulation-ctrl”文件夹中,执行下列命令分别编译三个ROS功能包,如REF_Ref166664881\h图6-3-44所示。catkin_make图6-3-SEQ图_6-3-\*ARABIC21编译功能包(4)新建终端,输入下列命令,启动底盘驱动,如REF_Ref166664891\h图6-3-45所示。sourcedevel/setup.bashroslaunchusbcan_rosusbcan_ros.launch图6-3-SEQ图_6-3-\*ARABIC22启动底盘驱动(5)新建终端,输入下列命令,利用turtle插件将底盘位置显示在rviz地图上,如REF_Ref166664902\h图6-3-46所示。cd..cdmyrobot_ws/sourcedevel/setup.bashroslaunchrbx1_bringupfake_turtlebot.launch图6-3-SEQ图_6-3-\*ARABIC23启用底盘节点(6)新建终端,输入下列命令加载地图,如REF_Ref166664911\h图6-3-47所示。sourcedevel/setup.bashroslaunchrbx1_navfake_amcl.launchmap:=test_map.yaml图6-3-SEQ图_6-3-\*ARABIC24加载地图(7)新建终端,输入下列命令,启动可视化工具,实现以三维向量的形式将底盘仿真显示在rviz可视化工具中,如REF_Ref166664919\h图6-3-48所示。rosrunrvizrviz-d./simulation.rviz图6-3-SEQ图_6-3-\*ARABIC25启动可视化工具3.线控底盘控制开发(1)输入下列命令,进入底盘控制ROS功能包,如REF_Ref166664929\h图6-3-49所示。cd..cdsimulationctrl图6-3-SEQ图_6-3-\*ARABIC26进入控制ROS功能包(2)输入下列命令,刷新控制ROS功能包,如REF_Ref166664937\h图6-3-50所示。sourcedevel/setup.bash图6-3-SEQ图_6-3-\*ARABIC27刷新功能包(3)输入下列命令,启动控制底盘ROS功能包,如REF_Ref166664949\h图6-3-51所示。cdsrc/ctrl_pkg/srcrosrunctrl_pkgctrl_pkg_node图6-3-SEQ图_6-3-\*ARABIC28启动控制ROS功能包(4)成功启动后,通过键盘“W”、“S”、“A”、“D”、“空格”可以对应控制线控底盘的前后左右和刹车,并仿真可视化体现在rviz中,如REF_Ref166664957\h图6-3-52,REF_Ref166664974\h图6-3-53所示。图6-3-SEQ图_6-3-\*ARABIC29键盘控制图6-3-SEQ图_6-3-\*ARABIC30Rviz可视化4.修改控制字符(1)打开底盘控制ROS功能包控制节点的源码文件,文件名为ctrl_pkg_node.cpp,具体路径如下:panzhi_dis/simulation-ctrl/src/ctrl_pkg/src,如REF_Ref167109827\h图6-3-31所示。图6-3-SEQ图_6-3-\*ARABIC31源码文件(2)打开文件后找到顶部ASCII码引用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论