ROS Notes

安装

当前ROS新的发行版缺少某些关键的包,所以需要重新安装Ubuntu14.04然后再安装ROS Indigo,安装14.04(太老)后出现内核太老识别不了当前网卡故障:

https://askubuntu.com/questions/729212/install-intel-ac-8260-wireless-drivers-offline

1. 管理并配置环境

确认安装成功

1
export | grep ROS

创建WS

1
2
3
4
5
6
7
8
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make

# 将当前工作空间设置为最顶层
source devel/setup.bash
echo $ROS_PACKAGE_PATH

2. 文件系统

预备工作 安装ros-tutorials包

1
sudo apt-get install ros-indigo-ros-tutorials

文件系统工具

  • rospack find [包名称] 允许你获取软件包的有关信息。

    • find rospy```
      1
      + ```rospack find roscpp
  • roscd [本地包名称[/子目录]] 允许你直接切换工作目录到某个软件包或者软件包集当中

    • roscpp```
      1
      + ```roscd roscpp/cmake
    • log```可以切换到ROS保存日记文件的目录下。
      1
      2
      - rosls 直接按软件包的名称而不是绝对路径查看列表
      + ```rosls roscpp_tutorials

3. 创建程序包

包的组成

  • package.xml文件提供有关程序包的元信息
  • CMakeList.txt
  • 每个目录下只能有一个程序包
  • 一个工作空间下可以可以有多个包,每个包含有自己的CMakeList.txt

创建catkin程序包

  • 切换到工作空间

    ~/catkin_ws/src```
    1
    - ```catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

    • 第一个参数是包的名字,后面的是包的依赖
    • 查看包的依赖关系
      • depends1 beginner_tutorials``` 查看一级依赖
        1
        2
        3
        4
        5
        6
        7
                * ```rospack depends beginner_tutorials``` 查看简介
        * 创建的包将会出现在WS的src文件夹里边

        # 4. 编译程序包
        - catkin_make
        + catkin_make (/catkin/commands/catkin_make) 是一个命令行工具,它简化了catkin的标准工作流程。你可以认为catkin_make (/catkin/commands/catkin_make)是在CMake标准工作流程中依次调用了cmake 和 make
        + ```catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
  • 编译

    • 在WS根目录运行

      1
      2
      3
      + 然后运行```catkin_make install``` (可选)
      + 指定src位置
      * ```catkin_make --source my_src

      • install --source my_src```
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22

        # 5. 理解节点
        - 图概念概述
        + Nodes (/Nodes):节点,一个节点即为一个可执行文件
        * 一个节点其实只不过是ROS程序包中的一个可执行文件。ROS节点可以使用ROS客户库与其他节点通信。节点可以发布或接收一个话题。节点也可以提供或使用某种服务。
        + Messages (/Messages):消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
        + Topics (/Topics):话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
        + Master (/Master):节点管理器,ROS名称服务 (比如帮助节点找到彼此)
        + rosout (/rosout): ROS中相当于stdout/stderr。
        + roscore (/roscore): 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。
        - 客户端库
        + rospy = python 客户端库
        + roscpp = c++ 客户端库
        - **使用roscore**
        + roscore 是你在运行所有ROS程序前首先要运行的命令。
        - **使用rosnode**
        + rosnode 显示当前运行的ROS节点信息。
        + rosnode list 指令列出活跃的节点
        + rosnode info 命令返回的是关于一个特定节点的信息
        - **使用rosrun**
        + rosrun 允许你使用包名直接运行一个包内的节点
        * ```rosrun [package_name] [node_name]
      • turtlesim turtlesim_node```
        1
        * ```rosnode list
      • turtlesim turtlesim_node __name:
        1
        * ```rosnode ping my_turtle

6. 理解话题

运行小乌龟模拟程序

  • 1
    - ```rosrun turtlesim turtlesim_node
  • turtlesim turtle_teleop_key```
    1
    2
    3
    4
    5

    ## ROS话题
    - turtle_teleop_key在一个话题上发布按键输入消息,而turtlesim则订阅该话题以接收该消息
    - 使用rqt_graph
    + 安装
      $ sudo apt-get install ros-<distro>-rqt 
      $ sudo apt-get install ros-<distro>-rqt-common-plugins
      
    1
    2
    + 运行
    * ```rosrun rqt_graph rqt_graph
  • ros话题介绍

    • rostopic bw display bandwidth used by topic
    • rostopic echo print messages to screen 可以显示在某个话题上发布的数据。

      • echo [topic]```
        1
        * ```rostopic echo /turtle1/command_velocity
      • echolink
        1
        2
        + rostopic hz     display publishing rate of topic  用来查看数据发布的频率
        * ```rostopic hz [topic]
      • hzlink
        1
        2
        + rostopic list   print information about active topics 列出所有当前订阅和发布的话题。
        * ```rostopic list -v
    • rostopic pub publish data to topic 可以把数据发布到当前某个正在广播的话题上

      • pub [topic] [msg_type] [args]```
        1
        * ```rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity  -- 2.0  1.8
      • 双破折号告诉命令选项解析器接下来的参数部分都不是命令选项

    • rostopic type print topic type 用来查看所发布话题的消息类型。

      • type [topic]```
        1
        * ```rostopic type /turtle1/command_velocity
      • rosmsg命令来查看消息的详细情况

        • show turtlesim/Velocity```
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13

          # 7. 理解服务和参数

          ## ROS服务
          - 服务(services)是节点之间通讯的另一种方式
          - 服务允许节点发送请求(request) 并获得一个响应(response)

          ## 使用rosservice
          - rosservice list
          + 输出可用服务的信息
          - rosservice call
          + 调用带参数的服务
          + ```rosservice type [service]
    • type clear```
      1
      2
      3
      - rosservice type
      + 输出服务类型
      + ```rosservice call [service] [args]
    • call clear```
      1
      2
      3
      4
      5
      6
      7
      8
      9
      - rosservice find         依据类型寻找服务find services by service type
      - rosservice uri 输出服务的ROSRPC uri
      - rossrv show
      + 查看服务详细信息

      ## 使用rosparam
      - 存储并操作ROS 参数服务器(Parameter Server)
      - rosparam set 设置参数
      + ```rosparam set background_r 150
  • rosparam get 获取参数

    • get background_g```
      1
      2
      3
          + ```rosparam get /```来显示参数服务器上的所有内容
      - rosparam load 从文件读取参数
      + ```rosparam load [file_name] [namespace]
    • load params.yaml copy``` 将yaml文件重载入新的命名空间
      1
      2
      3
      - rosparam dump           向文件中写入参数 
      + ```rosparam dump [file_name]``` 将所有的参数写入params.yaml文件
      + ```rosparam dump params.yaml
  • rosparam delete 删除参数

  • rosparam list 列出参数名

8. 使用rqt_console与roslaunch

使用rqt_console和rqt_logger_level

  • rqt_console属于ROS日志框架(logging framework)的一部分,用来显示节点的输出信息。
  • rqt_logger_level允许我们修改节点运行时输出信息的日志等级(logger levels)
    • Fatal是最高优先级,Debug是最低优先级

使用roslaunch

  • roslaunch可以用来启动定义在launch文件中的多个节点。
  • [package] [filename.launch]```
    1
    - 新建launch文件夹

roscd beginner_tutorials #这里需要export ROS_PACKAGE_PATH=~/catkin_ws/src:$ROS_PACKAGE_PATH
mkdir launch
cd launch

1
- 创建turtlemimic.launch文件,

</launch>

1
2
- 开始运行
+ ```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]'```
+ 运行rqt_graph观察