一、PA5 ROS 安装
1、配置软件库
备注:上面的四个选项打上钩。
2、添加软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
3、添加密钥
sudo apt-get adv -- keyserver'hkp:keyserver.ubuntu.com:80'--recv-key C1CF6E31E6BADE8868B127B4F4ED6FBAB17C654
4、安装 ROS
sudo apt update
sudo apt install ros-melodic-desktop-full
5、初始化 rosdep
sudo rosdep init
rosdep update
6、设置环境变量
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
7、安装 rosinstall
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
8、ros 默认安装路径
/opt/ros/melodic
9、检测 ROS 是否安装成功
启动ROS Master:roscore
启动小海龟仿真器:rosrun turtlesim turtlesim_node
启动海龟控制节点:rosrun turtlesim turtle_teleop_key
备注:打开三个终端输入分别输入上面的指令。
ROS安装步骤:http://wiki.ros.org/melodic/Installation/Ubuntu
二、PA6 ROS是什么
1、ROS 是什么
∙ \bullet ∙ 通信机制 + 开发工具 + 应用功能 + 生态系统 → 提高机器人研发中的软件复用率
2、ROS 中的通信机制
3、开发工具
∙ \bullet ∙ 命令行&编译器/TF坐标转换/QT工具箱/Rviz/Gazebo
4、应用功能
∙ \bullet ∙ Navigation/SLAM/Movelt
5、生态系统
∙ \bullet ∙ 发行版(Distribution): ROS 发行版包括一系列带有版本号、可以直接安装的功能包。
∙ \bullet ∙ 软件源(Repository):ROS 依赖于共享网络上的开源代码,不同的组织机构可以开发或贡献自己的机器人软件。
∙ \bullet ∙ ROS wiki:记录 ROS 信息文档的主要论论坛。
∙ \bullet ∙ 邮件列表(Mailing list): 交流 ROS 更新的主要渠道,同时也可以交流 ROS 开发的各种疑问。
∙ \bullet ∙ ROS Answer:咨询 ROS 相关问题的网站。
∙ \bullet ∙ 博客(Blog):发布 ROS 社区中的新闻、图片、视频(http://www.ros.org/news)
三、PA7 ROS 的核心概念
1、节点与节点管理器
■ \blacksquare ■ 节点(Node) – 执行单元
∙ \bullet ∙ 执行具体任务的进程、独立运行的可执行文件;
∙ \bullet ∙ 不同节点可使用不同的编程语言,可分布式运行在不用的主机;
∙ \bullet ∙ 节点在系统中的名词必须是唯一的。
■ \blacksquare ■ 节点管理器(ROS Master) – 控制中心
∙ \bullet ∙ 为节点提供命名和注册服务;
∙ \bullet ∙ 跟踪和记录话题/服务通信,辅助节点互相查找、建立连接;
∙ \bullet ∙ 提供参数服务器,节点使用此服务器存储和检索运行时的参数。
2、话题通信
■ \blacksquare ■ 话题(Topic) – 异步通信机制
∙ \bullet ∙ 节点间用来传输数据的重要总线;
∙ \bullet ∙ 使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一。
■ \blacksquare ■ 消息(Message)-- 话题数据
∙ \bullet ∙ 具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型;
∙ \bullet ∙ 使用编程语言无关的 .msg 文件定义,编译过程中生成对应的代码文件。
3、服务通信
■ \blacksquare ■ 服务(Service) – 同步通信机制
∙ \bullet ∙ 使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回应答数据;
∙ \bullet ∙ 使用编程语言无关的 .srv 文件定义请求和应答数据结构,编译过程中生成对应的代码文件。
4、话题与服务的区别
话题 | 服务 | |
---|---|---|
同步性 | 异步 | 同步 |
通信模型 | 发布/订阅 | 服务器/客户端 |
底层协议 | ROSTCP/ROSUDP | ROSTCP/ROSUDP |
反馈机制 | 无 | 有 |
缓冲区 | 有 | 无 |
实时性 | 弱 | 强 |
节点关系 | 多对多 | 一对多 |
使用场景 | 数据传输 | 逻辑处理 |
5、参数
■ \blacksquare ■ 参数(Parameter) – 全局共享字典
∙ \bullet ∙ 可通过网络访问的共享、多变量字典;
∙ \bullet ∙ 节点使用此服务器来存储和检索运行时的参数;
∙ \bullet ∙ 适合存储静态、非二进制的配置参数,不适合存储动态配置的数据。
6、文件系统
■ \blacksquare ■ 功能包(Package)
∙ \bullet ∙ ROS 软件中的基本单元,包括节点源码、配置文件、数据定义等。
■ \blacksquare ■ 功能包清单(Package manifest)
∙ \bullet ∙ 记录功能包的基本信息,包括作者信息、许可信息、依赖选项、编译标志等。
■ \blacksquare ■ 元功能包(Meta Packages)
∙ \bullet ∙ 组织多个用于同一目的的功能包。
四、PA8 ROS命令行工具的使用
1、常见命令
∙ \bullet ∙ rostopic
∙ \bullet ∙ rosservice
∙ \bullet ∙ rosnode
∙ \bullet ∙ rosparam
∙ \bullet ∙ rosmsg
∙ \bullet ∙ rossrv
2、以小海龟为例
启动 ROS Master:roscore
启动小海龟仿真器: rosrun turtlesim turtlesim_node
启动小海龟控制节点:rosrun turtlesim turtle_teleop_key
∙ \bullet ∙ 使用 rqt_graph 可视化计算图
∙ \bullet ∙ 查看话题列表: rosnode list
∙ \bullet ∙ 发布话题消息:
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist"linear:
x:1.0
y:1.0
z:0.0
angular:
x:0.0
y:0.0
z:0.0
∙ \bullet ∙ 发布服务请求
rosservice call /spawn "x: 0.0
y: 0.0
theta: 0.0
name: 'turtle2'"
name: "turtle2"
备注:在最下面产生了小海龟。
∙ \bullet ∙ 话题记录
rosbag record -a -O cmd_record
∙ \bullet ∙ 话题复现
rosbag play cmd_record.bag