ROS串口例程---续集

[复制链接]
5717|1
手机看帖
扫描二维码
随时随地手机跟帖
最靓的仔|  楼主 | 2021-9-5 10:37 | 显示全部楼层 |阅读模式
本帖最后由 最靓的仔 于 2022-1-18 14:54 编辑

拍个ros连续剧,这次尽量不挖坑了。
之前发了一个ROS的串口例程,但是没有发出代码,代码都在github上,直接下载就好,下面贴出地址:
https://github.com/hipnuc/products/tree/master/examples/ROS
        测试环境:Ubuntu16.04   
        ROS版本:ROS Kinetic Kame
        测试设备:HI226 HI229
        1、创建工作空间
    在编写ros的程序时,首先要创建一个工作空间,类似一个编译环境,用来运行ros程序的编译环境,这个工作空间的名字是自定义的,不必像许多教程那样,都统统写成catkin_ws,一般来说,一些小的ros程序,都可以在这个工作空间中编译运行,比如,我命名成ros_test_ws,那么我一些关于ros的程序都可以在这个文件下编译运行调试,除非是新成立了一个项目,而且这个项目很大,那么为了以后的代码管理,最好是重新创建一个工作空间。
     在创建工作空间之前,先确认一下ros的环境变量是否设置成功,
     打开terminal,输入:export | grep ROS   
      如果出现如下信息
      declare -x ROSLISP_PACKAGE_DIRECTORIES="\"  
      declare -x ROS_DISTRO="\"kinetic\""      
      declare -x ROS_ETC_DIR="\"/opt/ros/kinetic/etc/ros\""     
      declare -x ROS_MASTER_URI="\"http://localhost:11311\""      
      declare -x ROS_PACKAGE_PATH="\"/home/linux/ros_ws/src:/opt/ros/kinetic/share\""         
      declare -x ROS_PYTHON_VERSION="\"2\""      
      declare -x ROS_ROOT="\"/opt/ros/kinetic/share/ros\""
     declare -x ROS_VERSION="\"1\""  
      如果有已经创建好的工作空间,那么他的路径就会跟在 ROSLISP_PACKAGE_DISECTORIES的后边。
      如果没有这些提示,请先配置工作环境。
     
     接下来创建工作空间:
         打开termina,依次l输入:
        $ mkdir -p ~/serial_imu_ws/src     //创建两个目录
        $ cd ~/serial_imu_ws/src               //进入到子目录
        $ catkin_init_workspace                //初始化工作空间
        $ cd ~/serial_imu_ws                    //回到工作空间的主目录
        $ catkin_make                              //编译环境
        $  ls                                              //查看编译成功之后,产生了什么
         一般会出现两个新的文件:build 和 devel 文件,还有一个用户自己创建的src文件。
        在这里得说一下ros的目录结构,不然容易懵:
          9740c1020accc9febcb1e74fb68d7c7.jpg            
        (穷的没有干净的A4纸了,就用卫生纸对付一下,别喷我)
        位于最上层就是工作空间了,编译ros工程时,一定要回到这个目录下,进行编译,也就执行catkin_make
       然后它有三个子目录,src,build,devel,完整的应该是四个,第四个是install
       src是源码空间
       build是编译环境
       devel是开发环境
       install是安装环境
       工作空间的名称可以任意命名,再强调一下,执行catkin_make命令,必须在这个目录执行,catkin是ros自己定义的一套编译系统,是CMake的扩展。
        src文件夹是需要自己创建,而且这个源码空间只能叫src,不可以随意变动
        build 和 devel 这两个文件夹由编译命令    -> catkin_make              命令自动创建的
        install 文件夹是由编译命令加install           -> catkin_make install    命令自动创建。
        
        (1)、src叫源码空间
              故名思意,这个目录下就是用来存放用户自己构建的代码。这些代码是用来实现一些功能,也叫功能包。默认自带一个CMakeList.txt文件,这个文件是    自动生成的,基本不用修改。
              这个目录下可以创建多个功能包,每个功能包是ros文件系统种组织程序文件的基本的单元,是编译系统的基本单元。一个功能包下必须包含CMakeList.txt和package.xml这两个文件,不过这两个文件也是在创建功能包的时候自动生成的,但是需要用户进行相应的修改。注意这里的CMakeList.txt,是功能包里边的,上一段说到的CMakeList是在src的目录下,不要混了。

              src的目录下有:CMakeList.txt       A_package    B_package    C_package ......
              A_package目录下有:CMakeList.txt     package.xml      src     msg    ......
        之后,本文说到的修改CMakeList文件,默认就是修改具体的某个功能包里边的CMakeList.txt文件。(达成共识)
      那么接下来就简单说说,CMakeList.txt和package.xml这俩文件
              先聊CMakeList吧,聊完CMakeList,在谈package。


             CMakeList.txt文件简单说说
               catkin是基于这个CMake实现的,用的语法都基本一致,就说一下常用的吧,都说完的话,估计可以出书了,哈哈。
           cmake_minimum_required():  CMake的版本号
           project():工程名字
                                     1.png   
          find_package():添加外部依赖
             加载catkin种的变量,同时添加roscpp,std_msgs,rospy,serial等用户定义的依赖包。                                                                                 
                                     2.png    
           include_directories():添加头文件路径
             这个很好理解,有时候这个头文件太多了,如果都分散开,那个在管理维护的时候,就很不方便,所以往往都会把这些头文件集中起来,放在一个文件中,比如在功能包文件夹下创建一个include这么个文件夹,我把该功能包所有的头文件集中存放在这里,那么在就得把这个路径写在这个语句的括号里边,如果在其他的路径,正好又要使用这个头文件,就把这个头文件的路径添加到这里。不过目前我还菜的一批,没那么多头文件,所以就没有集中,都散开了。
                                    5.png
           add_library(): 生成库文件
                  就是可以把多个源文件编译成库文件
                  add_library(lib_d   libsrc_a.cpp   libsrc_b.cpp  libsrc_c.cpp ...)
           add_executable(): 生成可执行文件
                    就是可以把多个源文件编译成可执行文件
                    add_executable(node_d   src_a.cpp    src_b.cpp    src_c.cpp src_x.c    ....)           
                    对,你没看错,还可以添加  .c   文件
           add_dependencies():添加依赖项,在使用message,action,serivce的时候需要使用
                  add_dependencies(A_target &{catkin_EXPORTED_TARGETS})
                  add_dependencies(A_target &{&{PROJECT_NAME}_EXPORTED_TARGETS}
           add_definitions():在我这里是添加编译标准
                    add_definitions(-std=c99)
           target_link_libraries():链接库文件
                    为可执行文件链接库文件
                     target_link_libraries(node_d &{catkin_LIBRARIES})                                  6.png
          (2)、build叫编译环境
          (3)、devel叫开发环境
          (4)、install是安装环境
        
        2、创建topic
        3、添加自定义msg
        4、编写launch文件
未完,继续补充中。。。。。











使用特权

评论回复
逍遥李| | 2021-10-20 16:31 | 显示全部楼层
楼主这个vida纸还能这么用啊,很好啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

11

帖子

1

粉丝