1. ROS发展现状
- ROS十周年: ROS Turns 10! - ROS robotics news
- ROS元老机器人——PR2
- NASA空间站机器人
- ROS应用
- 无人驾驶
- roboearth
- 利用手机相机和处理器
- ROS2
- ROS已经机器人领域的事实标准 robots.ros.org
- ROS社区内功能包数量关注度,相关文章指数上涨
2. 课程介绍
课程参考资料
- 遇事不决问google:Google
- ROS wiki :http://wiki.ros.org
- ROS answer:https://answers.ros.org
- 古月居:http:lwww.guyuehome.com
- Exbot实验室:https://www.exbot.net/
3. ROS历史起源
4. ROS总体设计
[!tip] 提高机器人研发中软件复用率
[!check] 五个特点
- 点对点的设计
- 多语言支持
- 架构精简、集成度高
- 组件化工具包丰富
- 免费并且开源
- 点对点的设计
- 节点单元
- 分布式网络
- RPC+TCP/UDP通信
- 适合多机协同
- 节点单元
- 多语言支持
- 支持python、c++、Java
- 语言无关的接口定义
- 架构精简、集成度高
- 每个功能节点单独编译
- 接口统一
- 多个开源项目
- 组件化工具包丰富
- 3D可视化工具——rviz
- 物理仿真环境——gazebo
- 数据记录工具——rosbag
- Qt工具箱——rqt_*
- 免费并且开源
[!cite] 四位一体
ROS = 通讯机制 + 开发工具 + 应用功能 + 生态系统
[!summary] ROS总体设计
5. ROS系统实现
- 三个层次
- 计算图
- 文件系统
- 开源社区
5.1 计算图
- 节点(Node)–软件模块
- 节点管理器(ROS Master)一一控制中心,提供参数管理
- 话题(Topic)一一异步通信机制,传输消息(Message)
- 服务(Service)一一同步通信机制,传输请求/应答数据
1)话题通信机制
- Talker 注册
- Listener 注册
- ROS Master 进行信息匹配
- Listener 发送连接请求
- Talker 确定联接请求
- 建立网络连接
- Talker向Listener发布数据
2)服务通信机制(与topic相比少了两步)
- Talker 注册
- Listener 注册
- ROS Master 进行信息匹配
Listener 发送连接请求Talker 确定联接请求- 建立网络连接
- Talker向Listener发布服务应答数据
3)参数通信机制(类似于全局变量)
- Talker 设置变量
- Listener 查询参数值
- ROS Master 向Listener 发送参数值
注:Talker 向 ROS Master更新了参数,Listener如果重新查询,不能及时更新参数
4)话题和服务的区别.
5.2 文件系统
- 功能包清单(Package manifest):记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等。
- 元功能包(Meta Packages):组织多个用于同一目的功能包。
- 元功能包清单(Meta Packages.):类似于功能包清单,不同之处在于元功能包清单中可能会包含运行时需要依赖的功能包或者声明一些引用的标签。
- 消息类型(Message):消息是ROS节点之间发布/订阅的通信信息,可以使用ROS系统提供的消息类型,也可以使用.msg文件在功能包的msg文件夹下自定义需要的消息类型。
- 服务类型(Service):服务类型定义了ROS服务器/客户端通信模型下的请求与应答数据类型,可以使用ROS系统提供的服务类型,也可以使用.Srv文件在功能包的srv文件夹中进行定义。
- 代码(Code):放置功能包节点源代码的文件夹。
5.3 开源社区
- ROS发行版
- 软件源
- ROS wiki
- ROS Answer
6. 初次实践
6.1 版本选择
Ubuntu20.04
ROS1——Noetic
6.2 Ubuntu20.04 noetic安装记录
参考:wiki
- 添加ROS软件源(使用清华源)
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
- 添加密匙
sudo apt-key adv --keyserver 'hkp://pgp.mit.edu:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
出现下面的提示密匙添加正确
3. 安装ROS
sudo apt update
sudo apt install ros-noetic-desktop-full
- 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
- 安装依赖
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
- 初始化rosdep
sudo rosdep init
rosdep update
1)对于rosdep初始化失败
因为网络问题,rosdep init
很容易失败,csdn有很多解决方法
这里用一个比较方便的:本文之后,世上再无rosdep更新失败问题)
- 安装
pip3
sudo apt-get install python3-pip
- 安装
rosdepc
sudo pip3 install rosdepc
- 如果失败
sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple rosdepc
- 初始化
sudo rosdepc init
- 更新
rosdepc update
2)以上比较麻烦的话,可以使用一键安装(doge)
wget http://fishros.com/install -O fishros && . fishros
ROS默认安装路径在
/opt/ros/noetic
其中比较重要的是
include
、lib
、share
三个文件夹
include
里面主要是.h
头文件,使用c++
编程需要include
lib
文件夹主要是安装的可执行程序,即node
share
主要是安装功能包的接口,比如topic
、service
6.3 安装后测试
- 使用
roscore
命令启动ROS Master
roscore
6.4 ROS命令工具
命令 | 作用 |
---|---|
catkin_create-pkg | 创建功能包 |
rospack | 获取功能包信息 |
catkin_make | 编译工作空间中的功能包 |
rosdep | 自动安装功能包依赖的其他包 |
roscd | 功能包目录跳转 |
roscp | 拷贝功能包文件 |
rosed | 编辑功能包文件 |
rosrun | 运行功能包可执行文件 |
roslaunch | 运行启动文件 |
6.5 第一个ROS例程(小海龟仿真)
- 启动ROS Master(第一个终端)
roscore
- 启动小海龟仿真器(第二个终端)
rosrun turtlesim turrlesim_node
- 启动海龟控制节点(第三个终端)
rosrun turtlesim turtle_teleop_key
4. 使用 rqt_graph
可视化工具参看计算图
rqt_graph
5. 使用rosnode list
查看系统的节点
rosnode list
6. 使用 rosnode info
查看节点信息
rosnode info /turtlesim
7. 使用 rostopic list
查看系统的发布/订阅话题
rostopic list
8. 使用 rosnode info
查看话题信息
rostopic info /turtle1/cmd_vel
9. 使用 rostopic echo
· 监听话题信息
rostopic echo /turtle1/cmd_vel
10. 使用 rostopic pub
来发布命令
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
x: 0.0
y: 2.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
11. 添加参数使其一直旋转
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
- 使用
rosservice list
查看系统的服务
rosservice list
13. 使用 rosservice info
查看服务信息
rosservice info /spawn
14. 使用 rosservice call
发布服务请求
rosservice call /spawn "x: 2.0
y: 5.0
theta: 0.0
name: 'turtle2'"
15. 使用 rqt_plot
可视化工具
rqt_plot