ROS进阶实例 本书特色
本书是《ROS入门实例》的进阶篇,介绍一批ROS程序包以及一些在真实机器人上编程所必需的工具:使用SMAC和Behavior Trees这样的可执行任务管理工具,为不同的机器人创造定制的URDF模型,用ROS诊断来监控机器人的健康状况,多控制输入以及为这些控制输入设定优先级,控制多关节机械臂实现移动到指定点和抓取的动作,通过网络浏览器监控和控制机器人,以及在Garebo中运行真实机器人的模拟版。
ROS进阶实例 内容简介
ROS高级用户,大学研究生、教师,工业界相关领域人士
ROS进阶实例 目录
前言
关于本书的纸质版和电子版的说明
从HYDRO到现版本的演变
1. 这一卷书的范围 2. 安装ROS-BY-EXAMPLE代码 3. 使用ROS执行任务3.1 一个虚拟电池模拟器 3.2 运行案例所需的一套常规设定 3.3 ROS动作的简短回顾 3.4 一个巡逻机器人的案例 3.5 使用标准脚本实现的巡逻机器人 3.6 脚本方法存在的问题 3.7 SMACH还是行为树? 3.8 SMACH:将任务作为状态机 3.8.1 SMACH回顾 3.8.2 使用SMACH巡逻一个正方形区域 3.8.3 在ArbotiX模拟器中测试SMACH导航 3.8.4 从SimpleActionState中获取结果 3.8.5 SMACH迭代器 3.8.6 在每个转移上执行命令 3.8.7 与ROS主题和服务进行交互 3.8.8 回调函数与自省 3.8.9 并发任务:将电池检查加入巡逻程序中 3.8.10 对进行电池检查的巡逻机器人的注解 3.8.11 在状态与状态机之间传递用户数据3.8.12 子任务与分层状态机 3.8.13 为房屋清洁机器人添加电池检查 3.8.14 状态机的缺点 3.9 行为树 3.9.1 行为树与分层状态机的对比 3.9.2 行为树的关键属性 3.9.3 建立一棵行为树 3.9.4 选择器与序列器 593.9.5 使用修饰器(元行为)对行为进行自定义 3.10 为ROS 和行为树编程3.10.1 安装pi_trees 程序库 3.10.2 pi_trees 程序库基本部件3.10.3 ROS-专用行为树类 3.10.4 一个使用行为树的Patrol Bot例子 3.10.5 一个使用行为树的居家清洁机器人 3.10.6 并行任务 3.10.7 添加和移除任务 4. 为你的机器人创建一个URDF模型 4.1 从底座和轮子开始 4.1.1 robot_state_publisher和joint_state_publisher节点 4.1.2 底座的URDF/Xacro文件4.1.3 替代/base_footprint坐标系的方法 4.1.4 把底座加到机器人模型中 4.1.5 查看机器人的变换树(tf树) 4.1.6 使用网格模型创建底座 4.2 简化你的网格模型 4.3 添加一个躯干 4.3.1 为躯干建模 4.3.2 把躯干附着到底座上 4.3.3 使用网格模型为躯干建模 4.3.4 把网格躯干附着到网格底座上 4.4 测量、计算和调整 4.5 添加一个相机 4.5.1 相机的位置 4.5.2 为相机建模 4.5.3 在躯干和底座上添加相机 4.5.4 查看有躯干和相机情况下的变换树 4.5.5 使用网格模型为相机建模 4.5.6 使用Asus Xtion Pro替换Kinect 4.6 添加一个激光扫描仪(或其他传感器) 4.6.1 为激光扫描仪建模 4.6.2 添加一个激光扫描仪(或其他传感器)到一个网格底座 4.6.3 配置激光节点的启动文件 4.7 添加一个可摇移和倾斜的头部 4.7.1 用Asus Xtion Pro取代Kinect 4.7.2 对摇移和倾斜头建模 4.7.3 理解旋转轴 4.7.4 使用网格模型的Pi机器人云台头 4.7.5 在Pi机器人上使用Asus Xtion Pro网格取代Kinect 4.8 添加一条或两条机械臂 4.8.1 机械臂的放置 4.8.2 机械臂的建模 4.8.3 为计划增加一个夹持器坐标系 4.8.4 增加第二个机械臂 4.8.5 使用机械臂电机和支架的网格 4.9 为Box机器人增加一个可伸缩躯干 4.10 为Pi机器人增加一个可伸缩躯干 4.11 一个桌面的单臂Pi机器人4.12 用ArbotiX仿真器来测试你的模型 4.12.1 虚拟Box机器人 4.12.2 一个虚拟的Pi机器人 4.13 创建你自己机器人的描述程序包 4.13.1 从rbx2_description程序包中复制文件 4.13.2 创建一个测试启动文件5. 控制伺服电机: 再一次5.1 安装ArbotiX程序包 5.2 启动ArbotiX节点5.3 ArbotiX配置文件 5.4 在模拟模式中测试ArbotiX关节控制器 5.5 在真实伺服电机中测试ArbotiX关节控制器 5.6 松弛所有的伺服电机 5.7 启用或禁用所有的伺服电机6. 机器诊断 6.1 DiagnosticStatus 信息 6.2 分析器配置文件 6.3 监控Dynamixel伺服电机温度 6.3.1 为云台监控伺服电机 6.3.2 查看在/diagnostics主题上的信息 6.3.3 通过监控/diagnostics主题来保护伺服电机 6.4 监控笔记本的电池6.5 创造属于你自己的诊断信息 6.6 监控其他硬件状态 7. 动态重置 7.1 添加动态参数到你的节点 7.1.1 创建.cfg文件 7.1.2 让.cfg文件可执行 7.1.3 配置CMakeLists.txt文件 7.1.4 构建程序包 7.2 将动态重置容量加入到电池仿真器节点中7.3 添加动态重配置客户端支持到ROS节点 7.4 从命令行动态重配置 8. 多话题 with mux & yocs 8.1 为mux话题设置启动文件 8.2 用虚拟TurtleBot机器人测试mux 8.3 使用mux服务切换输入 8.4 优先处理mux输入的ROS节点8.5 Yujin机器人的YOCS控制器 8.5.1 添加输入源9. 3D世界中的头部追踪 9.1 追踪虚构的3D目标 9.2 在机器人上追踪一个点 9.3 3D头部追踪节点 9.3.1 真实的以及虚拟的头部追踪 9.3.2 将目标映射到摄像头平面 9.4 用真实的伺服电机做头部追踪 9.4.1 真实伺服电机以及虚拟目标 9.4.2 真实的伺服电机,真实的目标 9.4.3 节点和启动文件10. 检测与跟踪 AR 标签 10.1 安装与测试ar_track_alvar 包 10.1.1 创建你自己的AR标签 10.1.2 生成并打印AR标签10.1.3 启动摄像头驱动和ar_track_alvar节点10.1.4 测试标记检测10.1.5 理解/ar_pose_marker主题10.1.6 观察在RViz中的标记 10.2 访问你的程序中的 AR 标签姿态 10.2.1 ar_tags_cog.py脚本 10.2.2 用平移和倾斜头跟踪标签 10.3 使用标记束跟踪多个标签 10.4 跟随一个带有移动机器人的标签 10.4.1 在TurtleBot上运行AR跟随者脚本 10.5 练习:使用AR标签定位 11. 用MoveIt!做机械臂导航 11.1 我需要一台有机械臂的实体机器人吗? 11.2 自由度 11.3 关节类型 11.4 关节轨迹和关节轨迹动作控制器 11.5 正向和逆向机械臂运动学11.6 逆运动学的数值解法和分析解法 11.7 MoveIt!的架构 11.8 安装MoveIt! 11.9 为你的机器人创建静态URDF模型 11.10 运行MoveIt!设置助手 11.10.1 加载机器人的URDF模型 11.10.2 生成碰撞矩阵 11.10.3 添加base_odom虚拟关节 11.10.4 添加右臂规划组 11.10.5 添加右夹持器规划组 11.10.6 定义机器人位姿 11.10.7 定义末端执行器 11.10.8 定义被动关节 11.10.9 生成配置文件 11.11 用MoveIt!设置助手创建的配置文件 11.11.1 SRDF文件(.srdf) 11.11.2 fake_controllers.yaml文件 11.11.3 joint_limits.yaml文件 11.11.4 kinematics.yaml文件 11.12 move_group节点和启动文件 11.13 在演示模式下测试MoveIt! 11.13.1 探索Motion Planning插件的额外功能 11.13.2 重新运行设置助手 11.14 用命令行测试MoveIt! 11.15 确定关节配置和末端执行器位姿 11.16 使用ArbotiX关节轨迹动作控制器 11.16.1 在仿真环境里测试ArbotiX关节轨迹动作控制器 11.16.2 用真实的电机测试ArbotiX关节轨迹控制器 11.17 配置MoveIt!关节控制器 11.17.1 创建contorllers.yaml文件 11.17.2 创建控制器管理器启动文件 11.18 MoveIt!的API 11.19 正向运动学:在关节空间进行规划 11.20 逆向运动学: 在笛卡尔空间内的规划 11.21 把手指向或伸向一个视觉目标 11.22 为规划的轨迹设置限制 11.22.1 执行笛卡尔路径 11.22.2 设置其他路径限制 11.23 调整轨迹速度 11.24 为规划添加障碍 11.25 把物体与工具附在机器人上 11.26 拾取和放置 11.27 添加一个传感器控制器 11.28 在一个真实机械臂上运行MoveIt! 11.28.1 创建自己的启动文件和脚本 11.28.2 运行机器人的启动文件 11.28.3 真实机械臂上的正运动学 11.28.4 真实机械臂上的逆运动学 11.28.5 真实机械臂上的笛卡尔路径 11.28.6 真实机械臂上的拾取-放置 11.28.7 指向或伸向一个视觉目标 12. Gazebo:模拟世界与机器人 12.1 安装Gazebo 12.2 硬件图形加速 12.3 安装 ROS Gazebo包 12.4 安装 Kobuki ROS包 12.5 安装 Fetch Robot ROS包 12.6 使用Gazebo GUI 12.7 在Gazebo里测试Kobuki机器人 12.7.1 访问模拟传感器数据 12.7.2 为Kobuki添加安全控制 12.7.3 运行来自**卷书的nav_square.py脚本 12.8 加载其他世界和对象 12.9 在Gazebo测试Fetch机器人 12.9.1 Fetch的关节轨迹 12.9.2 Fetch和MoveIt! 12.9.3 Fetch的取和放 12.10 使用simple_grasping感知管道的现实取和放 12.10.1 深度摄像头的局限性 12.10.2 运行演示 12.10.3 理解real_pick_and_place.py脚本 12.11 运行Gazebo Headless RViz 13. ROSBRIDGE:为你的机器人构建WEB图形用户界面 13.1 安装rosbridge程序包 13.2 安装web_video_server程序包 13.3 安装一个简单的Web服务器(mini-httpd) 13.4 启动mini-httpd、rosbridge和web_video_server 13.5 一个简单的rosbridge HTML/Javascript图形用户界面 13.6 在模拟TurtleBot中测试图形用户界面 13.7 在真实的机器人中测试图形用户界面 13.8 在网络中的另外一台设备上查看Web图形用户界面 13.9 使用浏览器调试控制台 13.10 理解简单的图形用户界面 13.10.1 HTML布局:simple_gui.html 13.10.2 JavaScript代码:simple_gui.js 13.11 一个使用jQuery、jqWidgets和KineticJS的更高级的图形用户界面 40513.12 Rosbridge总结 附录:ROS的附件及使用USB设备:创建 udev Rules 13.13 将你的账户加入dialout组 13.14 删除设备的序列号 13.15 UDEV 规则 13.16 测试一条UDEV规则 13.17 在ROS配置文件中使用设备名
ROS进阶实例 作者简介
R.帕特里克·戈贝尔(R. Patrick Goebel)于1991年获得认知心理学博士学位,现担任美国斯坦佛大学网络工程师职务,对机器人的设计构建与编程要深入的研究,并撰写了多部有关ROS(机器人操作系统)的畅销书。
Juan Rojas,墨西哥籍,广东工业大学机电工程学院副教授,从事机器人领域研究超过14年;在范德堡大学(位于美国田纳西州纳什维尔)获学士、硕士及博士学位;2011-2012年在日本产业技术综合研究所(AIST)从事博士后工作,2012-2015年在中山大学任助理教授。