ROS
ROS机器人操作系统
  ros初探
    什么是ros
      ROS是面向机器人的开源的元操作系统（meta-operating
system）
    为什么选择ros
      抽象硬件
      支持分布式计算
      复用性强
    ros做什么
      地面移动机器人、旋翼无人机和类人机器人等
    用什么编译
      rosbuild
      catkin
  不得不知的ros
    安装
    账户配置
      1.rosdep update
      2.在用户根目录.bashrc中添加
        source /opt/ros/indigo/setup.bash
      验证
        export | grep ROS
    使用turtlesim小例子
      什么是turtlesim
        仿真器
      启动 turtlesim
        roscore
          节点管理器
        rosrun turtlesim turtlesim_node
          小海龟
        rosrun turtlesim turtle_teleop_key
          控制
    功能包/软件包
      定义
        在 ROS 中，所有软件都被组织为软件包的形式，称为 ROS 软
件包或功能包，有时也简称为包。
      查看和定位
        rospack list
          ros 软件列表清单
        rospack find package-name
          找某个软件包
        查看软件包
          rosls package-name
            查看
              ls
          roscd package-name
            切换
              cd
    节点管理器
      启动
        roscore
      节点
        ROS程序的运行
实例被称为节点（node）
        理解
          但凡通过rosrun启动的程序都成为节点
        节点列表查看
          rosnode list
        查看节点
          rosnode info node-name
        终止节点
          rosnode kill node-name
      查看节点计算图
        rqt_graph
    话题和消息
      节点之间通信依靠消息
        消息被组织成话题
      传递方式
        发布(publish)消息
        订阅(subscribe)话题
      获取话题列表
        rostopic list
      打印消息内容
        rostopic echo topic-name
      测量发布频率
        rostopic hz topic-name
          每秒发布的消息数量
        rostopic bw topic-name
          每秒发布消息所占的字节量
      查看话题
        rostopic info topic-name
      查看消息类型
        rosmsg show message-type-name
        消息类型中包含域
      用命令行发布消息
        发布
          rostopic pub –r rate-in-hz topic-name message-type message-content
          rostopic pub –r 1 /turtle1/cmd_vel geometry_msgs/Twist ’[2,0,0]’ ’[0,0,0]’
            海龟沿直线前进（X轴）
          rostopic pub –r 1 /turtle1/cmd_vel geometry_msgs/Twist ’[0,0,0]’ ’[0,0,1]’
            绕着z轴旋转
        理解消息类型的命名
  如何编写ros程序
    创建工作区和功能包
    编写程序
      编写程序
      编译
        声明依赖库
          CMakeLists.txt
            find_package(catkin REQUIRED COMPONENTS package-names)
          pakage.xml
            build_depend （编译依赖）
              <build_depend>package-name</build_depend>
            run_depend（运行依赖）
              <run_depend>package-name</run_depend>
        声明可执行文件
          CMakeLists.txt
            add_executable(executable-name source-files)
              想要可执行的文件明
            target_link_libraries(executable-name ${catkin_LIBRARIES})
              库依赖
        编译工作区
          catkin_make 注意是在工作目录
        子主题 4
      执行
        Sourcing setup.bash
          配置环境变量等
        rosrun agitr hello
    发布者程序
    订阅者程序
  日志消息
    什么是日志消息
      ROS_INFO_STREAM所展示的
    严重级别
      DEBUG
      INFO
      WARN
      ERROR
      FATAL
    生成日志消息
      ROS_DEBUG_STREAM(message);
      ROS_INFO_STREAM(message);
      ROS_WARN_STREAM(message);
      ROS_ERROR_STREAM(message);
      ROS_FATAL_STREAM(message);
    查看日志消息
      控制台
      rosout 上的消息
        rostopic echo /rosout
        rqt_console
      日志文件
        查找运行标识码
      清除日志
        rosclean purge
  计算图源命名
    什么是计算图源
      计算图源名称
        节点、 话题、 服务和参数统称为计算图源，而每个计算图源
由一个叫计算图源名称（graph resource name）的短字符串标识。
    全局名称
      组成
        “/”
          全局名称
        斜杠分开的
          命名空间（namespace）
        基本名称（base name）
          描述资源本身的
    相对名称
      缺少全局名称带
有的前斜杠“/”
        如：teleop_turtle、turtlesim、cmd_vel等
      解析相对名称
    私有名称
      特征
        波浪字符（~）开始
      转换成全局名称
    匿名名称
      请求自动分配
  启动文件
    什么是启动文件
      一个脚本
    为什么需要
      同时启动节点管理器（master） 和多个节点
    怎么编写启动文件
      同时启动节点管理器（master） 和多个节点
        agtr包的根目录下
      <launch>
<node
pkg="turtlesim "
type="turtlesim_node"
name="turtlesim "
respawn="true "
/>
...
</launch>
    怎么使用
      roslaunch package-name launch-file-name
    创建启动文件
      存储位置
        launch目录
      根元素
        <launch>
…
<launch>
      启动节点
        <node
pkg=”package-name”
type=”executable-name”
name=”node-name”
/>
      请求复位
        respawn=”true”
          当被次标记的节点退出了，会重启该节点
      必要节点
        required=”true”
          同一根绳上的蚂蚱
    在命名空间内启动节点
    名称重映射（Remapping names）
      创建重映射
        original-name := new-name
          rosrun turtlesim turtlesim_node turtle1/pose:=tim
        通过启动文件的方式
          <remap from=”original-name”to ”new-name”/>
      子主题 2
    包含其他文件
      启动文件中
        <include file=”path-to-launch-file”>
    启动文件的其他元素
      格式
        <include file=”$(find package-name)/launch-file-name”>
      启动参数
        声明
          <arg name=”agr-name”>
      创建组
        how
          <group ns=”namespace”/>
…
</group>
  参数
    通过命令行获取参数
      查看参数列表
        rosparam list
      查询参数
        rosparam get parameter_name
      设置参数
        rosparam set parameter_name parameter_value
    使用 C++获取参数
      void ros::param::set(parameter_name, input_value);
      bool ros::param::get(parameter_name, output_value);
    在启动文件中设置参数
  服务
    用于通信
    服务的专用术语
    从命令行查看和调用服务
      列出所有服务
        rosservice list
      查看服务类型
        rosnode info node-name
      查找提供服务的节点
        rosservice node service-name
      服务数据构成
      查看服务数据类型
        rossrv show service-data-type-name
      从命令行调用服务
        rosservice call service-name request-content
    客户端程序
    服务器程序
  消息录制与回放
    使用rosbag 的工具
    录制与回放包文件
      录制包文件
        rosbag record -O filename.bag topic-names
        rosbag record -a
          记录当前发布的所有话题的消息
      回放包文件
        rosbag play filename.bag
      检查文件包
        rosbag info filename.bag
    启动文件里面的包文件
      录制
        <node
pkg="rosbag"
name="record"
type="record"
args="-O filename.bag topic-names"
/>
      回放
        <node
pkg="rosbag"
name="play"
type="play"
args="filename.bag"
/>