转自:http://blog.sina.com.cn/s/blog_661159d50100ocqk.html
参考网址:http://www.ros.org/wiki/ROS/Tutorials/BuildingPackages
前面我们用roscreate-pkg建立package,这里我们根据系统关联来编译这些packages
1,系统关联
ROS package有时运行时需要连接外部库或者可执行程序。这些库或者程序的连接经常被关联到系统关联中。在一些情况下,这些系统关联不会被默认的安装,ROS提供了一个简单的工具--rosdep,用来下载和安装系统关联的。
ROS rospack必须在相应的package manifest申明,参考小海龟的例子,
$ roscd turtlesim
$ cat manifest.xml
得到结果:
<package>
<description brief="turtlesim">
turtlesim is a tool made for teaching ROS and ROS-PKGS.
</description>
<author>Josh Faust</author>
<license>BSD</license>
<review status="unreviewed" notes=""/>
<url>http://ros.org/wiki/turtlesim</url>
<depend package="roscpp"/>
<depend package="roslib"/>
<depend package="rosconsole"/>
<depend package="std_srvs"/>
<rosdep name="wxwidgets"/>
<export>
<cpp cflags="-I${prefix}/msg/cpp -I${prefix}/srv/cpp"/>
</export>
<platform os="ubuntu" version="9.04"/>
<platform os="ubuntu" version="9.10"/>
<platform os="ubuntu" version="10.04"/>
</package> -----得到turtlesim需要exwidgets
rosdep命令 ----根据ROS packages来安装系统变量
用法:
$ rosdep install [package]
例子:
$ rosdep install turtlesim
得到结果:
executing this script: -----如果已经安装
set -o errexit
#No Packages to install
set -o errexit -----如果没有安装
set -o verbose
if [ ! -f /opt/ros/lib/libboost_date_time-gcc42-mt*-1_37.a ] ; then
mkdir -p ~/ros/ros-deps
cd ~/ros/ros-deps
wget --tries=10 http://pr.willowgarage.com/downloads/boost_1_37_0.tar.gz
tar xzf boost_1_37_0.tar.gz
cd boost_1_37_0
./configure --prefix=/opt/ros
make
sudo make install
fi
if [ ! -f /opt/ros/lib/liblog4cxx.so.10 ] ; then
mkdir -p ~/ros/ros-deps
cd ~/ros/ros-deps
wget --tries=10 http://pr.willowgarage.com/downloads/apache-log4cxx-0.10.0-wg_patched.tar.gz
tar xzf apache-log4cxx-0.10.0-wg_patched.tar.gz
cd apache-log4cxx-0.10.0
./configure --prefix=/opt/ros
make
sudo make install
fi
if [ ! -f /opt/ros/lib/libboost_date_time-gcc42-mt*-1_37.a ] ; then
mkdir -p ~/ros/ros-deps
cd ~/ros/ros-deps
wget --tries=10 http://pr.willowgarage.com/downloads/boost_1_37_0.tar.gz
tar xzf boost_1_37_0.tar.gz
cd boost_1_37_0
./configure --prefix=/opt/ros
make
sudo make install
fi
if [ ! -f /opt/ros/lib/liblog4cxx.so.10 ] ; then
mkdir -p ~/ros/ros-deps
cd ~/ros/ros-deps
wget --tries=10 http://pr.willowgarage.com/downloads/apache-log4cxx-0.10.0-wg_patched.tar.gz
tar xzf apache-log4cxx-0.10.0-wg_patched.tar.gz
cd apache-log4cxx-0.10.0
./configure --prefix=/opt/ros
make
sudo make install
fi
2,编译packages
当所有的系统关联都已经被安装,我们就可以开始用 rosmake 命令编译我们创建好的package
rosmake命令 ---编译package
(1) 编译单个package
用法:
$ rosmake [package]
例子:
$ rosmake beginner_tutorials
得到结果:
[ rosmake ] Packages requested are: ['beginner_tutorials']
[ rosmake ] Logging to directory/home/jason/.ros/rosmake/rosmake_output-20110110-092837
[ rosmake ] Expanded args ['beginner_tutorials'] to:
['beginner_tutorials']
[ rosmake ] Checking rosdeps compliance for packages beginner_tutorials. This may take a few seconds.
[ rosmake ] rosdep check passed all system dependencies in packages
[rosmake-0] Starting >>> roslib [ make ]
[rosmake-0] Finished <<< roslib ROS_NOBUILD in package roslib
[rosmake-1] Starting >>> roslang [ make ]
[rosmake-0] Starting >>> rosconsole [ make ]
[rosmake-0] Finished <<< rosconsole ROS_NOBUILD in package rosconsole
[rosmake-0] Starting >>> std_msgs [ make ]
[rosmake-1] Finished <<< roslang ROS_NOBUILD in package roslang
No Makefile in package roslang
[rosmake-0] Finished <<< std_msgs ROS_NOBUILD in package std_msgs
[rosmake-0] Starting >>> xmlrpcpp [ make ]
[rosmake-1] Starting >>> rospy [ make ]
[rosmake-1] Finished <<< rospy ROS_NOBUILD in package rospy
[rosmake-0] Finished <<< xmlrpcpp ROS_NOBUILD in package xmlrpcpp
[rosmake-0] Starting >>> roscpp [ make ]
[rosmake-0] Finished <<< roscpp ROS_NOBUILD in package roscpp
[rosmake-0] Starting >>> beginner_tutorials [ make ]
[rosmake-1] Starting >>> rosout [ make ]
[rosmake-1] Finished <<< rosout ROS_NOBUILD in package rosout
[ rosmake ] All 2 linesbeginner_tutorials: 0.1 sec ] [ 1 Active 10/11 Complete ]
{-------------------------------------------------------------------------------
mkdir: cannot create directory `build': Permission denied
-------------------------------------------------------------------------------}
[ rosmake ] Output from build of package beginner_tutorials written to:
[ rosmake ] /home/jason/.ros/rosmake/rosmake_output-20110110-092837/beginner_tutorials/build_output.log
[rosmake-0] Finished <<< beginner_tutorials [FAIL] [ 0.09 seconds ]
[ rosmake ] Halting due to failure in package beginner_tutorials.
[ rosmake ] Waiting for other threads to complete.
[ rosmake ] Results:
[ rosmake ] Built 11 packages with 1 failures.
[ rosmake ] Summary output to directory
[ rosmake ] /home/jason/.ros/rosmake/rosmake_output-20110110-092837
(2) 编译多个packages
用法:
$ rosmake [package1] [package2] [package3]
例子:
$ rosdep install turtle_teleop rxtools
$ rosmake turtle_teleop roscpp_tutorials rospy_tutorials rxtools