本书以智能网联汽车ROS基础知识为核心内容,介绍智能网联汽车开发平台ROS的基本概念和使用方法,包括节点、ROS通信机制、坐标转换等内容。通过学习Linux操作指令、ROS指令、ROS通信管理机制、可视化工具和智能网联汽车组成架构等知识,完成智能网联汽车虚拟化模型的搭建。
本书适合高职院校智能交通技术专业、汽车工程、无人驾驶等相关专业用作教材,也可作为智能网联、无人驾驶相关的企业人才培训、技能认证等的培训用书。
前言
随着全球汽车保有量的快速增长,能源短缺、环境污染、交通拥堵、事故频发等社会问题日益突出,现已成为汽车行业可持续发展的制约因素。智能网联汽车被公认为是这些问题的有效解决方案,代表着未来汽车行业的发展方向,也是我国目前汽车工业转型的重要方向之一。
关于本书
智能网联汽车是智能汽车和车联网结合的产物,对智能网联汽车行业来说,自动驾驶必将成为终极目标。随着自动驾驶技术的成熟,自动驾驶必将全面取代人工驾驶,到那时大量的相关产业就需要懂得自动驾驶技术的人才。
本书以实操的方式全面地介绍了自动驾驶汽车编程知识,而且配套了完备的教学资源,可帮助学生快速掌握自动驾驶车辆的基础原理以及结构组成,也可满足自动驾驶、智能网联汽车等相关课程的教学需求。通过对此类相关课程的学习,学生毕业后可从事与自动驾驶相关产业的售后甚至研发工作,为自动驾驶产业爆发式增长积蓄人才。
本书按照循序渐进、由浅入深的方式,介绍了ROS(机器人操作系统)的概念、ROS工程的搭建和配置、编写一个ROS节点,以及ROS通信机制等知识,相信它会是一本非常实用的实践教学用书。本书要求读者具备一定的C 语言以及Linux基础,没有安装ROS的小伙伴可以参照ROS官网上的安装步骤自行安装,本教程使用的环境为Ubuntu16.04 ROSkinetic。ROS安装参考链接:http://wiki.ros.org/cn/kinetic/Installation/Ubuntu。
本书的可操作性较强,既可参照书中的内容编程和学习,也可快速更好地掌握智能网联汽车知识,快速查到自己所关心的问题的相关解决办法。
关于作者
曾子铭毕业于英国威尔士大学,博士后,深圳市高层次人才,深圳市创业导师,现为深圳职业技术学院汽车与交通学院教师,研究方向为无人驾驶、人工智能和计算机视觉。曾主持或参与国家及省市级课题12项,作为作者发表SCI、EI检索论文20篇,获发明专利3项、实用新型专利6项。
深圳市元创兴科技有限公司创立于2006年,是一家从事智能控制、机器人及人工智能教育方案的国家高新技术企业,致力于智能控制、机器人和人工智能等相关技术的研发,为企业和高校提供设备定制、实验室建设等全方位服务。
致谢
本书在编写过程中,引入企业实战资源和图片,在此特向其作者和图片制作者表示诚挚的谢意。
由于时间仓促,书中不足之处在所难免,恳盼读者给予指正。希望本书的出版能对普及智能网联汽车知识,发展智能网联汽车起到积极的引导和促进作用。
作者
2021年5月
第1章智能网联汽车ROS认知1
1.1什么是ROS3
1.2ROS在智能网联汽车开发中的角色3
1.3ROS的总体目标和特点4
1.3.1ROS设计的总体目标4
1.3.2ROS的特点5
课后练习8
第2章认识ROS工程9
2.1ROS环境搭建与配置9
2.1.1将Linux系统安装到移动U盘9
2.1.2在Linux系统中安装ROS18
2.2ROS工程的基本概念20
2.3Catkin工作空间21
2.3.1新建一个工作空间21
2.3.2编译工作空间21
2.3.3工作空间的结构23
2.4Package功能包24
2.4.1Package的结构24
2.4.2CMakeLists.txt文件25
2.4.3package.xml文件26
2.4.4创建Package功能包26
2.4.5Package相关命令27
课后练习28
第3章编写一个ROS节点30
3.1节点及节点管理器30
3.2roscpp30
3.3节点编写过程32
3.3.1初始化节点32
3.3.2关闭节点32
3.3.3NodeHandle常用成员函数32
3.3.4节点编写33
3.3.5CMakeLists.txt文件的修改34
3.3.6运行生成的节点35
3.3.7rosnode命令36
3.4头文件引用37
3.4.1引用当前包头文件37
3.4.2引用同一工作空间内其他软件包的头文件39
3.5第三方库文件引用41
3.6launch文件编写44
3.6.1﹤launch﹥标签45
3.6.2﹤node﹥标签45
3.6.3﹤include﹥标签48
3.6.4﹤param﹥标签51
3.6.5﹤arg﹥标签53
3.6.6﹤group﹥标签53
课后练习56
第4章ROS通信机制话题57
4.1话题通信原理57
4.2话题通信示例58
4.3rqt_graph和rqt_plot命令的使用61
4.4rostopic命令的使用62
4.5代码解析64
4.5.1third_pkg.cpp源码分析64
4.5.2subscrbe.cpp源码分析65
4.6理解自定义消息类型66
4.6.1什么是消息66
4.6.2rosmsg命令66
4.7创建自定义消息类型67
课后练习70
第5章ROS通信机制服务72
5.1认识服务基本概念72
5.2编写ROS服务示例73
课后练习76
第6章参数服务器78
6.1roscpp中的rosparam78
6.1.1getParam()78
6.1.2Param()78
6.1.3setParam()79
6.1.4deleteParam()79
6.1.5hasParam()79
6.2通过launch加载参数79
6.3rosparam命令82
6.4动态参数调节83
课后练习88
第7章ROS通信机制动作89
7.1动作简介89
7.2动作文件规范90
7.3编写一个动作示例91
课后练习96
第8章什么是tf98
8.1tf介绍98
8.2tf示例98
8.2.1示例运行98
8.2.2tf命令工具99
8.2.3tf中的消息101
8.3tf的C 接口102
8.3.1数据类型102
8.3.2数据转换103
8.3.3tf类107
课后练习109
第9章ROS车型机器人建模110
9.1机器人组成架构110
9.1.1常见执行机构111
9.1.2驱动系统实现112
9.1.3传感器系统112
9.1.4控制系统实现114
9.2URDF描述语言解释114
9.3创建URDF模型117
9.3.1创建机器人描述功能包117
9.3.2创建URDF模型118
9.3.3URDF解析121
9.3.4在rviz中显示机器人模型122
9.4改进URDF模型125
9.4.1使用xacro优化URDF模型125
9.4.2引用xacro文件129
9.4.3显示优化后的模型129
9.5添加传感器131
9.5.1添加摄像头131
9.5.2添加激光雷达132
9.6gazebo仿真134
9.6.1给base_link添加惯性、碰撞及gazebo属性134
9.6.2在gazebo中显示机器人模型138
9.6.3gazebo常用插件139
9.7sw2urdf工具156
课后练习157
第10章常见运动学解算159
10.1两轮差动模型159
10.2三轮全向运动模型161
10.3四轮全驱滑动运动模型163
10.4四轮全向运动模型165
课后练习169
参考文献171