ROS理论与实践—— 一 、初识ROS


前言

本门课是我当初在深蓝学院上的课程,时间过去两年之久,我重新整理出来,一则作为自己复习的资料,另一则方便初学ros的同学。好的,话不多少,本文先介绍了ROS的基础内容。


以下是本篇文章正文内容,下面案例可供参考

一、ROS是什么?

背景:百度Apollo无人车基于ROS进行的开发。只不过百度对ROS进行了定制优化。ROS作为一种开发机器人和人工智能的利器,需要熟悉理论,并通过实践验证。
ROS系统的框架用“四位一体”来总结是比较到位的,即:
ROS=通讯机制 + 开发工具 + 应用功能 + 生态系统
其中通讯机制是ROS开发的核心,基于一种点对点的网络通讯,工具包丰富,有3D可视化工具rviz,物理仿真环境gazebo,数据记录工具rosbag以及Qt工具箱rqt等。

二、ROS安装

采用的ROS版本是ROS Kinetic Kame,搭配的Ubuntu版本是16.04。(可支持到2021年)

1 安装方法

  1. 添加ROS软件源

sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’

  1. 添加密钥

sudo apt-key adv keyserver hkp://ha.pool.sks-keyservers.net:80 recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

  1. 安装ROS

sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full

  1. 初始化rosdep

sudo rosdep init
rosdep update

  1. 设置环境变量

echo source /opt/ros/kinetic/setup.bash >> ~/.bashrc
source ~/.bashrc

  1. 安装rosinstall

sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential

  1. 安装完成
    在这里插入图片描述

强调ros安装的目录是默认在/opt/ros路径下。
bin文件夹:放置的一般是可执行的程序
etc文件夹:ros相关的配置文件
include文件夹:所有通过命令行或终端安装的功能包代码的头文件
lib文件夹:所有通过终端安装的功能包可执行程序,即节点
share文件夹:所安装功能包接口的一些信息

2 初次实践

键盘控制小海龟运动:
在这里插入图片描述

  1. 使用roscore命令启动ROS Master主节点

roscore

  1. 启动turtlesim包中的turtlesim_node节点,运行小乌龟的仿真程序:

rosrun turtlesim turtlesim_node _name: = my_turtle

  1. 用键盘遥控乌龟

rosrun turtlesim turtle_teleop_key

三、ROS命令小结

通过小海龟仿真器可熟悉ROS的命令:

1 ROS中的节点

nodes:表示节点,在ROS中是一个可执行文件,节点与节点之间通过话题进行通信。在小海龟例程中,turtle_teleop_key在一个topic上发布键盘的输入信息,turtlesim_node节点订阅该topic上的信息来接收键盘的输入。

2 ROS中的话题

rqt_graph是用来创建正在运行的系统的动态框图,在终端运行:rosrun rqt_graph rqt_graph,可以看到turtle_teleop_key与turtlesim_node节点是通过/turtle 1/cmd_vel的Topic来通信的。
在这里插入图片描述

3 ROS中的消息

  1. 利用rostopic echo命令查看中间的信息。

rostopic echo /turtle1/cmd_vel

在这里插入图片描述

  1. 利用rostopic pub命令来发布数据

设定小乌龟行进的线速度和角速度,命令是使小乌龟x方向行进的速度为2.0,y方向和z方向的速度都为0,绕z轴角速度为1.8,绕x轴和y轴的角速度都为0。运行:

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist  ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’

为了使小龟不停的绕圈,更改运行的命令为:

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1  ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’

在这里插入图片描述

  1. 运行rostopic hz命令来报告每个数据发布的频率
    例如想知道小海龟运动的姿态,运行命令:

rostopic hz /turtle1/pose

在这里插入图片描述

  1. 利用rqt_plot命令来显示topic中的数据
    例如绘制/turtle1/pose上的数据,命令:

rosrun rqt_plot rqt_plot

在这里插入图片描述

4 ROS中的services和Parameters

  1. rosservice call 命令
    例如产生一个新的海龟,并给出小龟的x,y,theta值和名字。命令如下:

rosservice call spawn 2 2 0.2 turtle2

在这里插入图片描述

  1. 用rosparam set命令和get命令来改变窗口背景的颜色
    例如将背景色的红色由原先的0改为200,并使其生效。命令如下:

rosparam set background_r 50
rosservice call clear

在这里插入图片描述

5 ROS中的roslaunch

Roslaunch用于一次打开多个节点。同时打开两个turtlesim节点的操作如下。
运行命令:

roslaunch beginner_tutorials turtlemimic.launch

在这里插入图片描述
若让两个乌龟同步运动,运行命令:

rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1   [2.0, 0.0, 0.0]’ ‘[0.0, 0.0, -1.8]’

在这里插入图片描述

_ 相关知识点补充

ROS相关的知识点补充如下:

1 理解ROS节点

1 安装模拟器

sudo apt-get install ros-<distro> -ros-tutorials

2.解释
Nodes:一个节点就是一个可执行文件,用来与其他节点进行通信
Topics:话题,节点发布消息到话题,也可订阅话题以接收消息
Messages:消息,用来向Topic订阅或发布数据
Master:主节点
rosout:标准输出/ 标准错误的输出
roscore: 用来启动Master
rosnode:
1)用来列出当前状态的所有节点

rosnode list //(若什么都没运行,会看到只有rosout节点)

2)返回关于某指定节点的信息

rosnode info /rosout

rosrun:允许使用包名直接运行一个包内的节点

rosrun [Package_name] [node_name]

2 理解ROS中的Topics

1.小乌龟算例

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

以上两个节点通过ROS Topics来相互通信,turtle_teleop_key 在一个topic上发布键盘输入信息,turtlesim_node节点订阅同一个topic的信息来接收键盘输入。
2. rostopic echo :显示发布于一个主题上的数据

rostopic echo /turtle 1/cmd_vel

3.rostopic list:显示当前被订阅和被发布的主题列表
4.ROS Messages
为完成发布者(turtle_teleop_key节点)和订阅者(turtlesim_node节点)之间的通信,发布者和订阅者必须发送和接收相同类型的信息。
(1) rostopic type:返回正在使用的主题上的信息类型

rostopic type /turtle/cmd_vel

(2) rostopic pub:向上一个topic上发布数据

rostopic pub [topic] [msg_type] [args]
rostopic pub -1 /turtle 1/cmd_vel geometry_msgs/Twist--‘[2.0,0.0,0.0]’‘[0.0,0.0,1.8]’

参数-1的含义是rostopic只发布一个message,然后退出
‘-‘表示其后的参数是可缺省的,‘–’表示其后的参数是不可缺省的
利用rostopic pub -r命令来发布一个持续的命令流

rostopic pub /turtle 1/cmd_vel geometry-msgs/Twist--‘[2.0,0.0,0.0]’‘[0.0,0.0,1.8]’

(3) rostopic hz
返回数据发布的速率

rostopic hz [topic]