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

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

wiki上的新手教程还是很详细的,对代码都有解释,新手一定要把这些例子和代码搞明白:
上面的教程都是英文的,如果感觉略有压力(本人就是),可以参考下面这两个博客中的部分翻译:
不过往后面的学习都是英文的资料了,还是要努力适应看英文的文档。
ROS使用的编程语言主要是C++和python,所以也有针对这两种语言的功能包roscpp和rospy,这两个包的教程与上面的教程基本相似,看完上面的教程也可以看看这两个包的教程:
努力学习完上面的这些教程,你至少应该明白ROS里面的节点和消息是干什么用的了吧,如果还没理解,那就再多看几遍吧!
三、ROS中的常用功能
ROS中提供了很多强大的功能,我们学习完上面的基本知识之后要继续进行深入。
1、rviz
rviz是ROS中一款强大的3D可视化工具,这个玩意在后面可是要频繁用到的,是必须要弄明白的,详细的教程可以参考wiki:
我们可以在里面创建自己的机器人,并且让机器人动起来。还可以创建地图,显示3D点云等等,总之,想在ROS中显示的东东都可以在这里显示出来。当然这些显示都是通过消息的订阅来完成的,机器人通过ROS发布数据,rviz订阅消息接收数据,然后显示,这些数据也是有一定的数据格式的,可以参考下面的链接:

看到上面的机器人了吧,是不是很酷,在rviz中,这样的机器人模型是通过urdf文件描述的,具体urdf文件怎么写,参考wiki:
2、tf
tf是ROS中的坐标变换系统,在机器人的建模仿真中经常用到。

ROS中主要有两种坐标系:
(1)固定坐标系:用于表示世界的参考坐标系;
(2)目标坐标系:相对于摄像机视角的参考坐标系。
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上的新手教程是一定要先熟悉的,后面的内容在后续学习过程中可以一边做一边学习。
*此文只代表个人观点,仅作为参考
评论列表(55条)
老师您好,我才开始学ROS,很高兴能看到这么系统接地气的教程,感激不尽。想问个小问题,就是我有husky的小车,但是我看您给提供的连接里面安装教程,不知道是不是源码安装,方便后期修改,您能给个指导么?
古月老师我想提个问题,您博客中的图片好像都看不了了,是否您使用的图床出了问题呢
之前的部分博客图片是转载csdn的,应该出了点问题,最近网站在重新维护
胡老师您好,我按照您书上的例子进行建立learning_communication 功能包的时候,在编译生成talker和listener可执行文件的时候,出现add_executable cannot create target “talker” because another target with the same name already exists. 请问是什么情况。谢谢
工作空间中有同名的可执行文件
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:~$
这里老报错,装不了
古大神,安装不上Ubuntu系统怎么办
。。。只能想办法装
请问为什么不用Kinetic版本?
因为这篇博客的内容是12年写的,参考的时候换成kinetic就行
古月老师您好:
在您第四章的书中用C++创建TF广播器的时候,我在头文件中没有找到Transform这个类,但是下面却直接用了。
参考:http://docs.ros.org/kinetic/api/tf/html/c++/classtf_1_1Transform.html
你好,想請問一下說根據教程建立自己的robot的URDF時,在使用到check_urdf時,一直顯示錯誤,且會顯示無法解析urdf,已經有照教程的步驟安裝liburdfdom了
第二個問題是根據教程輸入catkin_create_pkg testbot_description urdf後,子資料夾跟教程顯示的數量不一樣,會有缺少,想問說該如何解決
謝謝
1. 具体是什么错误提示
2. 只要有cmakelist和package这两个文件就行,其他都可以自己创建
老师,您好。请教一下。 一个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名字是我自己起的。这个参数和初始化的节点有什么关系。谢谢您了。
是的,param是存储在ros master里的,没有设置的话是不存在的。参考下ROS的 parameter原理和设置方法。
老师想请问一下 在打开rviz的时候出现这个问题machine.env_loader must have been assigned before creating ssh child instance
The traceback for the exception was written to the log file
请问一下这个应该怎么解决呢 还是新手不是很懂 希望能得到解答
这个我也不清楚,google找找吧
怎么样解决了吗?我也遇到了
您好,一直在看您写的blog学习ros,现在遇到一个问题,我想把rviz工作空间中的画的线与image窗口的视频叠加到一起。不知道有什么好办法?还是需要自己做些二次开发的工作?我想到一个简单的办法是我发现rviz的wiki手册中rviz的image中有一个属性:Alpha来设置透明度,这样将其设置为半透明,然后与工作空间中画的线重叠 起来简单实现 一下重合的效果,但是我发现rviz软件的image中并没有Alpha一项属性。不知道 为什么?您能否给指导 一下?
这个我也不太清楚,但是见过类似的效果,可以先找一个别人做好的参考一下
请问depthimage_to_laserscan可以将.pcd格式的点云文件转换成laser格式吗
不能转换文件,只能把pointcloud2格式的数据转换成laserscan数据
古大神,我在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
代码自己写的么,这是语法错误吧,类型转换不一致
我也出现这个错误了,不是自己写的代码。
这个是语法错误,类型转换不一致,得改代码,应该是版本不同造成的
运行wiki教程时候显示没有制造接受者。。。。。
?没有启动订阅节点?
古大神您好,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
古大神,你好,我这安装好用PR2的时候出现unable to parse XACRO file:这是咋回事
检查一下环境变量,重启电脑:
https://github.com/qboticslabs/mastering_ros/issues/26
楼主,你好,我学的是机械方向机器人,师兄让开始学ros,但现在出了好多问题:
ssh: Could not resolve hostname artoo: Name or service not known
这个是怎么回事?
这个应该是网络的问题,有没有在hosts里边加入计算机名和ip的对应关系
大神您好,我使用的是irobot create2底盘,用了nvdia TX1板子来进行键盘控制移动,我的package在电脑上编译能成功,直接usb连接底盘也能控制,可是在把包拿到板子上进行编译的时候,会出现特别多的错误,几乎全是cpp文件内的各种undefinded,google上的很多方法我都用了,Cmakelists添加了可执行文件,tf包也加了,但还是没用,想请问您有什么建议。
猜测是缺少依赖的库或者功能包,完整安装了ros么?
完整了呢,我装的是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/
您好,我看了这个,上边说更新了GCC版本问题没有了,可是我问题的并没有因此解决。是不是因为ARM上的编译器并不是GCC呢?我的开发板是nvidia TX1。
ARM上的ubuntu是自带GCC编译器的,看错误提示是缺少链接文件,这个板子我没用过。
您好,我也遇到了同样的问题,想请教下最后是如何解决的?
楼主,你好,我用的是indigo版本,现在手上一台kobuki,在安装turtlebot包中kobuki时,编译不成功,之后再远程控制kobuki上的电脑时,一运行rqt,rviz这些可视化工具时,就出现cannot connect to the X server,请问这是什么缘故啊
这个错误应该是ubuntu图形显示的问题:
http://stackoverflow.com/questions/646930/cannot-connect-to-x-server-0-0-with-a-qt-application
http://askubuntu.com/questions/175611/cannot-connect-to-x-server-when-running-app-with-sudo
谢谢搂主,问题已解决
维基教程里的原句是这样写的:
如果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
好的,解决了!谢谢~
楼主你好~在下在学维基上的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进不去?
补充一下,就是说我不知道文件目录谁对应谁,我看ros官方教程有教建立 catkin_ws 搞些好多文件,文件夹,这样编译,那样支持,都不知道在干嘛,对与程序有什么用,以及自己编程是不是也要这样做。如果运行别人的程序又该怎么办。谢谢 继续看你的博客 看到后面能不能理解这些疑惑。
你好,建议再看一些ROS方面的基础教程
应该大概是源码都在src文件夹里面,其它的文件夹都是依赖库。你若是想更改别人的代码,就要去修改src文件夹下面的源代码,然后重新make一下。
你好 古月 我也遇到@lan 的问题,我用的是indigo 使用 catkin 编译路径我真不知道对不对。
就是我没能理解这个程序到底是怎么运行的,我不知道这个文件到底是怎么组织的,ros的整体编程思想是什么。我想这个问题对于很多新手来说都是比较头疼的。
大哥你好 我这边一到rosmake 就报错了 ERROR: No arguments could be parsed into valid package or stack names.
你好,您安装的ROS版本是?使用rosbuild还是catkin?编译的路径是否正确?