# 1.5 安装ROS-Academy-for-Beginners教学包
在1.4节我们已经用apt工具安装好了ROS,apt安装的软件包都是二进制形式,可以在系统中直接运行,它们是ROS官方提供给用户的应用程序。然而很多时候我们需要自己做一些定制改写,或者运行第三方开发的软件包,这个时候就需要下载源代码进行编译。
本节我们下载本书配套的ROS-Academy-for-Beginners软件包,给读者演示源码包下载-编译-运行的完整流程。后续章节的主要代码都基于这个软件包,请读者按照流程下载编译。
## 下载源码包
在Ubuntu系统上,确保git已经安装
```bash
$ sudo apt-get install git
```
然后在创建一个名为tutorial_ws的工作空间,在它的的src路径下克隆ROS-Academy-for-Beginners软件包
```bash
$ cd
$ mkdir -p tutorial_ws/src #创建catkin工作空间
$ cd tutorial_ws/src #进入src路径,克隆教学软件包
$ git clone https://github.com/DroidAITech/ROS-Academy-for-Beginners.git
```
## 安装依赖
并且安装ROS-Academy-for-Beginners所需要的依赖
```bash
$ cd ~/tutorial_ws
$ rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
```
**注意**:以上命令非常重要,缺少依赖将导致软件包无法正常编译和运行。
在开始编译之前,需要确保Gazebo在7.0版本以上
```bash
$ gazebo -v #确认7.0及以上
```
如果你的Gazebo版本低于7.0,则需要进行升级
```bash
$ sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
$ wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install gazebo7
```
## 编译
接着回到catkin_ws下编译
```bash
$ cd ~/tutorial_ws
$ catkin_make
$ source ~/tutorial_ws/devel/setup.bash #刷新环境 方法一
$ rospack profile #刷新环境 方法二
```
**注意**:source命令,编译完成后必须刷新一下工作空间的环境,否则可能找不到工作空间。许多时候我们为了打开终端就能够运行工作空间中编译好的ROS程序,我们习惯把`source ~/tutorial_ws/devel/setup.bash`命令追加到`~/.bashrc`文件中(rosacademy_ws替换为你的工作空间名称),这样每次打开终端,系统就会刷新工作空间环境。你可以通过`echo "source ~/tutorial_ws/devel/setup.bash" >> ~/.bashrc`命令来追加。
## 运行仿真程序
编译完成后就可以运行本教学配套的仿真了,输入
```bash
$ rospack profile
$ roslaunch robot_sim_demo robot_spawn.launch
```
你会看到仿真画面启动,仿真界面中包括了软件博物馆和Xbot机器人模型。
![](https://img.kancloud.cn/7d/e2/7de2c6d1999cd91faf194940f9b46b1d_1855x1056.png)
再打开一个新的终端,输入以下命令,用键盘控制机器人移动
```bash
$ rosrun robot_sim_demo robot_keyboard_teleop.py
```
聚焦控制程序窗口,按下i、j、l等按键,这样你就可以通过键盘来控制机器人的移动了。
当你完成了这一步,首先恭喜你,你已经完成了ROS最常见的源码下载-安装依赖-编译-运行的流程,在ROS社区有许许多多这样的软件包,基本都按照这样的流程来运行。相信你一定可以举一反三。
![](https://img.kancloud.cn/d6/d5/d6d50880018aad5285402b87c18b0dcd_854x511.jpg)
键盘控制仿真机器人移动这个demo展现了ROS分布式消息收发的特性。我们打开的虽然是键盘控制程序,但它可以替换为手柄控制、手机平板控制、甚至是路径规划自动控制。模拟器里的机器人并不关心是谁发给它的消息,它只关心这个消息是什么(速度、角速度等指令)。所以,每一个进程(节点)都各司其职,负责不同的任务,同时定义好消息收发的接口。如果我们现在要做路径规划任务,那么我们只用单独再开发一个节点,同样向底盘发送我们解算出的速度/角速度指令就可以了。
你现在可能对ROS工作方式还一无所知,不过不要紧。后续我们会对ROS涉及的这些概念进行详细介绍,等你看完了这本书,你就能明白整个ROS框架运行的原理,甚至自己能编程实现一些功能模块了。
- 前言
- 第一章 ROS简介
- 机器人时代的到来
- ROS发展历程
- 什么是ROS
- 安装ROS
- 安装ROS-Academy-for-Beginners教学包
- 二进制与源码包
- 安装RoboWare Studio
- 单元测试一
- 第二章 ROS文件系统
- Catkin编译系统
- Catkin工作空间
- Package软件包
- CMakeLists.txt
- package.xml
- Metapacakge软件元包
- 其他常见文件类型
- 单元测试二
- 第三章 ROS通信架构(一)
- Node & Master
- Launch文件
- Topic
- Msg
- 常见msg类型
- 单元测试三
- 第四章 ROS通信架构(二)
- Service
- Srv
- Parameter server
- Action
- 常见srv类型
- 常见action类型
- 单元测试四
- 第五章 常用工具
- Gazebo
- RViz
- Rqt
- Rosbag
- Rosbridge
- moveit!
- 单元测试五
- 第六章 roscpp
- Client Library与roscpp
- 节点初始、关闭与NodeHandle
- Topic in roscpp
- Service in roscpp
- Param in roscpp
- 时钟
- 日志与异常
- 第七章 rospy
- Rospy与主要接口
- Topic in rospy
- Service in rospy
- Param与Time
- 第八章 TF与URDF
- 认识TF
- TF消息
- tf in c++
- tf in python
- 统一机器人描述格式
- 附录:TF数学基础
- 三维空间刚体运动---旋转矩阵
- 三维空间刚体运动---欧拉角
- 三维空间刚体运动---四元数
- 第九章 SLAM
- 地图
- Gmapping
- Karto
- Hector
- 第十章 Navigation
- Navigation Stack
- move_base
- costmap
- Map_server & Amcl
- 附录:Navigation工具包说明
- amcl
- local_base_planner
- carrot_planner
- clear_costmap_recovery
- costmap_2d
- dwa_local_planner
- fake_localization
- global_planner
- map_server
- move_base_msg
- move_base
- move_slow_and_clear
- navfn
- nav_core
- robot_pose_ekf
- rotate_recovery