ROS机器人高效编程(原书第3版)勘误、问题及资料汇总--持续更新
如果小伙伴发现书中错误,恳请批评指正,非常感谢。勘误在文末。
补充一行代码装ROS,适用于14.04LTS(indigo)和16.04LTS(Kinetic):
14.04:
wget https://raw.githubusercontent.com/oroca/oroca-ros-pkg/master/ros_install.sh && ./ros_install.sh %NAME_CATKIN_WS% %NAME_ROS_DISTRO_LOWERCASE%
(indigo示例如下)
wget https://raw.githubusercontent.com/oroca/oroca-ros-pkg/master/ros_install.sh && chmod 755 ./ros_install.sh && ./ros_install.sh catkin_ws_oroca indigo
16.04:
curl https://raw.githubusercontent.com/oroca/oroca-ros-pkg/master/ros_install.sh | bash -s %NAME_CATKIN_WS% %NAME_ROS_DISTRO_LOWERCASE%
(Kinetic示例如下)
curl https://raw.githubusercontent.com/oroca/oroca-ros-pkg/master/ros_install.sh | bash -s cws_oroca kinetic
|附资料:
第2版镜像链接;第3版镜像链接;ROS官网介绍;Github。
https://github.com/rosbook/effective_robotics_programming_with_ros
注意:请不要使用catkin_make编译,使用catkin build。具体如下:
ROS机器人高效编程 - 原书第三版教程源代码。
按照这里提供的官方说明,在兼容的Ubuntu发行版上安装ROS Kinetic。推荐Ubuntu 16.04 LTS。
安装OpenCV非免费版本库:
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository --yes ppa:xqms/opencv-nonfree
sudo apt-get install libopencv-nonfree-dev libopencv-nonfree2.4v5
创建一个工作区:
mkdir -p ~/dev/catkin_ws/src
cd ~/dev/catkin_ws/src
wstool init
下载moveit_simple_grasps存储库,因为它不再是debian的官方版本:
wstool set moveit_simple_grasps -y --git git@github.com:efernandez / moveit_simple_grasps.git
下载此代码库:
wstool set ros_book --git git@github.com:rosbook/effective_robotics_programming_with_ros.git
wstool up -j8
安装依赖项:
cd ..
rosdep install --from-paths src -iy
编译源代码:
source /opt/ros/$(rosversion -d)/setup.bash
catkin build -j4 -p4 --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo
source devel/setup.bash
----
|勘误:
书中代码部分有缺漏或排版问题,请参考对应源代码,如138,213,稍后会补充详细。
01. 216页,(此外,发布的消息将会在setup中宣传)更正为:此外,在setup中订阅发布的消息:
02. 225页,
03. 226页,(/imu/data主题是sensor_msg/imu)更正为:/imu/data主题对应的数据类型是sensor_msg/imu
04.
~持续更新~
如果困惑于使用哪一个版本的ROS,这里推荐Kinetic和Indigo,具体可以参考ROS年度指标报告。
ROS官方已经发布了2017年的年度ROS指标报告。您可以从这里下载15,并将其添加到 Metrics wiki第34页,您可以在其中找到所有以前版本的链接。
ROS官方在2011年开始收集指标。查看历史,可以看到社区的发展和演变。
衡量开源社区是非常困难的。公开和可再发行的性质意味着我们绝对不认识所有使用它的人,而且这是开放的一部分。这些指标可以提供对社区趋势的洞察,但不应被视为详尽无遗或甚至接近完整,而应视为一致的快照。(报告体现了趋势和发展)我们有关于设置镜像的公开说明,这些采集不包括私人或公共镜像的统计数据。公共镜像列在http://wiki.ros.org/Mirrors
每年我们都会提供相同的指标,以便观察趋势。不过,我们也希望更新这些指标,以纳入新的统计资料或涵盖未来我们认为有趣趋势的新方面。例如,我们从去年开始对架构的使用进行抽样,因为对armhf和arm64的兴趣越来越大,而i386现在已经不再是最受欢迎的架构。
在汇编这份报告时,有几个数据显示出来。最大的是,去年,我们将package.ros.org 5的唯一身份访问量增加了一倍以上。这是社区规模最大的代理商之一。诸如下载计数和带宽使用的其他统计数据可能高度依赖于在任何给定时间段内哪些软件包被释放。
两个统计数字是值得注意的异常值。一个是discourse.ros.org 1上的用户数量,目前有一个垃圾邮件攻击,新的未验证的用户被半自动创建。他们没有超过验证阶段,不能发布。但是,该网站包含他们的用户数,我没有一个很好的方式来排除未经验证的用户。7天后,系统会自动清除。另一个有点偏斜的统计数字是机器人的数量。今年我们从wiki.ros.org/Robots切换到http://robots.ros.org 4在切换过程中,有一个审查过程。但是,很明显,新网站的提交也是下降的。我们需要考虑使其更容易访问,因为我相信这个指标现在报表不足。
ROS官网机器人合集:http://robots.ros.org
----
目录
ROS是一个庞大的系统,许多人协同开发。为了合理的管理,我们已经写好了开发指导说明。请按照下面的指导说明,合理布局你的代码。
参考:
支持使用Git,Mercurial,Subversion, 和Bazaar进行代码管理。由于ROS社区是分散的,欢迎你将代码托管到任何公共访问的地方(比如GitHub, Bitbucket, Google Code). 主要的ROS基础代码会被发布到github.com的几个组织单元several organization units下面。关于建议的仓库使用说明参考RecommendedRepositoryUsage
针对每一个功能包,利用单独的bug tracker,实现bug报告,增强请求,和任务分配。经常性的,在本站的页面上,你会看的一些具体的bug tracker的相关链接。
对于代码的托管GitHub作为一个仓库的通用的bug tracker。
代码维护者将会为每个报告的问题创建一个里程式标记(milestone)。当问题被定位时,可以给报告者一个合适的反馈。这些里程标记就是ROS正式版(比如 Groovy or Hydro) 或者细分版本(比如 Hydro beta 1). 更多的是,当问题没被修复时,会赋以标记untargeted。这可能是由于开发者的时间紧迫或者可靠性的考虑。
为了让用户表达自己的想法,针对已发布的软件版本,测试是否已经修复bug,维护者应该要么,在关闭问题报告的时候,发布一个尝试版本,要么为每一个更细化的版本设置标记,在下个里程标记之前,标记问题报告。这样一来,对用户来说,让所包含的问题本身来决定发布版的bug是否已经被修复。
当你发现一个bug时,开启一个指派(ticket)。当你需要新功能的时候,打开一个指派。邮件或者发布到answers.ros.org或者邮件列表都有可能被遗忘。但是,指派的方式反而就不会那么容易忘记。
如果你不确定出现问题时涉及的的功能包或者问题确实是一个bug,请首先访问answers.ros.org。
package功能包由代码组织而成,而功能包组成一个单独的仓库responsitory。功能包是作为代码构建的基本单位。
尤其注意!建议,在GitHub上,在仓库的根目录创建一个README.md,用来向用户说明代码仓库的具体细节。建议,在ROS wiki页面设置链接到指定的包含的软件包。参照 this article 获取更多的帮助.
ROS功能包和系统的构建依赖于manifest.xml。
下面举一个roscpp节点的一个模板例子:
<package>
<description brief="BRIEF DESCRIPTION">
LONGER DESCRIPTION
</description>
<author>You/you@willowgarage.com</author>
<license>BSD</license>
<url>http://www.ros.org/wiki/YOURPACKAGE</url>
<depend package="roscpp"/>
</package>
下面是rospy的一个例子:
<package>
<description brief="BRIEF DESCRIPTION">
LONGER DESCRIPTION
</description>
<author>You/you@willowgarage.com</author>
<license>BSD</license>
<url>http://www.ros.org/wiki/YOURPACKAGE</url>
<depend package="rospy"/>
</package>
我们已经移植了所有最新的GUI到rqt,这些GUI都是QT基础的GUI框架。在fuerte使用wxWidgets之前,因交叉编译的兼容性太差,大部分已有的代码被重建。 因此对于新的GUI设计,考虑使用rqt。开发说明从这里获取(including license consideration when writing in python)。
基本的代码构建工具是CMake(more).
ROS 是开源.旨在让来自五湖四海的不同的用户和开发者们,从学生到企业家们,都可以得到帮助获取支持。
遵循Berne Convention版权,作为作者自动拥有版权,而不管有没有一个正式的声明。无论如何,显式的版权声明有助于长期性项目的管理。
ROS里的调试工具,包括但不限于:
一般性建议:
我们进行两个级别的测试:
我们已经构建了best practices and policies ,进行编写和运行测试test。
如果你在ROS系统下,开发ros-pkg 或者wg-ros-pkg,安装build farm 启动测试构代码搭建和自动测试在不同的芯片体系下。如果在你提交后,搭建或者测试停止工作,你应该获得一封邮件来告知相关的错误,希望来修复它。参考AutomatedTesting指导说明。
ROS社区代码的发布流程参考release页面
一旦有人使用的你的代码,你就有责任不要对他们所谓的对代码大幅改动,进行釜底抽薪。相反的,使用deprecation,意味着,对于它的移除用清单的形式,标记指定的特性或者内容不再支持。给用户些时间去适应,作为一个发布版的过程循环,就和移除一样。
弃用发生在多级情况下,包括:
大文件(大小超过1MB)经常不属于*-ros-pkg仓库代码,尤其是他们一般仅仅用在单元测试时。不管某些人是否构建了你的功能包,大的文件会影响checkout的仓库的时间和效率。
大的数据文件应该被托管到公共的web主网页。在web服务器上,你也可以仅仅放置你所需要的文件。文件的托管可以在download.ros.org. 请联系ros-release@lists.ros.org 获取更多信息。在你打开上传请求之前,鼓励你去查找是否已存在你所需要的文件。
下载文件,请使用catkin_download_test_data. 如果,你在更早的rosbuild时候,使用rosbuild_download_test_data(URL MD5SUM) 宏定义。比如:
catkin_download_test_data(
${PROJECT_NAME}_saloon.bag
http://downloads.foo.com/bags/saloon.bag
DESTINATION ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_SHARE_DESTINATION}/test
MD5 01603ce158575da859b8afff5b676bf9)
rosbuild_download_test_data(http://code.ros.org/svn/data/robot_pose_ekf/zero_covariance.bag test/zero_covariance.bag 0a51b4f5001f446e8466bf7cc946fb86)
----