ROS探索总结(三)——ROS新手教程

  • 内容
  • 评论
  • 相关

       前面我们介绍了ROS的特点和结构,接下来就要开始准备动手感受一下ROS的强大了。ROS官网的wiki上针对新手的教程很详细,最好把所有的新手教程都搞清楚,这是后面开发最基础的东西。尽管如此,ROS对于新手来说还是很难上手,这里,我就来总结一下我当时学习的历程,也为其他新手作为一个参考。

一、ROS的安装

        ROS的安装当然是我们开始动手的第一步了,这里我们使用的操作系统是ubuntu,因为ROS在ubuntu上的支持是最好的。
        如果是新手,我建议使用”apt-get“的方法进行安装,不走很简单,按照wiki上说的,大概半个小时就可以安装完毕完全版的ROS:(现在最新版的ROS是groovy,但是我还是习惯使用fuerte)
 
        如果想挑战源码编译,当然也没有问题:
 
        安装完毕之后运行一下“roscore”,如果没有问题,安装就成功了!
 
注:groovy版本的安装:
            源码编译:http://www.ros.org/wiki/groovy/Installation/Source
 

二、ROS的新手教程

        wiki上的新手教程还是很详细的,对代码都有解释,新手一定要把这些例子和代码搞明白:
 
        上面的教程都是英文的,如果感觉略有压力(本人就是),可以参考下面这两个博客中的部分翻译:
 
        不过往后面的学习都是英文的资料了,还是要努力适应看英文的文档。
        ROS使用的编程语言主要是C++和python,所以也有针对这两种语言的功能包roscpp和rospy,这两个包的教程与上面的教程基本相似,看完上面的教程也可以看看这两个包的教程:
 
        努力学习完上面的这些教程,你至少应该明白ROS里面的节点和消息是干什么用的了吧,如果还没理解,那就再多看几遍吧!
 

三、ROS中的常用功能

         ROS中提供了很多强大的功能,我们学习完上面的基本知识之后要继续进行深入。

         1、rviz      

         rviz是ROS中一款强大的3D可视化工具,这个玩意在后面可是要频繁用到的,是必须要弄明白的,详细的教程可以参考wiki:
         http://www.ros.org/wiki/rviz 
 
         我们可以在里面创建自己的机器人,并且让机器人动起来。还可以创建地图,显示3D点云等等,总之,想在ROS中显示的东东都可以在这里显示出来。当然这些显示都是通过消息的订阅来完成的,机器人通过ROS发布数据,rviz订阅消息接收数据,然后显示,这些数据也是有一定的数据格式的,可以参考下面的链接:
 
            
         看到上面的机器人了吧,是不是很酷,在rviz中,这样的机器人模型是通过urdf文件描述的,具体urdf文件怎么写,参考wiki:
         http://www.ros.org/wiki/urdf
 

          2、tf

          tf是ROS中的坐标变换系统,在机器人的建模仿真中经常用到。
         ROS中主要有两种坐标系:
        (1)固定坐标系:用于表示世界的参考坐标系;
        (2)目标坐标系:相对于摄像机视角的参考坐标系。
        教程见:http://www.ros.org/wiki/tf

        3、gazebo

        这个工具是ROS中的物理仿真环境,gazebo本身就是一款机器人的仿真软件,基于ODE的物理引擎,可以模拟机器人以及环境中的很多物理特性,这个软件可以稍作了解,并不是后面开发所必须要的。
 

四、ROS常用机器人

        1、PR2

       看ROS的应用时,最常见到的机器人就是PR2。这个机器人是ROS的主要维护者(Willow Garage)针对ROS量身定做的机器人,有两个运行ubuntu和ROS的电脑,和两个机器臂以及很多牛逼的传感器,功能是非常强大的,但是售价那是相当的昂贵,国内很少见到,基本都是在国外的研究所里。这款机器人的ROS包比较多,从仿真到导航,所以代码具有比较高的参考价值,当然新手还是先看看其他机器人的代码再来挑战PR2吧,代码比较庞杂。
 

        2、TurtleBot     

        这个机器人应该算是应用ROS小型移动机器人的典型代表了,资料、文档和代码比较多,主要在建立模型和导航定位方面,代码比较容易理解,可以作为新手参考的最佳机器人了,上面rviz中显示的那个机器人就是它了。

        3、Husky、Erratic

     
          这两款机器人和TurtleBot机器人差不多,都是小型的轮式移动机器人,同样可以作为新手学习的参考:
 
         这些教程和机器人基本都是我当时学习的时候研究和了解过的,总结在此也让那些比较迷茫的初学者作为参考,可以尽快了解和掌握ROS。再次强调一下,wiki上的新手教程是一定要先熟悉的,后面的内容在后续学习过程中可以一边做一边学习。
         *此文只代表个人观点,仅作为参考

 


原创文章,转载请注明: 转载自古月居

本文链接地址: ROS探索总结(三)——ROS新手教程

微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixinpay_weixin

评论

43条评论
  1. Gravatar 头像

    James 回复

    你好,想請問一下說根據教程建立自己的robot的URDF時,在使用到check_urdf時,一直顯示錯誤,且會顯示無法解析urdf,已經有照教程的步驟安裝liburdfdom了
    第二個問題是根據教程輸入catkin_create_pkg testbot_description urdf後,子資料夾跟教程顯示的數量不一樣,會有缺少,想問說該如何解決
    謝謝

    • 古月

      古月 回复

      @James 1. 具体是什么错误提示
      2. 只要有cmakelist和package这两个文件就行,其他都可以自己创建

  2. Gravatar 头像

    jack 回复

    老师,您好。请教一下。 一个cpp文件中。
    ros::init(argc,argv,"test_nodet");

    ros::NodeHandle myn1;

    std::string s1;
    std::string s2;
    if(myn1.hasParam("my_para"))ROS_INFO("para_ex1");
    else ROS_INFO("para_no_ex");

    myn1.setParam( "my_para", "m_desi_1");
    if ( myn1.getParam( "my_para", s1))

    发现,执行setParam后,getParam才会成功。是这样吗。 my_para名字是我自己起的。这个参数和初始化的节点有什么关系。谢谢您了。

    • 古月

      古月 回复

      @jack 是的,param是存储在ros master里的,没有设置的话是不存在的。参考下ROS的 parameter原理和设置方法。

  3. Gravatar 头像

    fatcat 回复

    老师想请问一下 在打开rviz的时候出现这个问题machine.env_loader must have been assigned before creating ssh child instance
    The traceback for the exception was written to the log file
    请问一下这个应该怎么解决呢 还是新手不是很懂 希望能得到解答

    • Gravatar 头像

      毛虫 回复

      @fatcat 怎么样解决了吗?我也遇到了

  4. Gravatar 头像

    崔文锋 回复

    您好,一直在看您写的blog学习ros,现在遇到一个问题,我想把rviz工作空间中的画的线与image窗口的视频叠加到一起。不知道有什么好办法?还是需要自己做些二次开发的工作?我想到一个简单的办法是我发现rviz的wiki手册中rviz的image中有一个属性:Alpha来设置透明度,这样将其设置为半透明,然后与工作空间中画的线重叠 起来简单实现 一下重合的效果,但是我发现rviz软件的image中并没有Alpha一项属性。不知道 为什么?您能否给指导 一下?

    • 古月

      古月 回复

      @崔文锋 这个我也不太清楚,但是见过类似的效果,可以先找一个别人做好的参考一下

    • Gravatar 头像

      秦莹莹 回复

      @崔文锋 请问depthimage_to_laserscan可以将.pcd格式的点云文件转换成laser格式吗

      • 古月

        古月 回复

        @秦莹莹 不能转换文件,只能把pointcloud2格式的数据转换成laserscan数据

  5. Gravatar 头像

    dddddd 回复

    古大神,我在catkin_make hector_quadrotor时出现下面的错误,请问哪错了,查了很长时间了,谢谢!
    1、/hector_quadrotor_tutorial/src/hector_localization/hector_pose_estimation_core/src/measurements/poseupdate.cpp:385:73: error: cannot convert ‘const Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op, const Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, const Eigen::Matrix >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_difference_op, const Eigen::Matrix, const Eigen::Matrix > >’ to ‘double’ in initialization
    double error2 = error.transpose() * Ix * (Ix + Iy).inverse() * Iy * error;

    2、/hector_quadrotor_tutorial/src/hector_localization/hector_pose_estimation_core/src/measurements/poseupdate.cpp:385:73: error: cannot convert ‘const Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op, const Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op, const Eigen::Matrix >, const Eigen::Matrix >’ to ‘double’ in initialization

    • 古月

      古月 回复

      @dddddd 代码自己写的么,这是语法错误吧,类型转换不一致

      • Gravatar 头像

        jarvis 回复

        @古月 我也出现这个错误了,不是自己写的代码。

        • 古月

          古月 回复

          @jarvis 这个是语法错误,类型转换不一致,得改代码,应该是版本不同造成的

  6. Gravatar 头像

    回复

    运行wiki教程时候显示没有制造接受者。。。。。

  7. Gravatar 头像

    刘元基 回复

    古大神您好,rviz 第一个教程运行rosrun using_markers basic_shape,提示[rosrun] Couldn't find executable named basic_shape below /home/noahlau/catkin_ws/src/using_markers ,请问这个是什么原因?

    • 古月

      古月 回复

      @刘元基 basic_shape是不是python文件,如果是的话,需要给程序文件添加可执行权限。如果是C++的话,查找执行文件的路径不对,source一下工作空间的setup.bash

  8. Gravatar 头像

    回复

    古大神,你好,我这安装好用PR2的时候出现unable to parse XACRO file:这是咋回事

  9. Gravatar 头像

    zach 回复

    楼主,你好,我学的是机械方向机器人,师兄让开始学ros,但现在出了好多问题:
    ssh: Could not resolve hostname artoo: Name or service not known
    这个是怎么回事?

    • 古月

      古月 回复

      @zach 这个应该是网络的问题,有没有在hosts里边加入计算机名和ip的对应关系

  10. Gravatar 头像

    陈小楠 回复

    大神您好,我使用的是irobot create2底盘,用了nvdia TX1板子来进行键盘控制移动,我的package在电脑上编译能成功,直接usb连接底盘也能控制,可是在把包拿到板子上进行编译的时候,会出现特别多的错误,几乎全是cpp文件内的各种undefinded,google上的很多方法我都用了,Cmakelists添加了可执行文件,tf包也加了,但还是没用,想请问您有什么建议。

    • 古月

      古月 回复

      @陈小楠 猜测是缺少依赖的库或者功能包,完整安装了ros么?

      • Gravatar 头像

        陈占杰 回复

        @古月 完整了呢,我装的是kinetic-desktop,然后用的包是这里的https://github.com/CentroEPiaggio/irobotcreate2ros,具体错误代码类型就像:
        irobotcreate2.cpp:(.text+0x1750): undefined reference to `ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)'
        irobotcreate2.cpp:(.text+0x18d0): undefined reference to `ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)'
        irobotcreate2.cpp:(.text+0x19e0): undefined reference to `ros::console::print(ros::console::FilterBase*, void*, ros::console::levels::Level, std::basic_stringstream<char, std::char_traits, std::allocator > const&, char const*, int, char const*)'
        irobotcreate2.cpp:(.text+0x21d4): undefined reference to `ros::console::initializeLogLocation(ros::console::LogLocation*, std::string const&, ros::console::levels::Level)'

        • 古月

          古月 回复

          @陈占杰 参考一下:http://answers.ros.org/question/234322/linker-error-on-ros-kinetic-ubuntu-1604/

          • Gravatar 头像

            陈占杰 回复

            @古月 您好,我看了这个,上边说更新了GCC版本问题没有了,可是我问题的并没有因此解决。是不是因为ARM上的编译器并不是GCC呢?我的开发板是nvidia TX1。

            • 古月

              古月 回复

              @陈占杰 ARM上的ubuntu是自带GCC编译器的,看错误提示是缺少链接文件,这个板子我没用过。

    • Gravatar 头像

      苏碧落 回复

      @陈小楠 您好,我也遇到了同样的问题,想请教下最后是如何解决的?

  11. Gravatar 头像

    lanyouzibetty 回复

    楼主,你好,我用的是indigo版本,现在手上一台kobuki,在安装turtlebot包中kobuki时,编译不成功,之后再远程控制kobuki上的电脑时,一运行rqt,rviz这些可视化工具时,就出现cannot connect to the X server,请问这是什么缘故啊

  12. Gravatar 头像

    杨硕 回复

    维基教程里的原句是这样写的:
    如果roscd执行失败了,记得设置你当前终端下的ROS_PACKAGE_PATH环境变量,设置方法如下:
    $ export ROS_PACKAGE_PATH=~/_workspace/sandbox:$ROS_PACKAGE_PATH
    $ roscd beginner_tutorials
    我尝试过
    export ROS_PACKAGE_PATH=~/kinetic_workspace/sandbox:$~/catkin_ws/src/beginner_tutorials
    export ROS_PACKAGE_PATH=~/kinetic_workspace/sandbox:$~/catkin_ws/src
    export ROS_PACKAGE_PATH=~/kinetic_workspace/sandbox:$~/catkin_ws
    export ROS_PACKAGE_PATH=~/kinetic_workspace/sandbox:$ROS_PACKAGE_PATH
    这几个版本的命令去修改环境变量,都失败了。不知道怎么改了..

    • 古月

      古月 回复

      @杨硕 还是路径的问题,先source ~/catkin_ws/devel/setup.sh

      • Gravatar 头像

        杨硕 回复

        @古月 好的,解决了!谢谢~

  13. Gravatar 头像

    杨硕 回复

    楼主你好~在下在学维基上的ros新手教程。目前新手教程已经有中文维基站啦,在ros.org主页上点击wiki,Available Translations里有简体中文了!
    楼主我用的系统是ubuntu 16.04 ,安装的ros版本号是1.12.2,名称kinetic。使用的是catkin编译。依照新手教程里的顺序,在~/catkin_ws/src里建了一个beginner_tutorials程序包,也编译成功了。后来在学roslaunch的时候,需要转到包目录里,但是使用roscd转到beginner_tutorials的时候出现错误:roscd: No such package/stack 'beginner_tutorials'。
    我按照教程,修改环境变量:$ export ROS_PACKAGE_PATH=~/kinetic_workspace/sandbox:$~/catkin_ws
    回车后再次执行:$ roscd beginner_tutorials
    依然是错误。
    我使用cd命令自己转目录,再ls一下看看,最后的结果是:
    :~/catkin_ws/src/beginner_tutorials$ ls
    CMakeLists.txt include launch package.xml src
    launch 是我自建的目录。
    为什么我自己cd可以进这个目录,这个目录也有Cmake和package文件,但是就是roscd进不去?

  14. Gravatar 头像

    libo15 回复

    补充一下,就是说我不知道文件目录谁对应谁,我看ros官方教程有教建立 catkin_ws 搞些好多文件,文件夹,这样编译,那样支持,都不知道在干嘛,对与程序有什么用,以及自己编程是不是也要这样做。如果运行别人的程序又该怎么办。谢谢 继续看你的博客 看到后面能不能理解这些疑惑。

    • 古月

      古月 回复

      @libo15 你好,建议再看一些ROS方面的基础教程

    • Gravatar 头像

      hou 回复

      @libo15 应该大概是源码都在src文件夹里面,其它的文件夹都是依赖库。你若是想更改别人的代码,就要去修改src文件夹下面的源代码,然后重新make一下。

  15. Gravatar 头像

    libo15 回复

    你好 古月 我也遇到@lan 的问题,我用的是indigo 使用 catkin 编译路径我真不知道对不对。
    就是我没能理解这个程序到底是怎么运行的,我不知道这个文件到底是怎么组织的,ros的整体编程思想是什么。我想这个问题对于很多新手来说都是比较头疼的。

  16. Gravatar 头像

    lan 回复

    大哥你好 我这边一到rosmake 就报错了 ERROR: No arguments could be parsed into valid package or stack names.

    • 古月

      古月 回复

      @lan 你好,您安装的ROS版本是?使用rosbuild还是catkin?编译的路径是否正确?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据