由于本人工作需要使用ROS进行相关开发,但是经常遗忘常用工具的使用方法和开发的内容,故在此进行记录。
目前我入门主要看的书是ROS_Robot_Programming_CN.pdf, 里面的内容通俗易懂,有具体的实例介绍,推荐入门者查看,本文部分内容也是引自该书籍。
在ROS维基中将ROS定义为“ROS是一个开放源代码的机器人元操作系统。它提供了我们对操作系统期望的服务,包括硬件抽象、低级设备控制、常用功能的实现、进程之间的消息传递以及功能包管理。它还提供了用于在多台计算机之间获取、构建、编写和运行代码的工具和库。”
换句话说,ROS包括一个类似于操作系统的硬件抽象,但它不是一个传统的操作系统,它具有可用于异构硬件的特性。此外,它是一个机器人软件平台,提供了专门为机器人开发应用程序的各种开发环境。
本文安装ROS Kinetic
,是在Ubuntu1604中使用的版本
在ros-latest.list添加ROS版本库。打开新的终端窗口,输入如下命令。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
为了从ROS存储库下载功能包,下面添加公钥 。作为参考,以下公钥可以根据服务器的操作发生变更,请参考官方wiki页面
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
现在用户已经将ROS版本库地址放在代码列表中,我们建议在安装ROS之前刷新软件包列表的索引并升级所有当前安装的Ubuntu软件包,但这不是必选项
sudo apt-get update && sudo apt-get upgrade -y
使用以下命令安装台式机的ROS功能包。这包括ROS、rqt、RViz、机器人相关的库、仿真和导航等等。
sudo apt-get install ros-kinetic-desktop-full
上面的安装只包含基本的rqt,但是笔者将安装所有额外的rqt相关的功能包。用下面的命令安装所有rqt相关的功能包,可以很方便地使用各种rqt插件。
sudo apt-get install ros-kinetic-rqt*
在使用ROS之前,必须初始化rosdep。rosdep是一个通过在使用或编译ros的核心组件时轻松安装依赖包来增强用户便利的功能。
sudo rosdep init
rosdep update
这是安装ROS的各种功能包的程序。它是被频繁使用的有用的工具,因此务必要安装它。
sudo apt-get install python-rosinstall
下面加载环境设置文件。里面定义着ROS_ROOT和ROS_PACKAGE_PATH等环境变量。
#追加重定向
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
ROS
使用一个名为catkin
的ROS专用构建系统。为了使用它,用户需要创建并初始化catkin
工作目录,如下所示。除非用户创建新的工作目录,否则此设置只需设置一次。
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
如果用户已经创建了一个catkin
工作目录,下面我们来进行构建。目前,只有src
目录和CMakeLists.txt
文件在catkin
工作目录中,但让我们尝试使用catkin_make
命令来构建吧。
cd ~/catkin_ws/
catkin_make
当用户构建没有问题时,运行ls
命令。除了自己创建的src
目录之外,还出现了一个新的build
和devel
目录。catkin
的构建系统的相关文件保存在build
目录中,构建后的可执行文件保存在devel
目录中。
所有ROS
安装已完成。要测试它是否正确安装,请关闭所有终端窗口并运行一个新的终端窗口。现在通过输入以下命令来运行roscore
。
roscore
由于本人也是刚接触ROS时间不久,目前使用ROS最重要的工具便是ROS消息通信的功能,相信这也绝大部分朋友们会使用到的,这里进行简单的记录供大家学习。
ROS最典型的例子便是小乌龟程序,也就是turtlesim
工程,能够在屏幕上显示ROS的图标-乌龟,并可以用键盘操纵它的一个节点(程序)。
ROS所有的程序运行之前都必须启动roscore
roscore
turtlesim
功能包的turtlesim_node
打开终端运行以下命令
rosrun turtlesim turtlesim_node
turtlesim
功能包的turtle_teleop_key
打开一个新的终端窗口并执行以下命令。将显示下面消息,并执行turtlesim
功能包中的turtle_teleop_key
。如果您按下该终端窗口上的方向键(←,→,↑,↓),将看到乌龟按照方向键移动,这看似只是一个简单的仿真,但实体机器人也可以通过这种方式进行远程控制。
rosrun turtlesim turtle_teleop_key
rqt_graph
在终端中执行以下命令
rqt_graph
rqt_graph
节点以GUI
形式显示关于当前正在运行的节点的信息。圆圈表示节点,正方形表示话题。从图可以看到,箭头从/teleop_turtle
节点开始,通往/turtlesim
。这表示两个节点正在运行并且这两个节点之间正在发生消息通信。并且/turtle1/cmd_vel
是turtle1
话题的子话题,是两个节点之间的话题的名称,意味着在teleop_turtle
节点中通过键盘输进来的速度命令通过话题将消息发送给turtlesim
。换句话说,使用先前执行的两个节点,将键盘命令传送到机器人仿真器。
【1】 ROS_Robot_Programming_CN.pdf