ROS 新手问题Q&A粗略合集——by 西工大一小学生
首先感谢flluo ,信任我,让我当了ROS群的管理员,说起来已经是第三个群了。。。其实我只是话痨而已,根本不是大神,爱丁堡学长才是大神。。。(话说我的挖的坑那么多,怎么填还是问题。。。)
随着ROS的普及,ROS开发者的壮大,大家水平层次不齐,很多是有关ubuntu linux的问题,或者一些非常基础可以自己解决的问题都拿到群上来说,我觉得这样不太好。。。。所以我尝试整理了一下常见的一些问题,以及解决方法或者寻求解决方法的途径,尽量增加大家的讨论质量。还有就是希望几个大神群主,或者Lee神、top,多组织线下聚会,这样一下子团结起来不是更好。
1.ROS安装部分:
大部分问题集中于apt-get 使用上
首先看下这个:http://jingyan.baidu.com/article/22a299b51648e09e19376ae7.html
遇到类似 unmet dependency 时候,说明软件包安装的依赖出问题了,估计是误删或者ROS安装的时候要求软件版本有误,这个主意一下:
主要集中于ubuntu 14.04 14.04.1 与之后的 ubuntu 14.04.2 在opengl版本上的一些分歧,我也被坑过的.......
遇到hash sum mismatch 的时候,有可能是你apt-get update 中途退出,直接装的时候会出这个问题:http://askubuntu.com/questions/41605/trouble-downloading-packages-list-due-to-a-hash-sum-mismatch-error
总之,apt-get出问题了,都不能算是ROS的问题,问ROS社区帮助不是很大偶......google是大家的好基友。
关于ROS deb软件包的概念:ROS 是一堆耦合程度很松的软件集合(除了一些通讯核心库和基础库,很多功能性的软件包之间完全独立)。安装位置一般在/opt/ros 下。ROS deb 安装是没有源码的,寻找源码要到wiki上的 source:标签寻找(详见之后的如何使用ROS wiki)
- ROS基础使用部分:
首先处理环境变量的问题,一开始,按照ROS install 做完之后,试着敲一下ROS的命令行工具来检测初始环境变量是否完好,比如roscore。
一般来说,使用
export | grep ROS
(这是我没配置进阶包类似于rosjava ros-android 没有设置多机等等的基础ROS环境设置,新手们可以照着这个看自己哪个地方有问题)
而缺哪些环境变量会出现哪种问题,这个实在是千奇百怪,我细说一下各个环境变量的含义,大家也不要太浮躁,耐心看完自己处理问题最好。
与使用ROS有关的环境变量:
运行时用到的:
$PATH :这个是你命令行中命令查找路径,换句话说,如果PATH 中没有你ROS相关的目录的话,是没办法使用命令行工具的,一般roscore not found 就是这个有问题。
$PYTHONPATH :这个是python寻找package时的路径,如果有误的话,import ROS相关的包就会找不到
构建时用到的:
$CPATH $CMAKE_PREFIX_PATH $LD_LIBRARY_PATH $PKG_CONFIG_PATH
$CMAKE_PREFIX_PATH :一堆主要和cmake有关的东西,出错也基本是一起出,出问题了自己的catkin_ws 构建就会出各种错。
ROS本身的环境变量:
1》ROS文件系统相关的:
$ROS_PACKAGE_PATH:(基本这就是50%以上问题的元凶)这个环境变量主要影响ROS文件系统工具查找ros package,指定几个地址去找相应的package,一般自建的catkin_ws 不把它的路径加入的话,是无法通过ROS命令行工具以及roslaunch 来运行或者调用里面的包的。(简单来说就是各种not found)
2》ROS核心通讯相关:
$ROS_ROOT:给出ROS 核心通讯组件的路径
$ROS_MASTER_URI:给出ROS MASTER的URI,一般是本机上,11311端口。
3》ROS多机通讯相关:
$ROS_IP/$ROS_HOSTNAME: 一般选一个用,多机连一起的时候,设置好这个就可以了,用于标示自己的在网络中的位置。
$ROS_NAMESPACE:表示本机上的namespace,本机上node中的name都会有这个namespace做前缀。
4》工具相关:
$ROS_WORKSPACE:使用rosinstall 和 rosws工具的同学看好了,这个表示这些工具的作用区域,而使用rosws init 会设置这个变量,如果没有设置这个以上工具使用会有问题的。
(还有一些新手基本不会用到的高阶环境变量就不说了。。。。)
仔细看$ROS_PACKAGE_PATH
然后就要说道这些环境变量的设置了:
一开始在apt-get install ros-desktop-full之后,教程就会让你
source /opt/ros/<distro>/setup.bash (大家一定要懂一点linux,不懂的我解释一下,就是执行setup.bash这个脚本)
这个脚本的作用:(翻译自脚本注释)设置各种环境变量,设置工具链(主要就是之前cmake一堆环境变量和设置),它会尽可能的撤销已有的设置的改变。(先source 自己工作空间的setup.bash 再source opt安装的setup.bash 关于自己工作空间的一些设置,比如ROS_PACKAGE_PATH就会没有的)
然后使用catkin_init_workspace , catkin_make 后会有source /home/<user>/catkin_ws/devel/setup.bash
之前的设置(opt那边的ROS setup)会overlay 到home这边的 setup里,所以基本source了自己工作空间里的setup.bash,以上说的环境变量以及设置都会做好,再有那些特殊需求,自己export 设置就好了。
然后就是关于/hom/<user>/文件夹下.bashrc是个啥:
这个文件是关于这个用户的bash shell 设置,每次以当前用户打开命令行都会运行一遍这个脚本,大家为了不用每次都source一遍,所以把命令写到了这个脚本里面。
关于这个脚本一些更具体的知识:http://blog.163.com/wang_hai_fei/blog/static/309020312008728333912/
(对新手的忠告:一般出问题90%都跟以上这些设置有关,先检查这些,自己体会做做笔记,更加重要的是要先了解linux和一些周边的知识,学习ROS不需要很着急,着急反而事倍功半)
- ROS 里进阶使用:
Ros主要工作流程 (坑略大)
Urdf的概念(这个得自己看机器人学导论然后再说才说的清楚)
Roslaunch 注意事项(这个坑略大,以后再填)
- gazebo使用问题:
最大的问题对于新手来说,就是gazebo开始的时候会去连接gazebo官网的远端模型数据库(remote model database),而国内你懂的,基本连不上,所以gazebo就会自己崩掉(gazebo 4以上版本不会出现了).(症状一般是wait timeout一类的提示,然后没有出来仿真界面自己退出了)
这个解决方法是:
先下载gazebo的模型文件集合,然后添加环境变量
完美解决。至于之后的各种问题,再讨论吧。。。。
- 怎么看wiki:
(终于到了本文的重点)
wiki的结构是这样的:基本按照package为单元来介绍
举个例子:
找源码看 source ,找单独的package教程看右边的package link
有拿oxygen生成的api文档,相关的教程(如果有的话),也有一些比较重要的信息,这些在源码文件中都找得到。。。。
下面格式基本是(1)算法简介,(2)使用方法,(3)节点信息(订阅发布那些信息,提供哪些service,有哪些参数)
查找具体功能包一般看
Browse software ,里面有各个版本发型的所有package列表,可以通过这个直接进入你感兴趣的package文档。
查找ROS基础库文档,也可以通过之前的方式,但是找到略麻烦
APIs页面的编排还是非常具有逻辑性的,这样也可以快速定位到你需要的基础库。
Wiki主页,找基础库看core library ,找具体硬件支持看robots,具体传感器支持找sensors(虽然支持版本有些旧)最后都是定位到具体的package上,具体参照package的阅读方法。
比较难找的但是常用的:
Roslaunch xml文件标签说明:http://wiki.ros.org/roslaunch/XML
Urdf xml 文件标签说明:http://wiki.ros.org/urdf/XML
Roscpp api 文档:http://docs.ros.org/jade/api/roscpp/html/
Rospy api 文档:http://docs.ros.org/jade/api/rospy/html/
(先整这么多,大三狗伤不起啊。。。。)
这个合集应该在群里分享
exbot@ubuntu:~$ export | grep ROS
declare -x ROSLISP_PACKAGE_DIRECTORIES=""
declare -x ROS_DISTRO="indigo"
declare -x ROS_ETC_DIR="/opt/ros/indigo/etc/ros"
declare -x ROS_MASTER_URI="http://localhost:11311"
declare -x ROS_PACKAGE_PATH="/opt/ros/indigo/share:/opt/ros/indigo/stacks"
declare -x ROS_ROOT="/opt/ros/indigo/share/ros"
运行后是这个样子,怎么搞。。求助
能不能告诉一下ros的群号?我这边只有linux系统打不开网站上的加入qq群。
109434898
vali vali good 小学生大神好样的
挺好的,谢谢大神分享总结