ROS

ROS 的安装使用

初步体验 ROS

Posted by Jerry Chen on July 7, 2021

建议跳过 ROS,直接学习使用 ROS2;

介绍 ROS

ROS(Robot Operating System,机器人操作系统)是一系列程序库和工具的集合。它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。

官网 中文文档

安装 ROS

选择一个 ROS 版本

选择 ROS 版本时,建议 Ubuntu 版本匹配,否则安装会困难很多;

我的运行环境是 WSL2 Ubuntu20.04,选择最新的 ROS Noetic Ninjemys;

在 Ubuntu 上安装 ROS Noetic

参考文章:http://wiki.ros.org/cn/noetic/Installation/Ubuntu

  1. 设置 sources.list

    增加来自 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'
    

    若下载速度缓慢,清使用 Tsinghua University 软件源 :

    1
    
    sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
    
  2. 设置密钥

    使用 ubuntu 密钥服务器:

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

    如不成功,使用第三方密钥服务器:

    1
    
    sudo apt-key adv --keyserver 'hkp://pgp.mit.edu:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
    
  3. 开始安装 ROS

    首先更新程序包索引:

    1
    
    sudo apt update
    

    接着选择一个版本的 ROS 进行安装:

    虚拟机 Ubuntu、WSLg 可尝试 Desktop-Full;

    WSL2(无 GUI)选择 ROS-Base;

    • 完整桌面版(Desktop-Full,推荐):除了桌面版的全部组件外,还包括 2D/3D 模拟器(simulator)和 2D/3D 感知包(perception package);

      1
      
      sudo apt install ros-noetic-desktop-full
      
    • 桌面版(Desktop):包括了 ROS-Base 的全部组件,还有一些工具,比如 rqtrviz

      1
      
      sudo apt install ros-noetic-desktop
      
    • ROS-Base(仅含骨架):ROS packaging,build,和 communication 库。没有图形界面(GUI)工具;

      1
      
      sudo apt install ros-noetic-ros-base
      
  4. 设置 ROS 运行环境

    临时环境(新建终端都要手动执行命令设置 ROS 环境):

    1
    2
    3
    4
    5
    
    # bash 版本
    source /opt/ros/noetic/setup.bash
       
    # zsh 版本
    source /opt/ros/noetic/setup.zsh
    

    永久环境,添加到 .zshrc(新建终端后自动执行设置 ROS 环境):

    1
    2
    
    echo "source /opt/ros/noetic/setup.zsh" >> ~/.zshrc
    source ~/.zshrc
    
  5. 安装 rosinstall

    rosinstall 是安装 ROS package 的命令行工具,它和 ROS 是分开发布的。

    1
    
    sudo apt-get install python3-rosinstall
    

初步体验 ROS

示例:小海龟仿真

该示例基于 ros-noetic-desktop-full 版本;

  1. 新建终端 1 执行 ros 核心服务

    1
    
    roscore
    

  2. 新建终端 2 执行 ros 应用

    1
    
    rosrun turtlesim turtlesim_node
    

    执行后 WSLg 会弹出一个窗口显示一只小乌龟:

  3. 保持终端 2 运行的情况下,新建终端 3 执行 ros 应用

    1
    
    rosrun turtlesim turtle_teleop_key
    

    执行后就可以使用电脑键盘方向键控制小乌龟了:

    前进 后退 向左转 向右转

    控制小乌龟动作后,路径也会显示在屏幕上:

第一个 ROS 程序

  1. 创建工作区

    1
    2
    3
    4
    5
    6
    
    # 创建工作区 ros_work
    mkdir ros_work
    mkdir ros_work/src
       
    # 进入工作区的 src 目录
    cd ros_work/src
    
  2. 创建 ROS 功能包

    1
    
    catkin_create_pkg hello_ros
    

  3. 在功能包 hello_ros 目录中新建 hello.cpp 文件,内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    #include <ros/ros.h>
       
    int main(int argc, char **argv)
    {
    	ros::init(argc,argv,"hello");
    	ros::NodeHandle n;
    	ROS_INFO("Hello ROS!");
    	ros::spinOnce();
    }
    
  4. 在功能包 hello_ros 目录中编辑 CMakeLists.txt 文件,内容如下:

    为了容易理解使用非官方写法,官方使用 cmake 宏 catkin_package(…);

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    cmake_minimum_required(VERSION 3.0.2)
    project(hello_ros)
       
    # 查找包 catkin
    find_package(catkin REQUIRED COMPONENTS roscpp)
       
    # 包含头目录
    include_directories(include ${catkin_INCLUDE_DIRS})
       
    # 生成可执行文件
    add_executable(hello hello.cpp)
    target_link_libraries(hello ${catkin_LIBRARIES})
       
    # 设置可执行文件生成目录为源码目录
    set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
    
  5. 回到工作区 ros_work,执行以下命令编译:

    1
    
    catkin_make
    

    执行后会生成:

    • 目录 build:编译中间目录;
    • 目录 devel:存放设置环境变量的脚本,让 ROS 能找到新创建的功能包和可执行文件;
      • devel/setup.zsh 是 zsh 设置环境变量的脚本;
      • devel/setup.bash 是 bash 设置环境变量的脚本;
    • 文件 src/hello_ros/hello:目标 elf 文件;

  6. 使用 rosrun 执行 hello 程序;

    1. 新建终端执行 ros 核心服务:

      1
      
      roscore
      
    2. 在工作区 ros_work 目录先设置新程序包环境变量,然后使用 rosrun 执行功能包中 hello 程序;

      不同终端使用不同设置脚本,zsh 使用 setup.zsh,bash 使用 setup.bash;

      1
      2
      
      source devel/setup.zsh
      rosrun hello_ros hello
      

      执行效果如下: