这几天学习ROS,看到了很多大神的博客,写的都很好(虽然基本就是把官方教程翻译一遍)。
主要是看
小菜鸟上校 的博客
http://blog.youkuaiyun.com/xiaocainiaoshangxiao/article/category/1710543
永顿007 的博客
http://blog.sina.com.cn/s/articlelist_1712413141_7_1.html
以及 古月 的博客
http://blog.youkuaiyun.com/hcx25909/article/category/1191901
其中 小菜鸟上校 的博文步骤写的比较详细,可以一步步跟着走,适合刚开始接触的(例如我);
永顿007 的博文例子比较多,适合在某个概念里卡住的时候,看他的文章可以得到更好的理解;
古月 的博文写的就没那么详细,但是可以给到一个overview,对ROS有一个感性的理解;不推荐初学者看他的博客来学习,因为没点基础基本看不懂,但是他的博客都会给出官方教程出处。
讲道理,如果英文过关的话,还是推荐看官方教程,毕竟吃别人嚼过的东西,虽然比较容易吞下去,但是不一定原汁原味(我好恶心啊= =||)
http://wiki.ros.org/
但是毕竟这些都是好多年前的博客了,ROS在不断更新,有一些不一样的地方,就记录在这里。
另外有一些需要注意的细节,也会记录在这里。
显示主题图
以前显示主题示意图,应该是 rxgraph 命令吧,我看这几个博客都是这么写的。但是现在改了,在官方给出的教程里,显示主题示意图的命令是:
$ rqt_graph
catkin_make需要在根目录执行
也就是需要在home/username/catkin_ws/ 下执行。
否则会出现如下错误:
cannot bind to specific port dev/ttyUSB0 解决方法
rplidar laser scanner 给的例程有linux下的,但是按照说明去做会出现这个问题。
这是权限问题,安装是在非root用户下安装的,而要读写ttyUSB0,需要root权限。
$ dmesg | grep ttyUSB0
上面这条指令可以查看ttyUSB0的信息,如果有输出,那么可以判定,驱动没有问题,连接也没有问题,就是权限的问题。
所以用下面这条指令
$ sudo chmod 777 /dev/ttyUSB0
完全开放ttyUSB0的权限,再运行程序即可成功。
需要建包的时候,用catkin建
不推荐用roscreate-pkg,毕竟catkin就是为了方便ROS开发而弄出来的工具。
还是用 catkin_create_pkg 吧。
cannot launch node of type []: can’t locate node [] in package []
在学习tf的时候就遇到了这个问题。
当时的错误提示是
cannot launch node of type [learning_tf/turtle_tf_broadcaster]: can’t locate node [turtle_tf_broadcaster] in package [learning_tf]
在网上搜了一下,有人说是需要在 catkin_make后面加上
source ./devel/setup.bash
然后才能 launch
然而并不能解决我的问题。
后来有人说把生成的文件删了,recompile一下。
我就把 /devel/lib/learning_tf 里的东西全删了。
结果更糟,本来只有一个这样的错误,删掉了之后出现了3个。
而且recompile并没有什么反应,感觉catkin认为我已经compile过了,已经up-to-date。
后来解决方法是:
把 /build/learning_tf/ 里的几个二进制文件复制到/devel/lib/learning_tf 里,然后launch。
找到解决方法了
原因在于:CMakelist.txt里,少了一句
catkin_package()
由于catkin_make的本质还是cmake,只是把一些其他的也封装了起来,所以少了上面那句的后果是:
在CMakelist.txt里把cpp文件加入了executable里,cmake照样进行,build文件夹里会有输出文件,但是由于缺少上述语句,catkin并没有把这个当成一个包,所以devel文件夹不会把build的输出文件copy过来,而launch的时候,读的是devel文件夹里的输出文件,所以就会出现找不到的现象。这也可以解释为什么我当时把build文件夹里的二进制文件复制到devel/lib/learning_tf/里就可以正常launch。