ROS的安装及简单使用

平台

  Ubuntu 16.04

ROS简介

  ROS即机器人操作系统(Robot Operating System),ROS系统是起源于2007年斯坦福大学人工智能实验室的项目与机器人技术公司Willow Garage的个人机器人项目之间的合作,2008年之后就由Willow Garage来进行推动。2010年Willow Garage公司发布了开源机器人操作系统ROS
ROS生态系统
  ROS是面向机器人的开源的元操作系统(meta-operatingsystem)。它能够提供类似传统操作系统的诸多功能,如硬件抽象、底层设备控制、常用功能实现、进程间消息传递和程序包管理等。此外,它还提供相关工具和库,用于获取、编译、编辑代码以及在多个计算机之间运行程序完成分布式计算。
  目前主流的ROS版本如下:
ROS版本
  本博客采用的是Kinetic Kame版本,也是目前为止(2019年)较为稳定的一个版本。

ROS安装

安装 Ubuntu 16.04

  首先安装好Ubuntu 16.04。(中英文皆可)

设置 sources.list

  为Ubuntu的包管理器增加源,设置计算机接受来自于 packages.ros.org的软件。

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

  这一步会根据Ubuntu Linux发行版本的不同,添加不同的源。Ubuntu的版本通过lsb_release -sc获得。一旦添加了正确的软件库,操作系统就知道去哪里下载程序,并根据命令自动安装软件。

设置密钥

  这一步是为了确认源代码是正确的,并且没有人在未经所有者授权的情况下,修改任何程序代码。通常情况下,当添加完软件库时,已经添加了软件库的密钥,并将其添加到操作系统的可信任列表中。

1
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

检查软件更新

  确保包管理器的索引已经更新至最新。

1
sudo apt-get update

正式安装

  这里安装的是桌面完整版,也是推荐安装的版本。

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

  这一步比较耗时,耐心等待。

初始化 rosdep

  在使用ROS之前,需要先初始化rosdeprosdep使得你可以为你想要编译的源码,以及需要运行的ROS核心组件,简单地安装系统依赖。

1
2
sudo rosdep init
rosdep update

  注1:多行命令,需依次输入,下同。
  注2:实际安装时,通常这里会有个报错:

1
2
ERROR: cannot download default sources list from:https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.

  导致这个错误的原因为,该链接必须要科学上网才能打开,因此,需要将其域名改为实际的IP地址。首先打开hosts文件:

1
sudo gedit /etc/hosts

  然后添加以下命令:

1
199.232.28.133 raw.githubusercontent.com

  然后重新sudo rosdep init(会报一个已经存在的错误,不用管他)。

环境设置

  如果在每次一个新的终端启动时,ROS环境变量都能自动地添加进你的bash会话是非常方便,这可以通过如下命令来实现:

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

构建包所需的依赖

  到这一步,应该已经安装好了运行核心ROS包的所有东西。要创建和管理你自己的ROS workspace,还有单独发布的许多的工具。比如,rosinstall是一个常用的命令行工具,使你可以通过一个命令为ROS包简单地下载许多源码树。

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

  至此,已经安装完了ROS的所有部分,下面可以进行一个简单的测试。

测试

启动ROS核心管理器

  打开一个终端,输入以下命令:

1
roscore

启动乌龟仿真器节点

  再打开一个终端,输入以下命令:

1
rosrun turtlesim turtlesim_node

启动控制乌龟操作节点

  再打开一个终端,输入以下命令:

1
rosrun turtlesim turtle_teleop_key

  点击该终端,使其处于激活状态,然后按下键盘的方向键就可以看到小乌龟的运动了。
turtle测试

ROS实例——两台计算机的通信

硬件平台

  两台安装了Ubuntu16.04ROS kinetic的计算机
  路由器

软件配置

安装chrony包,用于实现同步

1
2
3
sudo apt-get install chrony
sudo apt-get install ntpdate
sudo ntpdate ntp.ubuntu.com

安装SSH服务器库

1
2
sudo apt-get install openssh-server
ps -e|grep ssh

修改配置文件

查看hostname和IP地址

  首先利用hostname命令查看服务器和客户端电脑的名字,假设为server_nameclient_name
  其次利用ifconfig命令查看服务器和客户端的IP地址(连接至同一局域网),假设IP地址分别为:server_IPclient_IP(wlp4s0的网络地址)。

修改/etc/hosts文件和环境变量

1.打开/etc/hosts文件:sudo gedit /etc/hosts,添加如下内容:

1
2
server_IP  server_name
client_IP client_name

  注:中间为tab键,实际操作时,注意替换名字。
  输入命令重启网络:sudo /etc/init.d/networking restart

2.打开bash文件:sudo gedit ~/.bashrc,服务器的计算机增加的内容为:

1
2
export ROS_MASTER_URL=http://client_IP:11311
export ROS_HOSTNAME=server_name

  客户端的计算机增加的内容为:

1
2
export ROS_MASTER_URL=http://server_IP:11311
export ROS_HOSTNAME=client_name

3.在服务器的计算机中可以输入以下内容进行测试:

1
2
ssh server_name
ping client_name

  同理,客户端也可以进行测试。
ping测试

编写程序

创建文件夹

  1. 创建工作空间

    1
    2
    3
    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws/src
    catkin_init_workspace
  2. 创建功能包

    1
    catkin_create_pkg test roscpp geometry_msgs tf

  注:这里的test是功能包的名字,roscpp,geometry_msgs,tf是需要的依赖库。

编写cpp文件

  在test/src里面新建一个move_turtle.cpp文件。其内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <ros/ros.h>
#include <signal.h>
#include <geometry_msgs/Twist.h>

ros::Publisher cmdVelPub;

void shutdown(int sig)
{
cmdVelPub.publish(geometry_msgs::Twist());//使机器人停止运动
ROS_INFO("move_turtle_goforward ended!");
ros::shutdown();
}

int main(int argc, char** argv)
{
ros::init(argc, argv, "move_turtle");
//初始化ROS,它允许ROS通过命令行进行名称重映射
ros::NodeHandle node;//为这个进程的节点创建一个句柄
cmdVelPub = node.advertise<geometry_msgs::Twist>("/mobile_base/commands/velocity", 1);
//在/mobile_base/commands/velocity topic上发布一个geometry_msgs/Twist的消息
ros::Rate loopRate(10);//ros::Rate对象可以允许你指定自循环的频率
signal(SIGINT, shutdown);
ROS_INFO("move_turtle cpp start...");
geometry_msgs::Twist speed; // 控制信号载体 Twist message
while (ros::ok())
{
speed.linear.x = 0.1; // 设置线速度为0.1m/s,正为前进,负为后退
speed.angular.z = 0; // 设置角速度为0rad/s,正为左转,负为右转
cmdVelPub.publish(speed); // 将刚才设置的指令发送给机器人
loopRate.sleep();//休眠直到一个频率周期的时间
}
return 0;
}

  该程序的作用是:使turtlebot一直以0.1m/s的速度前进。

修改CMakeLists.txt

  在test功能包中的CMakeList.txt文件的末尾加上两句:

1
2
add_executable(move_turtle src/move_turtle.cpp)  
target_link_libraries(move_turtle ${catkin_LIBRARIES})

编译工程

  回到工作空间

1
cd ~/catkin_ws/

  编译

1
catkin_make

  设置环境变量

1
source devel/setup.bash

  附:将工作空间永久添加到环境变量中:

1
2
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

启动turtlebot

  1. 打开turtlebot电源,并使其和客户端计算机连接,将客户端计算机放在turtlebot上。
  2. 在客户端计算机中,打开节点管理器(打开终端输入):roscore,再打开一个终端启动节点:roslaunch kobuki_node minimal.launch
  3. 在服务器计算机中也打开节点管理器,再打开一个终端,启动刚才的工程:
    rosrun test move_turtle
  4. 此时就会看到turtlebot一直在直线运行,直到按下ctrl + c

附:ROS官网教程

附 基于虚拟机VMware的Ubuntu18.04和ROS的安装

平台

  虚拟机VMware Workstation 15
  Ubuntu18.04
  ROS Melodic Morenia

虚拟机安装Ubuntu18.04

  参考博客:VMware Workstation 15序列号
  实际安装时,按照步骤一步步来即可。设备配置那里后面可以更改,不用太纠结。
  安装完Ubuntu之后,和正常双系统一样,需要更换国内源,更新软件等。

安装ROS Melodic Morenia

  Ubuntu18.04对应的ROS系统为Melodic Morenia,安装过程和kinetic类似。参考博客:ROS Melodic Morenia安装

谢谢老板!
-------------本文结束感谢您的阅读给个五星好评吧~~-------------