实验要用到kobuki,kinectv2,做三维重建,用到RGBDSLAMV2开源代码和ROS系统,边学边记录
ROS中文社区
ROS中有很多各种函数库和工具,我们提供了四种默认安装方式,你也可以单独安装某个特定软件包。
桌面完整版安装:(推荐) 包含ROS、rqt、rviz、通用机器人函数库、2D/3D仿真器、导航以及2D/3D感知功能。
sudo apt-get install ros-jade-desktop-full
快速了解文件系统概念
Packages: 软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。
Manifest (package.xml): 清单,是对于’软件包’相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。
文件系统工具
程序代码是分布在众多ROS软件包当中,当使用命令行工具(比如ls和cd)来浏览时会非常繁琐,因此ROS提供了专门的命令工具来简化这些操作。
使用 rospack
rospack允许你获取软件包的有关信息。在本教程中,我们只涉及到rospack中find参数选项,该选项可以返回软件包的路径信息。
用法: rospack find [包名称]
示例:$ rospack find roscpp
应输出:YOUR_INSTALL_PATH/share/roscpp
使用 roscd
roscd是rosbash命令集中的一部分,它允许你直接切换(cd)工作目录到某个软件包或者软件包集当中。
用法:roscd [本地包名称[/子目录]]
示例: roscdroscpp使用Unix命令pwd来输出当前工作目录: pwd
你应该会看到:YOUR_INSTALL_PATH/share/roscpp
roscd只能切换到那些路径已经包含在ROS_PACKAGE_PATH环境变量中的软件包,要查看ROS_PACKAGE_PATH中包含的路径可以输入:
echo ROS_PACKAGE_PATH
export ROS_PACKAGE_PATH=/home/ada/Code/rgbdslam_catkin_ws/src:/opt/ros/kinetic/share:/home/ada/kinect/catin_ws/src
加入路径,告诉ROS系统在哪里搜索更多的ROS包。
如果有相同名称的多个包,ROS会选择上出现的ROS_PACKAGE_PATH 第一个包。
如此就不需要进工作目录下输入命令了!
(想到上篇,其实只要把kinect2的包加入路径应该就可以了!!没知识真可怕)
roscd log
使用roscd log可以切换到ROS保存日记文件的目录下。需要注意的是,如果你没有执行过任何ROS程序,系统会报错说该目录不存在。
如果你已经运行过ROS程序,那么可以尝试:$ roscd log
使用 roslsh
rosls是rosbash命令集中的一部分,它允许你直接按软件包的名称而不是绝对路径执行ls命令(罗列目录)。
用法:rosls [本地包名称[/子目录]]
示例:$ rosls roscpp_tutorialsian应输出:cmake package.xml srv
建立工作空间
创建catkin程序包
1. 程序包的组成
my_package/
CMakeLists.txt
package.xml package.xml文件提供有关程序包的元信息
每个目录下只能有一个程序包。这意味着在同一个目录下不能有嵌套的或者多个程序包存在.
一个简单的工作空间:
workspace_folder/ -- WORKSPACE工作空间
src/ -- SOURCE SPACE 源码目录
CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin
package_1/
CMakeLists.txt -- CMakeLists.txt file for package_1
package.xml -- Package manifest for package_1
...
package_n/
CMakeLists.txt -- CMakeLists.txt file for package_n
package.xml -- Package manifest for package_n
2. 创建一个catkin程序包
cd ~/ada_ws/src
现在使用catkin_create_pkg命令来创建一个名为’beginner_tutorials’的新程序包,这个程序包依赖于std_msgs、roscpp和rospy:
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
创建了名为brginner_tutorials文件夹,包含camkelists和package.cxml
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
3. 查看程序包的依赖关系
a. 直接依赖
rospack depends1 beginner_tutorials
(先source ../devel/setup.sh)这些依赖包保存在package.xml文件中
b. 间接依赖
比如rospy还有其它依赖包
rospack depends1 rospy
c. 一个程序包还可以有好几个间接的依赖包
幸运的是使用rospack可以递归检测出所有的依赖包。
4. 自定义package.xml
<description>The beginner_tutorials package</description>
描述标签
<!-- One maintainer tag required, multiple allowed, one person per tag -->
<!-- Example: -->
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
<maintainer email="ada@todo.todo">ada</maintainer>
维护标签
<!-- One license tag required, multiple allowed, one license per tag -->
<!-- Commonly used license strings: -->
<!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
<license>TODO</license>
许可标签
(对于本教程我们将使用BSD协议,因为ROS核心组件的剩余部分已经使用了该协议:
<license>BSD</license>)
build_depend
buildtool_depend
run_depend
test_depend
依赖项标签
除了catkin中默认提供的buildtool_depend,所有我们列出的依赖包都已经被添加到build_depend标签中。
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
在本例中,因为在编译和运行时我们需要用到所有指定的依赖包,因此还需要将每一个依赖包分别添加到run_depend标签中
<run_depend>roscpp</run_depend>
<run_depend>rospy</run_depend>
<run_depend>std_msgs</run_depend>
编译程序包
先source /opt/ros/kinetic/setup.sh
可以认为catkin_make是在CMake标准工作流程中依次调用了cmake 和 make
编译指定程序包
catkin_make [make_targets] [-DCMAKE_VARIABLES=…]
多个一起编译
# In a catkin workspace
$ catkin_make