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

55426
54
2016年2月19日 19时39分

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

一、ROS的安装

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

二、ROS的新手教程

ROS探索总结(三)——ROS新手教程插图(1)
        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订阅消息接收数据,然后显示,这些数据也是有一定的数据格式的,可以参考下面的链接:
             ROS探索总结(三)——ROS新手教程插图(2)
         看到上面的机器人了吧,是不是很酷,在rviz中,这样的机器人模型是通过urdf文件描述的,具体urdf文件怎么写,参考wiki:

          2、tf

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

        3、gazebo

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

四、ROS常用机器人

        1、PR2

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

        2、TurtleBot     

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

        3、Husky、Erratic

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

 

发表评论

后才能评论

评论列表(54条)

  • ggb 2019年10月19日 上午10:57

    古月老师我想提个问题,您博客中的图片好像都看不了了,是否您使用的图床出了问题呢

    • 古月 回复 ggb 2019年10月28日 下午6:04

      之前的部分博客图片是转载csdn的,应该出了点问题,最近网站在重新维护

  • 王伟 2019年5月21日 下午8:35

    胡老师您好,我按照您书上的例子进行建立learning_communication 功能包的时候,在编译生成talker和listener可执行文件的时候,出现add_executable cannot create target “talker” because another target with the same name already exists. 请问是什么情况。谢谢

    • 古月 回复 王伟 2019年5月23日 下午5:14

      工作空间中有同名的可执行文件

  • lharys 2019年4月1日 下午10:31

    lharys@ubuntu:~$ sudo sh -c’echo“deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc)main”> /etc/apt/sources.list.d/ros-latest.list’
    [sudo] password for lharys:
    sh: 0: Illegal option -h
    lharys@ubuntu:~$
    这里老报错,装不了

  • lihx 2019年3月27日 下午7:52

    古大神,安装不上Ubuntu系统怎么办

    • 古月 回复 lihx 2019年3月27日 下午8:49

      。。。只能想办法装

  • 梁思成 2019年1月14日 上午11:58

    请问为什么不用Kinetic版本?

    • 古月 回复 梁思成 2019年1月14日 下午3:42

      因为这篇博客的内容是12年写的,参考的时候换成kinetic就行

  • 薛棣棣 2018年12月31日 上午11:51

    古月老师您好:
    在您第四章的书中用C++创建TF广播器的时候,我在头文件中没有找到Transform这个类,但是下面却直接用了。

    • 古月 回复 薛棣棣 2019年1月2日 上午9:46

      参考:http://docs.ros.org/kinetic/api/tf/html/c++/classtf_1_1Transform.html

  • James 2018年11月13日 下午9:24

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

    • 古月 回复 James 2018年11月14日 下午8:26

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

  • jack 2018年9月23日 下午6:10

    老师,您好。请教一下。 一个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 2018年9月24日 下午5:26

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

  • fatcat 2018年7月30日 下午4:20

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

    • 古月 回复 fatcat 2018年8月2日 上午10:03

      这个我也不清楚,google找找吧

    • 毛虫 回复 fatcat 2018年9月20日 下午5:39

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

  • 崔文锋 2018年4月8日 下午6:49

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

    • 古月 回复 崔文锋 2018年4月9日 上午10:11

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

    • 秦莹莹 回复 崔文锋 2018年7月10日 下午4:48

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

    • 古月 回复 秦莹莹 2018年7月11日 上午11:54

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

  • dddddd 2018年3月29日 下午10:59

    古大神,我在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 2018年3月30日 下午4:28

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

    • jarvis 回复 古月 2018年4月16日 上午11:34

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

    • 古月 回复 jarvis 2018年4月16日 下午6:09

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

  • 2018年3月29日 下午3:56

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

    • 古月 回复 2018年3月30日 下午4:25

      ?没有启动订阅节点?

  • 刘元基 2018年3月27日 上午11:52

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

    • 古月 回复 刘元基 2018年3月27日 下午7:01

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

  • 2018年1月29日 上午11:21

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

  • zach 2017年8月21日 下午7:12

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

    • 古月 回复 zach 2017年8月22日 上午9:31

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

  • 陈小楠 2017年3月5日 下午8:49

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

    • 古月 回复 陈小楠 2017年3月6日 上午11:17

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

    • 陈占杰 回复 古月 2017年3月7日 上午10:54

      完整了呢,我装的是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)’

    • 古月 回复 陈占杰 2017年3月8日 上午9:07

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

    • 陈占杰 回复 古月 2017年3月9日 下午4:44

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

    • 古月 回复 陈占杰 2017年3月10日 下午3:39

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

    • 苏碧落 回复 陈小楠 2018年12月5日 下午6:04

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

  • lanyouzibetty 2016年10月31日 上午10:27

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

  • 杨硕 2016年8月23日 下午6:27

    维基教程里的原句是这样写的:
    如果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
    这几个版本的命令去修改环境变量,都失败了。不知道怎么改了..

    • 古月 回复 杨硕 2016年8月24日 上午9:24

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

    • 杨硕 回复 古月 2016年8月24日 下午6:20

      好的,解决了!谢谢~

  • 杨硕 2016年8月23日 下午6:11

    楼主你好~在下在学维基上的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进不去?

  • libo15 2016年6月12日 下午7:37

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

    • 古月 回复 libo15 2016年6月16日 上午10:02

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

    • hou 回复 libo15 2016年9月12日 上午9:33

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

  • libo15 2016年6月12日 下午7:32

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

  • lan 2016年6月8日 下午9:45

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

    • 古月 回复 lan 2016年6月10日 下午10:15

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