ros教程_ros安装教程 - CSDN
精华内容
参与话题
  • ROS教程,最全最详的中文教程,详细介绍了ROS从安装到详细配置的知识
  • ROS基础教程

    万次阅读 多人点赞 2017-11-07 13:55:35
    ROS教程 一 ROS基础知识

    ROS教程

    这是小弟的学习笔记,有错求请拍,多指教,谢谢

    一 ROS基础知识

    ROS文件系统介绍

    1.功能包集stack

    ROS软件包集合,像Navigation Stack,属于导航软件包集合,包含了与导航有关的软件包,例如地图软件包,路径规划软件包,TF坐标软件包,move_base移动控制软件包等,一整个stack下载后可以任意使用其中的软件包,每个软件包都实现其中一个或者好几个小功能,多个软件包组成集合实现一个完整的大的功能

    http://wiki.ros.org/navigation

    2.软件包package

    ROS程序的单元,每个软件包都包含程序库,可执行文件,脚本。图中列出的learning_joy软件包,包含编译配置文件CMakeLists.txt,include头文件库,launch启动脚本文件夹,package.xml软件包概况描述文件,src程序源码库
    figure1

    软件包文件详解:

    1)编译配置文件CMakeLists.txt, 使用cmake编译时要写的
    2)include头文件库,如果只是使用ROS中附带有的头文件,include这个文件夹可能会是空的,但是系统会自动创建,当以后需要用到自己的头文件或者添加别人的头文件时,把头文件添加到该文件夹里便可正确使用
    3)launch启动脚本文件夹,里边包含了后缀名为launch的启动脚本,功能是一次性启动多个节点,至于什么是节点,以后会详细讲

    figure2

    4)清单文件package.xml,包含软件包的相关信息的描述,包括版本号,开发者信息,各软件包之间的依赖关系
    5)src程序源码库,存放编写的cpp或者python源码文件

    ROS基本框架

    1.节点node

    节点是ROS机器人系统里任何操作的单元,可以理解为每一个节点可以实现一个小功能,一个机器人工程就是由多个节点组成的,节点与节点之间可以相互通信,相互协调完成工作,比如人手臂的运动,运动指令从大脑发出,经过肩膀,手肘,手腕,最后再到手指,触感的信息则是反过来传递,每个关节理解成一个节点,它们之间可能是相互传递消息,也可能是一个发送消息,一个接收消息;通常,我们在编程的时候就是编写一个个节点

    2.话题topic

    话题是ROS里的一个通信方法,topic里包含了消息的名称,类型,内容,节点可以发布或者订阅某个或某几个话题,以此达到传递的目的;话题有两个重要的性质:a.话题的发布频率;b.话题的消息类型

    3.发布者和订阅者publisher & subscriber

    ROS里的节点node可能是发布者或者是订阅者,甚至两者都兼备,发布者就是发布topic的节点,订阅者就是订阅topic的节点,发布者以一定的消息类型格式在ROS服务器上发布消息,订阅者则根据话题名称在服务器上订阅消息,消息类型在ROSwiki上有详细定义
    http://wiki.ros.org/std_msgs

    还有一些常用软件包内需要的消息类型,如:
    

    common_msgs 查看各类消息类型
    geometry_msgs 运动几何学相关的消息类型,包括速度,加速度等
    sensor_msgs 传感器相关的消息类型,包括激光雷达,点云,IMU惯性测量单元,JoySticks遥控手柄,图像等

    4.理解ROS的通信流程

    1. master 节点,管理所有的节点,每个节点都需要先向 master 节点注册, master 节点会让发布者和订阅
      者进行匹配;所以每次启动ROS时,都需要先打开master节点
      kevin@kevin-Laptop:~$ roscore
    2. 发布者和订阅者之间通过话题来通信时,信息不通过 master
    3. 发布者发布一个话题,订阅者进行订阅
    4. 流程:
      1 )订阅者发送建立链接请求
      2 )发布者进行反馈,确认链接
      3 )订阅者请求 topic 的数据
      4 )发布者发送 topic 数据

    创建和编译 ROS 软件包

    1.创建软件包

    1)创建工作空间

    在编写任何ROS程序之前,都应该先建立一个工作空间workspace,因为使用catkin环境,所以一般网上很多教程都会将工作空间命名为catkin_ws,但其实可以任意命名,工作空间就是一个在~/home目录下的文件夹。工作空间下是存放软件包的,所以一般而言,工作空间不需要创建太多,除非某个工程特别庞大,才需要为它独立创建工作空间

    创建工作空间目录:~$ mkdir -p catkin_ws/src

    这里写图片描述

    查看文件夹目录:tree catkin_ws/

    编译软件包命令:~/catkin_ws$ catkin_make

    即使没有源码文件,工作空间也是可以通过编译的,编译命令要在工作空间文件夹目录下执行,系统会自动生成build文件夹和devel文件夹,devel文件夹内的文件与引导路径有关系,没有source配置正确的环境变量路径,即使catkin_make编译通过,ROS也无法正确识别通过编译的节点

    在工作空间目录下执行source命令:~/catkin_ws$ source devel/setup.bash

    但这个命令只能在该终端内source到正确的环境变量,每次新打开一个终端,仍需要再次配置,可以修改整个环境:
    $ gedit ~/.bashrc
    把编辑文本拉到最后,添加:
    source ~/catkin_ws/devel/setup.bash
    就是添加工作空间下的/devel/setup.bash文件的路径,让终端每次打开时,都会自动执行source命令
    配置完成后,按ctrl+alt+T打开终端,如果配置不正确,终端会提示找不到路径
    这里写图片描述

    2)创建软件包

    软件包一般在工作空间的src文件夹下创建,否在ROS可能无法定位你的软件包,命名要避免与ROS的操作指令重复,不能以数字或者符号开头,并且不允许大写字母
    创建软件包命令:
    格式: catkin_create_pkg pkg_name pkg_depends
    例子: catkin_create_pkg testing_pkg roscpp rospy std_msgs

    1. pkg_name是对软件包的命名;
    2. pkg_depends是软件包的依赖关系,如roscpp,rospy,std_msgs;软件包的依赖关系类似依赖某个源代码或者头文件
    3. 依赖关系分为一级依赖和间接依赖,一级依赖是我们在创建软件包过程中添加的依赖项,间接依赖是各依赖项之间的关系,
      $ rospack depends1 pkg_name 查看一级依赖关系
      $ rospack depends pkg_name 查看所有的依赖关系
    3)删除软件包

    软件包删除命令:$ rm -rf 文件夹名称
    再重新编译

    2.编写测试代码步骤

    1)先进入软件包目录下的src文件夹 $ cd catkin_ws/src/testing_pkg/src/
    2)打开编辑器编写cpp或者python源码

    $ gedit talker.cpp $ gedit listener.cpp
    如果没有gedit编辑器,系统会提示安装gedit $ sudo apt-get install gedit

    3)修改编译配置文件
    4)返回工作空间目录,编译代码 $ catkin_make

    3.编写发布者代码

    1)简单的发布者代码,发布者代码基本都是这个框架
    #include "ros/ros.h"//ROS程序必备的头文件
    #include "std_msgs/String.h"//传递的消息类型
    #include "sstream"
    
    int main(int argc, char **argv)//写ROS程序需要加argc,argv,因为init需要传这两个参数
    {
      ros::init(argc, argv, "talker");//初始化ros,向master注册一个叫“talker”的节点
    
      ros::NodeHandle n;//初始化一个句柄,就是将ROS实例化
    
      ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
      //发布者注册一个叫“chatter”的话题,<消息类型>,1000是消息队列大小
      //消息队列相当于缓存消息,如果处理速度不够快的话消息会被保存在队列中
    
      ros::Rate loop_rate(10);//执行循环的速率,可以理解为发布消息的频率,单位是Hz
    
      int count = 0;
      while (ros::ok())//ros::ok()函数用来判断master节点是否正常
      {
        std_msgs::String msg;//声明变量
    
        std::stringstream ss;
        ss << "hello world " << count;
        msg.data = ss.str();
    
        ROS_INFO("%s", msg.data.c_str());//ROS_INFO()可以在终端打印数据
    
        chatter_pub.publish(msg);//发布该消息
    
        ros::spinOnce();//动作执行一次
        //ros::spin()是循环执行,在没有while的时候使用
    
        loop_rate.sleep();//相当于delay函数,因为程序可能不需要0.1s,就是10Hz的频率就可以发送完成,所以sleep()函数可以让程序暂停一会,让消息的发送频率符合10Hz
      }
      return 0;
    }

    wiki.ros.org/PublisherSubscriber

    4.编写订阅者代码

    1)简单的订阅者代码
    #include "ros/ros.h"
    #include "std_msgs/String.h"//要和订阅的消息类型所匹配
    
    void chatterCallback(const std_msgs::String::ConstPtr& msg)//回调函数
    {
      ROS_INFO("I heard: [%s]", msg->data.c_str());
    }
    
    int main(int argc, char **argv)
    {
      ros::init(argc, argv, "listener");//初始化ros,向master注册一个叫“listener”的节点
    
      ros::NodeHandle n;
    
      ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
      //订阅者向master注册自己需要订阅的话题"chatter",消息队列大小是1000,chatterCallback是回调函数
      //回调函数的意义是,当订阅者从自己所订阅的话题上接收到消息,回调函数自动执行
    
      ros::spin();//因为不在while循环体中,所以它要不断执行,而不是用spinOnce(),只执行一次
    
      return 0;
    }

    wiki.ros.org/PublisherSubscriber

    5.修改CMakeLists.txt文件

    1. ctrl+F找到关键字 ## Declare a C++ executable
    2. 去掉#注释项add_executable(${PROJECT_NAME}_node src/test_pkg_node.cpp),将test_pkg_node.cpp修改成自己所要编译的cpp文件,如果有多个cpp文件需要编译(一个软件包内可能存在多个节点),则多添加add_executable语句
    3. 找到关键字target_link_libraries,将注释去掉,如果有特别需要添加的依赖库,可以在这里添加,一般的编译过程不需要,因为ROS里已经揉合了很多第三方库,例如OpenCV
    4. 每一个软件包都要配置自己的CMakeLists.txt文件

    6.运行节点

    1)先运行master节点 $ roscore
    2)运行节点

    格式:$ rosrun your_pkg_name your_node_name
    例子:$ rosrun testing_pkg talker rosrun testing_pkg listener

    3)如果不记得节点名或者软件包名称,可以按Tab键补全,但一定要记得先source正确的环境变量

    7.编写launch文件(可选)

    1)launch文件是xml格式的脚本,我们把需要启动的节点信息写进去,launch脚本会自动帮我们运行需要的节点,而不需要手动逐个开启
    2)launch脚本开启节点的顺序是不确定的,这也是ROS节点编写的一个理念,尽可能让节点之间的耦合性降低,节点尽可能地独立完成某项工作
    3)进入软件包文件夹目录 $ cd catkin_ws/src/testing_pkg/
    4)创建launch文件夹 $ mkdir -p launch
    5)进入launch文件夹 $ cd launch
    6)新建launch文件 $ gedit testing_pkg.launch
    7)编写launch文件
    语法格式
    每个 xml 文件都包含根元素,根元素由 launch 标签来定义
    <launch>// 开始标签
    <node pkg=”package_name” type=”executable_name” name=”node_name” output=“screen”/>
    //type填写的是与CMakeLists.txt中add_executable修改的test_pkg_node.cpp名称一致
    ...
    </launch>// 结束标签,结束标签都多一个 /
    简单的launch文件
    <launch>
    <node pkg="testing_pkg" type="talker" name="talker" output="screen"/>
    <node pkg="testing_pkg" type="listener" name="listener" output="screen"/>
    </launch>
    8)注意
    1. launch 文件中,启动节点的时候给 node 重新指定了名称,会覆盖掉在源码文件中通过 ros::init 赋予节点的名称,所以在使用launch启动时要留意被修改的节点名
    2. 如果 output 没有定义到 screen ,节点的输出信息会在 log 日志文件下保存,查看方式:
      $ ~/.ros/log/run_id/node_name-number-stour.log

    拓展:jason来自星星的博客教程

    8.通过launch文件启动节点

    1)

    格式:$ roslaunch pkg_name launch_name
    例子:$ roslaunch testing_pkg testing_pkg.launch

    ROS基础工具

    1.rqt_graph

    1)通过直观的图谱来查看当前正在运行的节点之间的关系
    2)$ rosrun rqt_graph rqt_graph

    这里写图片描述

    3)graph图谱会列出节点,话题等信息

    2.rqt_robot_steering

    1)rqt_robot_steering是与机器人运动控制的密切相关的ROS工具,它相当于一个节点,可以发布/cmd_vel类型的消息,/cmd_vel类消息包括了机器人直线运动和转向运动的控制指令,通过滑动条可以十分方便地控制机器人运动
    2)$ rosrun rqt_robot_steering rqt_robot_steering

    这里写图片描述

    Twist&/cmd_vel

    3.rviz

    1)rviz是一款2D&3D的数据可视化软件,提供了丰富的ROS接口,可以建立机器人运动模型,激光雷达地图等,并且进行仿真验证
    2)rosrun rviz rviz

    4.rqt_logger_level

    1)ROS的一个log日志查看器,用于检查每个节点的日志信息,比如说什么时候哪个节点作出了更改,都会记录在log日志下
    2)$ rosrun rqt_logger_level rqt_logger_level

    这里写图片描述

    3)log消息等级划分,从Debug到Fatal越来越严重

    5.rqt_console

    1)用来查看节点输出信息,因为有很多消息并未通过ROS_INFO()函数在终端显示出来,可以通过console查看是否有正确输出
    2)rosrun rqt_console rqt_console

    这里写图片描述

    6.ROS文件系统工具

    1)rospack 获取软件包相关信息,类似一个 find 的命令,只需要知道软件包的名称即可
    1. rospack help 查看 rospack 相关功能的命令
    2. rospack list 列出当前系统中安装了的软件包名称和路径信息
    3. rospack list-names 只查看软件包名称
    4. rospack list-names | wc -l 统计有多少个软件包,| 是一个符号,表示上一个命令的结果是下一个命令的输入
    5. rospack find [package_name] 查询软件包的路径信息
    2)roscd 软件包名
    直接切换工作目录到某个软件包中
    3)rosls 软件包名
    直接罗列该软件包的目录结构
    4)rosed 软件包 可编辑文件名
    直接编辑某个软件包的可编辑文件
    5)roscp 软件包名 需要复制的文件名
    直接把某个软件包下的文件复制到当前的命令行目录下
    展开全文
  • ROS入门教程(一)

    万次阅读 热门讨论 2018-11-04 22:09:01
    参考自:http://wiki.ros.org/ROS/Tutorials Core ROS 教程(新手) ...安装ROS: 详见ROS安装教程 1.1 管理ROS环境 确保ROS环境变量已被设置 printenv | grep ROS #输出如下 linux@linux:~$ p...

    本文为原创博客, 转载请注明出处:https://blog.csdn.net/q_z_r_s

    机器感知
    一个专注于SLAM、三维重建、机器视觉等相关技术文章分享的公众号
    公众号:机器感知

    开源地址:点击该链接


    参考自:http://wiki.ros.org/ROS/Tutorials
    【Beginner Level】ROS入门教程(一)
    【Beginner Level】ROS入门教程(二)
    【Beginner Level】ROS入门教程(三)
    【Beginner Level】ROS入门教程(四)
    【Beginner Level】ROS入门教程(五)

    Core ROS 教程(新手)

    1. 安装和配置ROS环境

    安装ROS: 详见ROS安装教程

    1.1 管理ROS环境

    确保ROS环境变量已被设置

    printenv | grep ROS
    #输出如下
    linux@linux:~$ printenv | grep ROS
    ROS_ROOT=/opt/ros/indigo/share/ros
    ROS_PACKAGE_PATH=/opt/ros/indigo/share:/opt/ros/indigo/stacks
    ROS_MASTER_URI=http://localhost:11311
    ROSLISP_PACKAGE_DIRECTORIES=
    ROS_DISTRO=indigo
    ROS_ETC_DIR=/opt/ros/indigo/etc/ros
    
    1.2 创建ROS工作空间

    关于catkin和rosbuild的选择

    ROS Indigo发布于2014年, ROS Groovy发布于2012, 根据官网说明, ROS Groovy及其之后的版本使用catkin, ROS Fuerte及更老的版本使用rosbuild, 因此, 我这里使用catkin

    $ mkdir -p ~/catkin_ws/src
    $ cd ~/catkin_ws/
    $ catkin_make
    

    在工作空间中首次运行catkin_make命令后, 它会在./src目录下创建一个CMakeLists.txt.

    linux@linux:~/catkin_ws$ ls
    build  devel  src
    

    devel文件夹中, 有几个setup.*sh的文件, source任何一个, 都将覆盖工作空间顶层环境

    $ source devel/setup.bash
    

    输入以下命令, 确保ROS_PACKAGE_PATH环境变量包含了当前路径

    $ echo $ROS_PACKAGE_PATH
    /home/youruser/catkin_ws/src:/opt/ros/kinetic/share
    #自己添加的, 非官网
    linux@linux:~/catkin_ws$ printenv | grep ROS
    ROS_ROOT=/opt/ros/indigo/share/ros
    ROS_PACKAGE_PATH=/home/linux/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks
    ROS_MASTER_URI=http://localhost:11311
    ROSLISP_PACKAGE_DIRECTORIES=/home/linux/catkin_ws/devel/share/common-lisp
    ROS_DISTRO=indigo
    ROS_ETC_DIR=/opt/ros/indigo/etc/ros
    

    通过对比, 仅有ROS_PACKAGE_PATHROSLISP_PACKAGE_DIRECTORIES发生了变化

    2. ROS文件系统
    2.1 安装ros-indigo-ros-turorials(安装ROS时已经安装过了)
    sudo apt-get install ros-indigo-ros-tutorials
    
    2.2 文件系统概念
    • Packages: Packages是ROS代码的软件单元的一种组织方式, 每个Package可以包含库, 可执行程序, 脚本等.
    • Manifests(package.xml): manifest(中文: 清单)是一个package的描述文件. 它定义了包之间的依赖, 并用来捕获包的元信息(meta information, 元数据是关于数据的组织、数据域及其关系的信息,简言之,元数据就是关于数据的数据。), 例如版本, 维护者, 证书等等.
    2.3 文件系统工具

    ROS代码分布于很多packages中, 使用诸如lscd这样命令行来进行文件导航是及其繁琐乏味的, 因此ROS提供了相关的工具来使用

    • 使用rospack

      rospack可以获得有关packages的信息, 此处展示find命令, 帮助命令为rospack help

      linux@linux:~/catkin_ws$ rospack find roscpp
      /opt/ros/indigo/share/roscpp
      
    • 使用roscd

      roscd是rosbash的一部分, 此命令可以让你直接把目录改变到一个package中或一个stack中

      #语法, 可以直接进入某个package文件夹中
      roscd [locationname[/subdir]]
      linux@linux:~/catkin_ws$ roscd roscpp
      linux@linux:/opt/ros/indigo/share/roscpp$ pwd
      /opt/ros/indigo/share/roscpp
      

      注: 和其他ROS工具类似, roscd只寻找ROS_PACKAGE_PATH所列出路径, 其中的每个路径用:来分隔.

    • roscd log

      此命令会进入ROS存储log的文件夹, 如果执行此命令之前名优运行过ROS程序, 此命令会报错, 找不到此文件夹.

      linux@linux:/opt/ros/indigo/share/roscpp$ roscd log
      No active roscore
      bash: cd: /home/linux/.ros/log: 没有那个文件或目录
      
    • 使用rosls

      rosls与roscd类似, 不多介绍.

    • Tab补全

      rosls, roscd, TAB都与Linux shell提供了同样的功能, 不多介绍

    2.4 总结
    • rospack = ros + pack(age)
    • roscd = ros + cd
    • rosls = ros + ls

    此类书写风格在ROS工具中很常用.

    3. 创建ROS Package

    此章节使用roscreate-pkgcatkin创建一个新的package, 并用rospack列出包的的依赖关系.

    3.1 一个catkin package的组成
    • 必须包含一个catkin兼容的package.xml文件

    • 必须包含一个使用catkin的CMakeLists.txt

    • 每个package必须有自己的文件夹: 这意味着没有嵌套的包,也没有共享同一目录的多个包.

      最简单的package如下:

      my_package/
      	CMakeLists.txt
      	package.xml
      
    3.2 catkin工作空间中的package

    使用catkin packages工作的推荐方式是使用catkin工作空间, 当然也可以单独建立一个catkin package. 一个普通的工作空间大概如下:

    workspace_folder/        -- WORKSPACE
      src/                   -- SOURCE SPACE
        CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
        package_1/
          CMakeLists.txt     -- CMakeLists.txt file for package_1
          package.xml        -- Package manifest for package_1
        ...
        package_n/
          CMakeLists.txt     -- CMakeLists.txt file for package_n
          package.xml        -- Package manifest for package_n
    
    3.3 创建一个catkin Package
    • 创建工作空间的方法见: 1.2 创建ROS工作空间

    • catkin_create_pkg <package_name> [depend1][depend2] [depend3]

      $ cd ~/catkin_ws/src
      $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
      
    3.4 编译catkin工作空间并source
    $ cd ~/catkin_ws
    $ catkin_make
    $ . ~/catkin_ws/devel/setup.bash
    
    3.5 package依赖
    • 一级依赖: $ rospack depends1 beginner_tutorials

      此命令的输出与穿件package时传入的参数一致, 这些对packages的依赖存储在package.xml中.

    • 间接依赖: $ rospack depends1 rospy

      大多数情况下, 一个依赖项都会有它自己的依赖. rospack可以递归检测所有的嵌套依赖.

    3.6 定制Package
    • 定制package.xml

      包括description, maintainer, license, dependencies(包括了buildtool_depend, build_depend, exec_depend)

    • 定制CMakeLists.txt

    4. 编译ROS Package
    4.1 编译Packages
    • catkin_make可以看做是组合调用了标准Cmake工作流: cmake, make

      # In a CMake project
      $ mkdir build
      $ cd build
      $ cmake ..
      $ make
      $ make install  # (optionally)
      # In a catkin workspace
      $ catkin_make
      $ catkin_make install  # (optionally)
      

      catkin_make命令将编译src目录下的所有工程. 对于源码不在当前目录下的使用方法为:

      # In a catkin workspace
      $ catkin_make --source my_src
      $ catkin_make install --source my_src  # (optionally)
      
    • 编译Package

      在当前工作空间中(~/catkin_ws/): catkin_make.

    5. ROS Nodes

    本节引入ROS graph的概念, 并探讨roscore, rosnode, rosrun的使用.

    5.1 Graph概念概览
    • Nodes: 一个node表示一个使用ROS来与其他nodes进行通信的可执行程序.
    • Messages: ROS数据类型.
    • Topics: Nodes可以向topic发布消息,也可以订阅topic来接收消息.
    • Master: Name service for ROS(即帮助节点找到彼此).
    • rosout: ROS下的stdout/stderr.
    • roscore: Master + rosout + parameter server
    5.2 Nodes

    在ROS package中, 一个node实际上只不过是一个可执行文件. ROS nodes使用ROS client library与其他nodes进行通信. Nodes可以发布和订阅一个Topic. Nodes也可以提供或使用一个Service.

    5.3 Client Libraries

    ROS client library允许使用不同编程语言写出来的nodes进行通信

    • rospy = python client library
    • roscpp = c++ client library
    5.4 roscore

    roscore是当你使用ROS时第一个应该运行的东西

    5.5 使用rosnode

    rosnode显示当前正在运行的有关ROS nodes的信息

    #列出活跃状态的nodes
    $ rosnode list
    #显示有关指定node的信息
    $ rosnode info /rosout
    
    5.6 使用rosrun

    rosrun允许使用package名来直接运行一个package中的node(不用非得知道package的路径).

    #Usage:
    $ rosrun [package_name] [node_name]
    #run the turtlesim_node in the turtlesim package
    $ rosrun turtlesim turtlesim_node
    

    ROS支持为node重新指定名字

    $ rosrun turtlesim turtlesim_node __name:=my_turtle
    linux@linux:~$ rosnode list
    /my_turtle
    /rosout
    

    可以使用$ rosnode ping my_turtle来测试是否真的跑起来了.

    5.7 总结
    • roscore = ros + core: master(prodives name service for ROS) + rosout(stdout/stderr) + parameter server.
    • rosnode = ros + node: ROS tool to get information about a node.
    • rosrun = ros + run: runs a node from a given package.
    6. ROS Topics

    本节引入ROS topics, 与此同时使用rostopic和rqt_plot工具.

    6.1 准备工作
    • 确保roscore在运行, 在一个新打开终端输入roscore可进行测试
    • 运行$ rosrun turtlesim turtlesim_node
    • 运行$ rosrun turtlesim turtle_teleop_key, 使用方向键控制turtle移动
    6.2 ROS Topics
    • 使用rqt-graph

      rqt-graph创建系统的一个动态图. rtq-graphrqt package的一部分, 安装方法如下:

      $ sudo apt-get install ros-<distro>-rqt
      $ sudo apt-get install ros-<distro>-rqt-common-plugins
      

      在新终端中输入:$ rosrun rqt_graph rqt_graph会出现一个可视化窗口, 显示nodes之间的关系.

    • 引入rostopic

      rostopic工具用来获取ROS topics.

    • 使用rostopic echo

      rostopic echo显示发布在一个topic上的数据, 只有在运行之后有新的消息发布到topic上时才会有输出.

      #Usage:
      $ rostopic echo [topic]
      $ rostopic echo /turtle1/cmd_vel
      
    • 使用rostopic list

      使用$ rostopic list -v列出所有的topics

    6.3 ROS Messages

    topics上的通信是通过在nodes之间发送ROS messages进行的. 发布者和订阅者必须发送和接收同种类型的消息. 这意味着, topic的类型是由发布在其上的message类型定义的. message的类型可通过rostopic type [topic]来查询. 可以使用rosmsg show type查看信息格式.

    6.4 rostopic续
    • rostopic pub可以在一个topic上发布数据

      #Usage:
      $ rostopic pub [topic] [msg_type] [args]
      #双短线表示后边的不是命令选项
      $ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
      
    • rostopic hz报告数据发布速率: $ rostopic hz [topic]

    6.5 使用rqt_plot

    使用指令: $ rosrun rqt_plot rqt_plot, 添加需要查看的topic即可.

    7. ROS Services and Parameters

    本节介绍ROS Services and Parameters, 与此同时使用rosservice和rosparam命令行工具. Services是nodes间进行通信的另一种方式, Services允许nodes发送一个请求(request和接收一个响应(response).

    #Usage:
    rosservice list [topic]#列出[topic]所提供的服务
    rosservice type [service]#显示服务类型
    rosservice call [service] [args]#调用服务
    #查看带参数的示例
    rosservice find #find services by service type
    rosservice uri #print service ROSRPC uri
    $ rosservice type /spawn | rossrv show
        float32 x
        float32 y
        float32 theta
        string name
        ---
        string name
    $ rosservice call /spawn 2 2 0.2 ""#name field is optional
    	name: turtle2
    

    rosparam循序我们存储和操作ROS Parameter Server上的数据, Parameter Server可以存储整型, 浮点型, 布尔型, 字典, 列表. rosparam使用YAML标记语言语法.

    #Usage:
    rosparam set [param_name] #set parameter
    #设置参数之后使用/clear服务刷新操作
    $ rosservice call /clear
    rosparam get [param_name] #get parameter
    rosparam load #load parameters from file
    rosparam dump #dump parameters to file
    rosparam delete #delete parameter
    rosparam list #list parameter names
    
    #Usage:
    rosparam dump [file_name] [namespace]
    rosparam load [file_name] [namespace]
    #write all the parameters to the file params.yaml 
    $ rosparam dump params.yaml
    # load these yaml files into new namespaces, e.g. copy
    $ rosparam load params.yaml copy
    $ rosparam get /copy/background_b
    
    展开全文
  • 本书的上一本ros入门实例就是我们实验室的黄金入门宝典,进来的新人一开始就是wiki上的ros教程和ros by example跑一遍。某天在ros暑期学校的群里翻群文件发现有人发了ros by example第二册的电子版(英文的)才知道...
  • ROS基本操作(新手必看教程)

    千次阅读 2019-07-08 09:41:20
    1. 创建 ROS 工作空间 启动 ROS $ roscore 创建工作环境 $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src $ catkin_init_workspace 编译 ROS 程序 $ cd ~/catkin_ws $ catkin_make 添加程序包到...

    1. 创建 ROS 工作空间

    启动 ROS

    $ roscore
    

    创建工作环境

    $ mkdir -p ~/catkin_ws/src
    $ cd ~/catkin_ws/src
    $ catkin_init_workspace
    

    编译 ROS 程序

    $ cd ~/catkin_ws
    $ catkin_make
    

    添加程序包到全局路径

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

    2.ROS执行命令

    命令 重要度 命令释义 详细说明
    roscore ★★★ ros+core master(ROS名称服务) + rosout(日志记录) + parameter server(参数管理)
    rosrun ★★★ ros+run 运行节点
    roslaunch ★★★ ros+launch 运行多个节点及设置运行选项
    rosclean ★★☆ ros+clean 检查或删除ROS日志文件
    

    3.ROS信息命令

    命令 重要度 命令释义 详细说明
    rostopic ★★★ ros+topic 确认ROS话题信息
    rosservice ★★★ ros+service 确认ROS服务信息
    rosnode ★★★ ros+node 确认ROS节点信息
    rosparam ★★★ ros+param(parameter) 确认和修改ROS参数信息
    rosbag ★★★ ros+bag 记录和回放ROS消息
    rosmsg ★★☆ ros+msg 显示ROS消息类型
    rossrv ★★☆ ros+srv 显示ROS服务类型
    rosversion ★☆☆ ros+version 显示ROS功能包的版本信息
    roswtf ☆☆☆ ros+wtf 检查ROS系统
    
    

    4.ROS catkin命令

    命令 重要度 详细说明
    catkin_create_pkg ★★★ 自动生成功能包
    catkin_make ★★★ 基于catkin构建系统的构建
    catkin_eclipse ★★☆ 对于用catkin构建系统生成的功能包进行修改,使其能在
    Eclipse环境中使用
    catkin_prepare_release ★★☆ 发布时用到的日志整理和版本标记
    catkin_generate_changelog ★★☆ 在发布时生成或更新CHANGELOG.rst文件
    catkin_init_workspace ★★☆ 初始化catkin构建系统的工作目录
    catkin_find ★☆☆ 搜索catkin
    
    

    5.ROS功能包命令

    命令 重要度 命令释义 详细说明
    rospack ★★★ ros+pack(age) 查看与ROS功能包相关的信息
    rosinstall ★★☆ ros+install 安装ROS附加功能包
    rosdep ★★☆ ros+dep(endencies) 安装该功能包的依赖性文件
    roslocate ☆☆☆ ros+locate ROS功能包信息相关命令
    roscreate-pkg ☆☆☆ ros+create-pkg 自动生成ROS功能包(用于旧的rosbuild系统)
    rosmake ☆☆☆ ros+make 构建 ROS功能包(用于旧的rosbuild系统)
    
    

    6.ROS节点操作命令

    命令 详细说明
    rosnode list 查看活动的节点列表
    rosnode ping [节点名称] 与指定的节点进行连接测试
    rosnode info [节点名称] 查看指定节点的信息
    rosnode machine [PC名称或IP] 查看该PC中运行的节点列表
    rosnode kill [节点名称] 停止指定节点的运行
    rosnode cleanup 删除失连节点的注册信息
    
    

    7.rostopic: ROS话题

    命令 详细说明
    rostopic list 显示活动的话题目录
    rostopic echo [话题名称] 实时显示指定话题的消息内容
    rostopic find [类型名称] 显示使用指定类型的消息的话题
    rostopic type [话题名称] 显示指定话题的消息类型
    rostopic bw [话题名称] 显示指定话题的消息带宽(bandwidth)
    rostopic hz [话题名称] 显示指定话题的消息数据发布周期
    rostopic info [话题名称] 显示指定话题的信息
    rostopic pub [话题名称] [消息类型] [参数] 用指定的话题名称发布消息
    
    

    8.rosservice:ROS服务

    命令 详细说明
    rosservice list 显示活动的服务信息
    rosservice info [服务名称] 显示指定服务的信息
    rosservice type [服务名称] 显示服务类型
    rosservice find [服务类型] 查找指定服务类型的服务
    rosservice uri [服务名称] 显示ROSRPC URI服务
    rosservice args [服务名称] 显示服务参数
    rosservice call [服务名称] [参数] 用输入的参数请求服务
    
    

    9.rosparam:ROS参数

    命令 详细说明
    rosparam list 查看参数列表
    rosparam get [参数名称] 获取参数值
    rosparam set [参数名称] 设置参数值
    rosparam dump [文件名称] 将参数保存到指定文件
    rosparam load [文件名称] 获取保存在指定文件中的参数
    rosparam delete [参数名称] 删除参数
    
    

    10.rosmsg: ROS消息信息

    命令 详细说明
    rosmsg list 显示所有消息
    rosmsg show [消息名称] 显示指定消息
    rosmsg md5 [消息名称] 显示md5sum
    rosmsg package [功能包名称] 显示用于指定功能包的所有消息
    rosmsg packages 显示使用消息的所有功能包
    
    

    11.rossrv:ROS服务信息

    命令 详细说明
    rossrv list 显示所有服务
    rossrv show [服务名称] 显示指定的服务信息
    rossrv md5 [服务名称] 显示md5sum
    rossrv package [功能包名称] 显示指定的功能包中用到的所有服务
    rossrv packages 显示使用服务的所有功能包
    
    

    12.rosbag:ROS日志信息

    命令 详细说明
    rosbag record [选项] [话题名称] 将指定话题的消息记录到bag文件
    rosbag info [文件名称] 查看bag文件的信息
    rosbag play [文件名称] 回放指定的bag文件
    rosbag compress [文件名称] 压缩指定的bag文件
    rosbag decompress [文件名称] 解压指定的bag文件
    rosbag filter [输入文件] [输出文件] [选项] 生成一个删除了指定内容的新的bag文件
    rosbag reindex bag [文件名称] 刷新索引
    rosbag check bag [文件名称] 检查指定的bag文件是否能在当前系统中回放
    rosbag fix [输入文件] [输出文件] [选项] 将由于版本不同而无法回放的bag文件修改成可以回放的文件
    
    

    13.ROS catkin命令

    命令 重要度 详细说明
    catkin_create_pkg ★★★ 自动生成功能包
    catkin_make ★★★ 基于catkin 构建系统的构建
    catkin_eclipse ★★☆ 把用catkin 构建系统生成的功能包修改,使得可以在Eclipse
    环境中使用
    catkin_prepare_release ★★☆ 发布时用到的日志整理和版本标记
    catkin_generate_changelog ★★☆ 发布时生成或更新CHANGELOG.rst文件
    catkin_init_workspace ★★☆ 初始化catkin 构建系统的工作目录
    catkin_find ★☆☆ 搜索catkin
    
    

    14.ROS功能包命令

    命令 重要度 命令释义 详细说明
    rospack ★★★ ros+pack(age) 显示与ROS功能包相关的信息
    rosinstall ★★☆ ros+install 安装ROS附加功能包
    rosdep ★★☆ ros+dep(endencies) 安装该功能包的依赖性文件
    roslocate ☆☆☆ ros+locate 与ROS功能包信息有关的命令
    roscreate-pkg ☆☆☆ ros+create-pkg 自动生成ROS功能包(用于旧的rosbuild系统)
    rosmake ☆☆☆ ros+make 构建ROS功能包(用于旧的rosbuild系统)
    
    

    15…Package 相关操作

    创建 Package 并编译

    $ cd ~/catkin_ws/src
    $ catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
    $ cd ~/catkin_ws
    $ catkin_make
    
    

    查找 Package

    $ rospack find [package name]
    

    查看 Package 依赖

    $ rospack depends <package_name>
    $ rospack depends1 <package_name>
    

    16… Node 相关操作

    查看所有正在运行的 Node

    $ rosnode list
    

    查看某节点信息

    $ rosnode info [node_name]
    

    运行 Node

    $ rosrun [package_name] [node_name] [__name:=new_name]
    

    17.Topic 相关操作

    查看 rostopic 所有操作

    $ rostopic -h
    

    查看所有 Topic 列表

    $ rostopic list
    

    图形化显示 topic

    $ rosrun rqt_graph rqt_graph
    $ rosrun rqt_plot rqt_plot
    

    查看某个 Topic 信息

    $ rostopic echo [topic]
    

    查看 Topic 消息格式

    $ rostopic type [topic]
    $ rosmsg show [msg_type]
    

    向topic发布消息

    $ rostopic pub [-1] <topic> <msg_type> [-r 1] -- [args] [args]
    

    18…Service 相关操作

    查看所以service操作

    $ rosservice -h
    

    查看 service 列表

    $ rosservice list
    

    调用 service

    $ rosservice call [service] [args]
    

    查看 service 格式并显示数据

    $ rosservice type [service] | rossrv show
    

    设置service parameter

    $ rosparam set [parame_name] [args] + rosservice call clear
    

    获得parameter

    $ rosparam get [parame_name]
    

    加载parameter

    $ rosparam load [file_name] [namespace]
    

    删除parameter

    $ rosparam delete
    

    19.Bag 相关操作

    录制所有topic变化

    $ rosbag record -a
    

    记录某些topic

    $ rosbag record -O subset <topic1> <topic2>
    

    查看bag信息

    $ rosbag info <bagfile_name>
    

    回放

    $ rosbag play (-r 2) <bagfile_name>
    

    20.ROS调试常用命令**

    catkin_create_pkg

    package_name为创建的程序包名,[depend1] [depend2] [depend3]为依赖的其它程序包:

    #catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
    
    rosnode

    输出节点相关信息。

    Commands:
        rosnode ping       test connectivity to node
        rosnode list       获取运行节点列表
        rosnode info       获取特定节点的信息
        rosnode machine    list nodes running on a particular machine or list machines
        rosnode kill       终止节点
        rosnode cleanup    清除以终止的结点
    
    
    rosrun

    rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)

    rqt_graph

    ROS 系统中查看节点之间的发布-订阅关系,椭圆形表示节点,有向边表示其两端节点间的发布-订阅关系。注意rqt_graph本身就是一个节点。

    $ rosrun rqt_graph rqt_graph
    
    rostopic

    rostopic命令工具能让你获取有关ROS话题的信息。

    Commands:
        rostopic bw            测量消息发布所占用的带宽   
        rostopic delay         display delay of topic from timestamp in header
        rostopic echo          查看某个话题上发布的消息
        rostopic find          find topics by type
        rostopic hz            测量消息发布的频率
        rostopic info          获取更多关于话题的信息
        rostopic list          获取当前活跃的话题
        rostopic pub           publish data to topic
        rostopic type          print topic type
    
    
    rosservice

    ROS服务相关信息。

    Commands:
        rosservice args        输出服务器参数
        rosservice call        调用带参数的服务
        rosservice find        依据类型寻找服务
        rosservice info        输出服务的信息
        rosservice list        输出可用服务的信息
        rosservice type        输出服务类型
        rosservice uri         输出服务的
    
    
    rosparam

    通过rosparam存储并操作ROS 参数服务器(Parameter Server)上的数据。

    Commands:
        rosparam set            设置参数
        rosparam get            获取参数
        rosparam load           从文件读取参数
        rosparam dump           向文件中写入参数
        rosparam delete         删除参数
        rosparam list           列出参数名
    
    
    rosed

    rosed编辑ROS中的文件

    $ rosed [package_name] [filename]
    
    rosmsg

    输出ROS Message相关信息。

    Commands:
        rosmsg show        查看某种消息类型的详情
        rosmsg list        List all messages
        rosmsg md5         Display message md5sum
        rosmsg package     List messages in a package
        rosmsg packages    List packages that contain messages
    
    展开全文
  • ROS教程—安装篇

    万次阅读 2018-05-14 19:04:14
    一、 版本选择上一篇讲过,Ros系统是依赖于linux的次操作系统。所以在装ROS系统前需要一个合适的linux系统。Linux操作系统是基于UNIX操作系统发展而来的一种克隆系统,主流版本为Ubuntu、Linux Mint、openSUSE、...


    一、  版本选择

    上一篇讲过,Ros系统是依赖于linux的次操作系统。所以在装ROS系统前需要一个合适的linux系统。

    Linux操作系统是基于UNIX操作系统发展而来的一种克隆系统,主流版本为Ubuntu、Linux Mint、openSUSE、Debian、SlackwareLinux、Red Hat。

    对ROS兼容性最好的当属Ubuntu系统。到目前Ubuntu系统已经发布到2018版。从ROS发布以来,每版的Ubuntu系统版本都有与之对应ROS版本的。以下是到2018年各个版本的对照表:

    ROS版本

    Ubuntu版本

    ROS Melodic Morenia

    Ubuntu 18.04(Bionic)/Ubuntu 17.04 Artful

    ROS Lunar Loggerhead

     Ubuntu 17.04 (Zesty)/Ubuntu 16.10 Yakkety, Ubuntu LTS 16.04 Xenial

    ROS Kinetic Kame

    Ubuntu 16.04 (Xenial) / Ubuntu 15.10 (Wily)

    ROS Jade Turtle

    Ubuntu 15.04 (Wily) / Ubuntu LTS 14.04 (Trusty)

    ROS Indigo Igloo

    Ubuntu 14.04 (Trusty)

    ROS Hydro Medusa

    Ubuntu 12.04 LTS (Precise)

    ROS Groovy Galapagos

    Ubuntu 12.04

    每一版ROS都有其对应版本的Ubuntu版本,切记不可随便装。

    Ubuntu可在官网下载https://www.ubuntu.com/download,安装步骤可参考http://digi.163.com/11/0127/18/6RE3LQL400162OUT.html,。

    目前国际上ROS系统支持最广的系统为indigo、kinetic。在此,此教程是indigo版本的安装方法,别的版本可举一反三。

    二、  安装步骤

    1.在Ubuntu软件中心配置如下:

    2.打开终端(Ctrl +Alt + T)依次输入如下命令:

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

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

    sudo apt-getupdate

    sudo apt-getinstall ros-indigo-desktop(在此也可以安装桌面完整版:sudo apt-get install ros-indigo-desktop-full)

    sudo rosdep init

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

    source ~/.bashrc

    sudo apt-getinstall python-rosinstall

    1.     至此,ROS已经安装完毕,可以启动一下roscore,查看安装是否成功,安装成功则显示如下:


    三、  从github克隆所需软件包

    ROS的支持的软件包都存在github这个平台上面,所以学会如何从github获取克隆软件包我们必须学习一下啦。那么我们从新建第一个package开始学习吧:

    1.新建工程catkin_ws与子文件夹src

    mkdir –p ~/catkin_ws/src 

      2.对名为catkin_ws的工程进行编译

          catkin_make

    3.进入src文件夹下

    cd catkin_ws/src

    4.将仿真软件包从github克隆到本地src目录下(此github仓库是联汇自有仓库,仓库网址github.com/AlliansChina欢迎大家评论交流,可自行下载模拟试验):

          git clone https://github.com/AlliansChina/allians_arbotix.git

    5.定位到catkin_ws根目录下,可采用Tab键补全:

    cd catkin_ws

    6.编译克隆到本地的软件包:

    catkin_make

    到此,一个ROS工程已经创建好了。接下来就可以进行初级学习啦。


    联汇智造:国内首台ROS工业自主协作移动机器人

    点击查看更多→www.allians.com.cn



    展开全文
  • ROS安装教程(详细)

    万次阅读 2019-04-21 21:55:11
    总结一下这两天安装ROS的过程。 1 配置软件库 桌面左侧栏 点search your computer,输入updates,点 Software & Updates,将main,universe,multiuniverse,restricted全都勾上,将Download from换成中科大的 ...
  • ROSROS界面开发环境安装教程

    万次阅读 2018-03-26 10:45:22
    但是目前市面上有很多基于ros的产品,甚至nasa基于ros的系统都部署到太空了。ros的功能强大,有很多别人开发好的包可以使用,避免了重复造轮子。 我一直认为学习某一项技能需要有实际的使用环境,这样才能学的更快...
  • ROS教程学习及Linux学习

    千次阅读 2018-09-10 11:50:36
    1.Linux中如何使用vim编辑器? 使用vim filename进行编辑,例如要对package.xml文件进行编辑,那么在终端cd到指定的文件目录下,vim package.xml即可。刚开始其为命令模式,无法对文件进行...2.ROS基础教程(创建R...
  • 核心ROS教程(一)

    2018-12-28 19:24:52
    是〔〕
  • 入门ROS教程与视频汇总(kinetic)

    万次阅读 2017-02-14 22:14:00
     http://v.youku.com/v_show/id_XMjUxMTc5MzE5Mg注意下面是机器翻译结果~MooreRobots博客关于博客文章【概述】获得通过模拟在ROS与自主机器人开始2016/09/27 15:33[教程]在ROS硬件机器人的闭环控制(部分5)201
  • 初学者学习ROS的一个很好的途径就是通过wiki教程来初步了解ros、安装ros、操作简单功能。了解后需要进阶学习可以参考各种开源项目,请教技术大牛博客大神等(可以参考古月居博客) 。 wiki是初学者跳不开的学习过程...
  • 可是这样一来,笔者在跟着书本初略过了一遍后,却还是不知道如何通过ROS去具体操作实实在在的机器人,譬如想做导航和定位,自己的机器人该如何跟ROS这个框架结合起来,网上这方面中文教程很少,同时,英文教程里关于...
  • ROS教程

    2018-01-09 11:25:45
    ROS教程 Non-Beginners: If you’re already familiar enough with ROS fuerte or earlier versions and only want to explore the new build system introduced in groovy and used in hydro and la
  • ROS教程(1)--- 基本配置 转载于:https://blog.51cto.com/80812345/983096
  • gazebo-ros教程(一)ros_control

    千次阅读 多人点赞 2020-02-24 16:17:06
    gazebo提供了一组ROS API,我们可以通过其获取有关模拟世界各个方面的信息。在以下教程中,将演示一些用于操纵仿真世界和对象的实用程序。 与ros通讯一、准备工作模型1、获取RRbot模型2、在rviz中查看模型3、查看...
  • Linux安装ros详细教程(很实用) 前段时间在B站刷到SLAM建图的小车,顿时对机器人产生了兴趣,但今年也没有时间深入去学,就想着先在虚拟机里安装ros,跑个小乌龟先。在网上搜了很多教程,但还是踩了很多的坑,所以...
  • ROS教程(一):安装并配置ROS环境

    千次阅读 2017-06-22 18:48:46
    安装并配置ROS环境 Description: 本教程详细描述了ROS的安装与环境配置。 Tutorial Level: BEGINNER Next Tutorial: ROS文件系统介绍  目录 安装ROS管理环境创建ROS工作空间 ...
  • ROS教程1--创建节点

    千次阅读 2017-05-26 16:16:36
    编写cpp文件 ...#include "ros/ros.h" #include "std_msgs/String.h" #include <sstream>int main(int argc, char **argv) { ros::init(argc, argv, "example1_a"); ros::NodeHandle n; ros::Publish
  • ROS 教程

    千次阅读 2016-06-01 09:42:41
    ROS 教程 http://wiki.ros.org/ROS/Tutorials http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment Install ROS sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $...
1 2 3 4 5 ... 20
收藏数 10,757
精华内容 4,302
关键字:

ros教程