自动驾驶(六十六)---------ROS学习笔记(2)

      前面介绍了ROS的基本概念, 还没介绍如何操作, 下面从操作层面结束ROS. 

1. 创建ROS工作空间

      $ mkdir -p ~/catkin_ws/src
      $ cd ~/catkin_ws
      $ catkin_make
      其中catkin_ws是自定义的工作空间名,也就是文件夹名。

2. 配置环境变量

      $ source devel/setup.bash   注意zsh: $ source devel/setup.zsh
      也可直接在.bashrc里写入:$ source ~/catkin_ws/devel/setup.bash   注意zshrc里: $ source ~/catkin_ws/devel/setup.zsh

3. 创建一个功能包

      $ cd ~/catkin_ws/src
      使用catkin_create_pkg命令来创建功能包:$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
      其中,beginner_tutorials是创建的功能包名,后面是该功能包依赖的三个功能包。运行完后可以看出在beginner_tutorials目录下创建了package.xml和CMakeLists.txt两个文件。

 4. 配置package.xml文件

      package.xml文件主要由4个标签组成,分别为描述标签、维护者标签、许可证标签、依赖项标签。
      package.xml包含了package的名称、 版本号、 内容描述、 维护人员、 软件许可、 编译构建工具、 编译依赖、 运行依赖等信息。实际上 rospack find 、 rosdep 等命令之所以能快速定位和分析出package的依赖项信息, 就是直接读取了每一个pacakge中的 package.xml 文件。 它为用户提供了快速了解一个pacakge的渠道。基本的框架如下:

             <pacakge> 根标记文件
             <name> 包名
             <version> 版本号
             <description> 内容描述
             <maintainer> 维护者
             <license> 软件许可证
             <buildtool_depend> 编译构建工具, 通常为catkin
             <depend> 指定依赖项为编译、 导出、 运行需要的依赖, 最常用
             <build_depend> 编译依赖项
             <build_export_depend> 导出依赖项
             <exec_depend> 运行依赖项
             <test_depend> 测试用例依赖项
             <doc_depend> 文档依赖项

5. 编写ROS程序

         ~/catkin_ws/src/功能包名 目录下,创建并编辑cpp程序文件(以hello.cpp为例)。

             $ cd ~/catkin_ws/src/beginner_tutorials
             $ touch hello.cpp
             $ gedit hello.cpp

          添加以下代码:
            #include <ros/ros.h>
            int main ( int argc , char ** argv) {
                  ros::init ( argc , argv , "hello");
                  ros::NodeHandle nh;
                  ROS_INFO_STREAM( "Hello , ROS! ");
             }

6. 编译ROS程序

        想要编译我们的程序, 首先需要声明程序所依赖的其他功能包, 我们的程序很简单只需要添加roscpp依赖, 如何添加依赖:

        1. CMakeLists.txt中找到find_package,添加roscpp:
               find_package(catkin REQUIRED COMPONENTS
                       #依次写上所依赖的功能包
                       roscpp
               )

        2. 修改package.xml,将roscpp添加至build_depend(编译依赖)和exec_depend(运行依赖)。

               <buildtool_depend>catkin</buildtool_depend>
               <build_depend>roscpp</build_depend>
               <build_export_depend>roscpp</build_export_depend>
               <exec_depend>roscpp</exec_depend>

         声明可执行文件, 需要在CMakeLists.txt中添加两行,来声明我们需要创建的可执行文件。
               add_executable(hello hello.cpp)
               target_link_libraries(hello ${catkin_LIBRARIES})
         其中 hello是我们想要生成的可执行文件的文件名,hello.cpp是生成此可执行文件所需的源文件列表。如果有多个源文件,把它们列在此处,并用空格将其区分开。第二行告诉Cmake当链接此可执行文件时需要链接哪些库(在上面的find_package中已经定义了)。

         编译工作区, 返回工作空间目录,然后使用catkin_make命令进行编译:         
               cd ~/catkin_ws
               $ catkin_make

                               
         完成编译后,将会在工作区中创建devel(开发空间,用来放置编译生成的可执行文件)和build(编译空间,用来储存工作空间编译过程中产生的缓存信息和中间文件)两个子目录。

7. 运行ROS程序

       hello 程序是一个节点(Node),需要节点管理器才可以正常运行,启动节点管理器后,用rosrun命令运行程序:

            $ roscore
            $ rosrun beginner_tutorials hello

 
发布了66 篇原创文章 · 获赞 115 · 访问量 82万+

猜你喜欢

转载自blog.csdn.net/zhouyy858/article/details/104520223