- 商品参数
-
- 作者:
无著
- 出版社:化学工业出版社
- ISBN:9787122446138
- 版权提供:化学工业出版社
1.原版书作者知识功底扎实,在电子和机器人技术领域颇有影响力2.内容涉及基础硬件设备以及传感器、通信、定位、感知、规划、控制、多传感器融合等使用C++来开发机器人的整个流程的知识点,基础实用3.译者专业知识丰富,力求使书中内容通俗易懂、融会贯通
基本信息
商品名称: | C++树莓派机器人开发实战指南 | 开本: | 16开 |
作者: | (美)劳埃德·布朗巴赫 著 | 定价: | 198.00 |
ISBN号: | 9787122446138 | 出版时间: | 2024-04-01 |
出版社: | 化学工业出版社 | 印刷时间: | 2024-04-01 |
版次: | 1 | 印次: | 1 |
绪论 001第1章 选择并构建一个机器人计算机 0021.1 什么是树莓派? 0021.1.1 树莓派和微控制器有什么区别呢? 0031.1.2 树莓派是机器人控制器的选择吗? 0031.1.3 难道树莓派只是为学校、爱好者和玩具而设计的吗? 0031.2 树莓派型号的概念和应用以及为什么不是所有型号都能适合我们的需求 0041.2.1 为什么树莓派型号不能适合我们所有的目的? 0041.2.2 树莓派Zero型和树莓派Zero W型 0051.2.3 树莓派2B型 0061.2.4 树莓派3B型——的选择 0061.2.5 树莓派3B+型 0071.2.6 树莓派4代 0071.3 操作系统的选择 0071.3.1 Raspbian 0081.3.2 Ubuntu 0081.4 操作系统的安装和设置 0091.4.1 在笔记本电脑或台式电脑上安装完整的Ubuntu桌面操作系统 0101.4.2 在树莓派上安装Lubuntu系统 0101.5 编程环境(IDE)的安装和设置 0131.5.1 在笔记本电脑或台式电脑上安装VS Code 0131.5.2 在树莓派上安装Code::Blocks 0141.6 总结 0151.7 问题 015第2章 GPIO硬件接口引脚的概述及使用 0162.1 简介 0162.2 什么是GPIO引脚 0162.3 GPIO到底是做什么的呢? 0182.4 程序员的电子学 0182.5 输出数据的类型 0212.6 输入数据的类型 0222.7 一些常见的电子硬件 0242.7.1 面包板 0242.7.2 作为输出的GPIO引脚 0272.7.3 两种引脚编号系统 0282.7.4 作为输入的GPIO引脚 0282.8 使用C++程序访问树莓派的GPIO 0302.8.1 安装PIGPIO 0302.8.2 安装和设置PIGPIO库 0312.8.3 确保Code::Blocks可以链接到PIGPIO 0312.8.4 运行PIGPIO程序 0322.9 我们的第一个GPIO项目——hello_blink 0322.10 控制数字输出的数字输入——hello_button 0342.11 GPIO事件的回调函数 0362.12 结论 038第3章 机器人平台 0393.1 简介 0393.2 目标 0393.3 考虑机器人的尺寸大小和运行环境 0403.4 差速驱动与阿克曼(Ackerman)转向的对比 0413.4.1 差速驱动 0423.4.2 阿克曼(Ackerman)转向 0423.5 现成的机器人平台 0423.5.1 大型的预搭建机器人 0423.5.2 小型的预搭建机器人 0433.6 自制机器人的技巧 0443.6.1 搭建材料 0453.6.2 电池 0453.6.3 传动系统 0453.6.4 机器人零件来源 0463.7 改装扫地机器人或遥控车 0473.7.1 带有接口的扫地机器人 0473.7.2 与Roomba机器人对接 0483.7.3 唤醒你的Roomba机器人 0513.7.4 不带接口的扫地机器人 0513.7.5 改装遥控车和卡车 0523.8 总结 0533.9 问题 053第4章 机器人电机类型和电机控制 0544.1 简介 0544.2 目标 0544.3 电机的类型 0554.3.1 交流(AC)电机与直流(DC)电机 0554.3.2 有刷直流电机 0564.3.3 伺服电机 0564.3.4 步进电机 0574.3.5 无刷直流电机(又称为BLDC) 0584.4 晶体管和电机驱动器的介绍 0584.4.1 最基本的控制:开/关 0584.4.2 晶体管 0594.5 脉冲宽度调制(PWM) 0614.5.1 用PWM来创造模拟电压 0614.5.2 PWM作为控制信号 0624.6 电机驱动器和电机控制器 0634.6.1 电机驱动器 0634.6.2 用L298N双H桥电机驱动器控制电机 0654.7 电机控制器 0674.8 结论 0684.9 问题 0684.10 挑战 068第5章 与传感器和其他设备通信 0695.1 简介 0695.2 目标 0695.3 二进制(逻辑)信号 0695.3.1 开关去抖动 0705.3.2 轮式编码器 0715.3.3 来自模拟传感器的二进制信号 0715.3.4 二进制通信简介 0725.4 串行通信入门 0725.4.1 UART串行通信 0725.4.2 设置树莓派并测试UART串行通信 0735.4.3 修复打开串行端口时的错误 0765.5 I2C通信入门 0765.5.1 在树莓派上设置和使用I2C设备 0775.5.2 示例和测试程序:hello_i2c_lsm303 0785.6 结论 0815.7 问题 081第6章 其他有用的硬件 0826.1 简介 0826.2 目标 0826.3 电源 0836.3.1 5V电源 0836.3.2 可调电源 0836.4 继电器模块 0846.5 逻辑电平转换器 0846.6 FTDI芯片 0856.7 Arduino微控制器 0866.8 Digispark微控制器 0866.9 总结 0876.10 问题 087第7章 添加计算机来控制机器人 0887.1 简介 0887.2 结构 0887.3 目标 0897.4 步骤 0897.4.1 安装计算机并为其供电 0897.4.2 将计算机与机器人的其他组件相连 0907.5 结论 0917.6 问题 092第8章 机器人的控制策略 0938.1 简介 0938.2 结构 0938.3 目标 0938.4 机器人控制:全局与局部 0948.5 基本控制回路 0958.5.1 观察和比较 0958.5.2 响应 0958.5.3 影响 0968.6 开环控制器和闭环控制器 0978.6.1 设计一个大局观控制器(也称为主控制器) 0988.6.2 设计一个局部控制器(也称为进程控制器) 1008.7 结论 1048.8 问题 104第9章 协调各个部件 1059.1 简介 1059.2 结构 1059.3 目标 1069.4 什么是机器人操作系统? 1069.5 ROS与编写机器人控制软件 1069.6 ROS和商业机器人产业 1079.7 ROS的设置 1079.7.1 在你笔记本电脑或台式机上安装ROS Melodic 1089.7.2 在你的树莓派3B上安装ROS Kinetic 1089.8 ROS概述和速成课程 1109.9 一些有用的建议 1159.10 创建和编写ROS包和节点 1169.10.1 ROS文件系统 1169.10.2 创建ROS包 1169.10.3 编写ROS程序(节点) 1179.10.4 下载、审阅和运行章节下载程序 1239.11 使用roslaunch和.launch来简化工作 1249.12 结论 1249.13 问题 125第10章 用于机器人导航的地图构建 12610.1 简介 12610.2 目标 12710.3 角度、航向和距离等常规参数的规则 12710.4 接收传感器数据 12810.5 占用栅格地图(OGM) 12910.6 用传感器数据构建占用栅格地图(OGM) 13110.6.1 标记被占用的单元格 13410.6.2 标记空闲单元格 13610.6.3 完成建图 13610.6.4 将地图作为ROS消息发布 13610.7 ROS中的变换 13810.7.1 理解变换 13810.7.2 ROS中如何使用变换 13910.7.3 使用静态变换发布器发布变换 14010.7.4 用变换广播器从节点向外发布变换 14110.7.5 在节点中获得转换数据 14210.7.6 从命令行查看变换数据 14310.8 用Gmapping绘制地图 14310.8.1 Gmapping 14310.8.2 下载Gmapping 14410.8.3 运行Gmapping和启动文件中的参数 14410.8.4 创建地图的步骤 14510.9 用Rviz实现地图的可视化 14610.10 保存地图并在以后使用 14710.10.1 保存地图 14710.10.2 加载先前保存的地图 14810.11 总结 14810.12 问题 149第11章 机器人跟踪和定位 15011.1 简介 15011.2 目标 15011.3 机器人位姿 15111.3.1 将欧拉角转换为四元数 15211.3.2 将四元数转换为欧拉角 15311.4 里程计算和航迹推算 15311.4.1 轮速计 15411.4.2 计算每个轮子行驶的距离 15611.4.3 计算机器人移动的总距离 15711.4.4 计算航向角的变化 15711.4.5 将机器人中的朝向变化添加到原来的朝向上 15811.4.6 计算在x和y方向上移动的距离(也被叫作转换) 15811.4.7 将计算的距离添加到前一个姿态估计中 15811.4.8 航位推测 15911.5 在ROS中发布姿态数据 16011.6 里程计数据变换发布 16211.7 进一步跟踪和定位 16411.8 基准点 16411.9 激光特征跟踪和定位 16511.10 GPS和GNSS 16611.11 基于信标的定位系统 16611.12 总结 16711.13 问题 167第12章 自主运动 16812.1 简介 16812.2 目标 16812.3 ROS机器人运动综述 16812.4 电机控制器——simple_diff_drive.cpp 16912.4.1 simple_diff_drive电机控制器的代码步骤 17012.4.2 差动驱动电机控制器代码概述 17012.4.3 差动电机控制器代码 17112.5 驱动器控制器:simple_drive_controller.cpp 17612.6 结论 18012.7 问题 180第13章 自主路径规划 18113.1 简介 18113.2 目标 18113.3 路径规划方法与挑战 18113.3.1 挑战 18213.3.2 路径规划方法 18213.4 障碍物膨胀 18313.4.1 代价地图 18313.4.2 costmap_2d包 18413.5 A*路径规划 18613.5.1 A*是如何工作的 18713.5.2 A*算法的步骤 18913.5.3 完成A*程序 19013.6 将A*程序写成ROS节点 19413.6.1 标准内容、辅助函数和main() 19513.6.2 A*节点的核心:find_path() 20313.7 结论 20713.8 问题 208第14章 里程计的轮式编码器 20914.1 简介 20914.2 目标 20914.3 轮式编码器 20914.4 光电编码器 21014.5 霍尔效应编码器 21014.6 编码器的接线 21114.7 编码器tick信号发布——tick_publisher.cpp 21214.8 结论 21614.9 问题 216第15章 超声波测距仪 21715.1 简介 21715.2 目标 21715.3 HC-SR04超声波测距传感器基础知识 21815.4 HC-SR04的接线 21815.5 超声波范围数据发布器——ultrasonic_publisher. cpp 21915.5.1 超声波范围数据发布者步骤 21915.5.2 超声波范围数据发布者代码 22015.6 用于物体探测的超声波范围数据 22215.7 结论 22315.8 问题 223第16章 惯性测量单元——加速度计,陀螺仪和磁力计 22416.1 简介 22416.2 目标 22516.3 加速度计 22516.3.1 加速度计的缺点 22616.3.2 在ROS中发布IMU数据 22616.3.3 ROS中sensor_msgs::Imu数据类型 22616.3.4 IMU消息发布者代码 22816.4 陀螺仪 23016.4.1 陀螺仪的缺点 23116.4.2 向IMU节点添加陀螺仪数据 23116.5 磁力计 23216.5.1 磁力计的缺点 23216.5.2 向IMU节点添加磁力计数据 23216.6 安装IMU 23416.7 总结 23416.8 问题 234第17章 GPS和外部信标系统 23517.1 简介 23517.2 目标 23517.3 信标系统是如何工作的 23617.4 GPS和GNSS基础知识 23717.5 2cm精度级的GPS/GNSS-RTK 23817.6 GPS/GNSS的局限性 23917.7 GPS/GNSS数据格式 24017.7.1 NMEA 数据字符串 24017.7.2 一些关键的纬度/经度数据表示法 24117.8 在ROS中发布GPS/GNSS数据 24217.8.1 ROS软件包:nmea_navsat_driver 24217.8.2 安装 nmea_navsat_driver包 24317.8.3 阅读ROS软件包说明 24317.8.4 运行带参数的nmea_serial_driver节点 24417.9 总结 24517.10 问题 245第18章 激光雷达设备和数据 24618.1 简介 24618.2 目标 24618.3 激光雷达基础知识 24718.4 激光雷达的局限性 24718.5 激光雷达的种类 24818.5.1 单向(单点)激光雷达 24818.5.2 2D激光雷达 24818.5.3 3D激光雷达 24918.5.4 从机器人吸尘器中获得激光雷达 24918.6 选择激光雷达考虑的因素 25018.7 激光雷达数据消息格式sensor_msgs:: LaserScan 25118.8 激光雷达安装注意事项 25318.9 配置、运行和测试一个普通的激光雷达装置 25418.10 LaserScan信息的可视化 25518.11 总结 25818.12 问题 258第19章 相机的实时视觉 25919.1 简介 25919.2 目标 25919.3 图像是什么 26019.3.1 图像属性 26019.3.2 像素坐标系 26119.3.3 检查并安装所需软件 26119.3.4 ROS Kinetic 26219.3.5 ROS Melodic 26219.3.6 在ROS中测试OpenCV 26319.4 图像处理软件(OpenCV)和ROS 26419.4.1 步骤1:在ROS上发布图片 26419.4.2 安装usb_cam_node 26519.4.3 运行usb_cam_node 26519.4.4 测试相机输出 26619.4.5 步骤2:在其他节点订阅图片 26719.4.6 创建你的ROS视觉包 26719.4.7 编写图像消息订阅者 26819.4.8 步骤3:使用cv-bridge将ROS使用的RGB图像转化成OpenCV可处理的BGR图像 26919.4.9 步骤4:对图像实施希望的操作 26919.4.10 步骤5:发布任何非图像数据作为自身的ROS信息 27019.4.11 步骤6:将处理后的图像转化回RGB格式 27019.4.12 步骤7:在所属话题下发布结果图像 27019.4.13 更多图片处理基础 27119.4.14 核算子、孔径与块 27119.5 使用图片副本而不是原图像的重要性 27219.5.1 关于光照的问题 27219.5.2 重新审视步骤4——更多可能的OpenCV操作 27219.5.3 图片色彩格式转换函数:cvtColor() 27319.5.4 图片滤波函数:blur(),medianBlur(),GaussianBlur() 27319.5.5 图片边缘检测函数:Canny() 27419.6 将图像上的边缘变为数字线条:HoughLinesP() 27519.7 图片颜色空间转换函数:cvtColor()与inRange() 28019.8 各式各样有用的ROS工具 28319.9 高级OpenCV与进阶 28319.10 基于云的图像识别 28419.11 结论 28419.12 问题 284第20章 传感器融合 28520.1 简介 28520.2 目标 28520.3 如何让传感器融合变得简单 28620.4 博世BN0055方向传感器 28620.5 改进后的测距仪 28720.6 集成BN0055——硬件和ROS发布者 28820.7 整合BN0055——测距节点 28920.7.1 第1步:订阅IMU信息 28920.7.2 第2步:确认方向没有被标记为不使用 28920.7.3 第3步:将四元数转换成欧拉角 29020.7.4 第4步:如果是第一个IMU 信息,则保存偏移信息 29020.7.5 第5.1步:如果不是第一条IMU信息,则保存 IMU航向 29120.7.6 第5.2步:将新的航向应用于里程计中 29120.8 第二代传感器融合——一种更全面的方法 29220.9 协方差矩阵 29320.10 ROS信息中的协方差矩阵 29520.11 robot_pose_ekf节点 29620.11.1 安装robot_pose_ekf 29620.11.2 运行robot_pose_ekf 29620.12 关于变换和roslaunch的最后说明 29820.13 结论 29820.14 问题 298第21章 构建并完成一个自主的机器人的编程 29921.1 简介 29921.2 目标 30021.3 第1部分——构建物理机器人平台 30021.3.1 机器人平台——总体概览和零件清单 30121.3.2 车轮/电机模块 30221.3.3 电机驱动器 30321.3.4 轮毂 30321.3.5 电池和充电器 30321.3.6 底盘/底座 30421.3.7 计算机 30521.3.8 激光雷达或其他测距传感器 30521.3.9 轮式编码器 30621.3.10 IMU 30621.3.11 计算机的电压转换器 30621.3.12 GPIO集线器分线板 30721.3.13 相机 30721.3.14 电压表 30721.3.15 其他材料 30821.3.16 安装机器人平台 30821.3.17 安装轮毂模块和脚轮 31021.3.18 安装电机驱动器、端子排和计算机电源 31121.3.19 准备好GPIO分线板 31121.3.20 安装计算机、GPIO分线板和IMU 31221.3.21 完成布线并安装电池 31221.3.22 安装激光雷达和摄像头 31221.4 第1部分——结论 31321.5 第2部分——为机器人编程 31421.5.1 程序设计——总览 31421.5.2 为你的机器人编程——详细步骤 31521.5.3 运行你的自主机器人! 32421.5.4 一些故障排除提示 32421.6 下一步需要是什么? 32521.6.1 动态避障 32521.6.2 PID控制器 32621.6.3 一个主控制器,管理各种程序或任务 32621.6.4 实现从地图到地图的转换(完全定位) 32621.6.5 请关注facebook.com/practicalrobotics和 youtube.com/practicalrobotics 32621.7 结论 327
......
本书深入浅出地介绍了构建移动机器人平台所需的综合知识,涵盖了硬件和软件诸多方面。本书以清晰的学习路径和全面的底层逻辑为基石,帮助读者轻松地构建和编程机器人,避免了深入每个科目复杂部分的困难。书中聚焦于树莓派与硬件交互的编程,全面覆盖了从选用机器人控制器的微计算机(即树莓派)到为车轮驱动电机供电等系统性知识。读者可了解并掌握如何利用传感器检测障碍物、训练机器人建立地图并规划避障路径,以及实现代码的模块化和与其他机器人项目进行代码互换。此外,本书还详细阐述了如何运用树莓派的GPIO硬件接口端子和现有库,把树莓派转变成一个经济实用且性能卓越的机器人。本书适合从事自动化、智能机器人、智能硬件、IOT领域的工程师以及树莓派爱好者阅读参考,无论是零基础的初学者,还是具备计算机科学、电气工程或机械工程背景的工程师或者高校师生,都能从本书中获益。你不仅能学习到驱动电机控制器的编程,还能了解从激光雷达数据构建地图、编写和实施自主路径规划算法、独立编写代码向电机驱动控制器发送路径点,以及更深入地学习机器人建图和导航的相关知识。
......
......
1