Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

采用的是虚拟机(VMware Workstation)安装的Linux(Ubuntu16.04 ,64bit)

首先,简单介绍一下:
ROS(Robot Operating System)是一个机器人软件平台,它能为异质计算机集群提供类似操作系统的功能。ROS的前身是斯坦福人工智能实验室为了支持斯坦福智能机器人STAIR而建立的交换庭(switchyard)项目。ROS提供一些标准操作系统服务,例如硬件抽象,底层设备控制,常用功能实现,进程间消息以及数据包管理。ROS是基于一种图状架构,从而不同节点的进程能接受,发布,聚合各种信息(例如传感,控制,状态,规划等等)。目前ROS主要支持Ubuntu。

接下来就是正式进入安装了!

首先,更新一下镜像源(具体原因,不说好!):

sudo gedit /etc/apt/sources.list

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
替换为:

deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties  
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties  
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties  
deb http://mirrors.aliyun.com/ubuntu/ xenial universe  
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe  
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse  
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse  
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties  
deb http://archive.canonical.com/ubuntu xenial partner  
deb-src http://archive.canonical.com/ubuntu xenial partner  
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties  
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe  
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse 

保存并退出:
Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
打开系统设置->点击“软件和升级”->点击“其他软件”->点击左下角“添加”按钮:

deb  http://ros.exbot.net/rospackage/ros/ubuntu/ xenial main

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

更新一下:

sudo apt-get update

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

设置Ubuntu的sources.list:

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

添加key:

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

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
更新package(建议在安装所有软件前都要执行这两个命令):

sudo apt-get update
sudo apt-get upgrade

更新任务进行中:
Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
最后出现问题:
Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
按提示进行:

sudo apt-get update--fix-missing

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

准备工作做得差不多了;安装ROS kinetic完整版(时间有点久,下载慢,解压还好):

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

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

安装完成后,初始化ROS(出现问题,网络原因):

rosdep init

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
按提示继续:

rosdep uodate

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
初始化环境,否则每次启动都需要source一次

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

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
安装额外依赖包:

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

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

启动ROSmaster,类似于给ROS操作系统开机(Ctrl+c退出):

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
启动turtlesim并监听turtlesim_node发来的消息(注意: 要在开一个终端):

rosrun turtlesim turtlesim_node

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

出现小乌龟(三只头的乌龟,有点迷!),则安装成功。

到此,安装就基本完成了,但还有一些相关环境的配置需要继续说明一下。

配置工作目录与运行环境:
在根目录下创建工作空间/catkin_ws,并创建src目录,为这个空间设置配置文件(这时候会自动新建一个CMakeLists.txt文件):

cd /opt/ros/kinetic/
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

将ros用户自己的工程目录配置到bash里:

sudo gedit ~/.bashrc

在其最后一行加入:

export ROS_PACKAGE_PATH=~/catkin_ws:$ROS_PACKAGE_PATH

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

编译工程:

cd ~/catkin_ws/
catkin_make

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

将catkin_make加入到shell里:

source devel/setup.bash
echo $ROS_PACKAGE_PATH

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

ROS下的一个简单hello world程序;
参考链接:https://blog.****.net/cungudafa/article/details/88711651
在catkin_ws/src下创建项目beginner_tutorials:

catkin_create_pkg beginner_tutorials

进入项目目录,再新建src包:

cd beginner_tutorials/
mkdir src

在beginner_tutorials/src文件夹中创建hello.cpp文件,并修改文件内容:

cd  ..
touch hello.cpp
sudo gedit hello.cpp

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
hello.cpp的代码:

#include<ros/ros.h>
int main(int argc,char **argv){   
ros::init(argc,argv,"hello_ros");   
ros::NodeHandle nh;   
ROS_INFO_STREAM("helloworld,ROS!");
}

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

修改CMakeLists.txt文件(项目配置文件),退回到cd beginner_tutorials/文件夹中,修改CMakeLists.txt文件:

sudo gedit CMakeLists.txt

修改内容如下:

cmake_minimum_required(VERSION 2.8.3)
project(beginner_tutorials)
#添加需要的依赖库 roscpp
find_package(catkin REQUIRED COMPONENTS roscpp)
include_directories(
${catkin_INCLUDE_DIRS}
)
#声明想要的可执行文件的文件名,以及所需要的源列表,如果有多个源列表,空格列在此处
add_executable(hello src/hello.cpp)
#告诉Cmake当链接此可执行文件时需要链接哪些库
target_link_libraries(hello ${catkin_LIBRARIES})

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
修改package.xml文件:

sudo gedit package.xml

此处只需在 <buildtool_depend>catkin</buildtool_depend>后面添加这两句即可:

<build_depend>roscpp</build_depend>
 <exec_depend>roscpp</exec_depend>

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
回到编译工作区:

cd  ..
cd ~/catkin_ws
catkin_make

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

可以发现,在catkin_ws/devel/lib/beginner_tutorials/目录下会生成hello可执行文件:
Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)
打开ROS:

roscore

打开另外一个终端:

source devel/setup.bash
rosrun beginner_tutorials hello

Linux(Ubuntu16.04 ,64bit)学习之下安装ROS的教程(附一个hello world程序)

1处出现错误是因为没有先运行:source devel/setup.bash;导致路径出现问题,改正回来,就能成功运行!