精华内容
下载资源
问答
  • 简单ROS功能包创建
    千次阅读
    2022-02-07 21:11:14

    1、创建工作空间
      mkdir -p demo02_ws/src(必须得有 src)
      cd demo02_ws
      catkin_make
    2、启动 vscode
      cd demo02_ws
      code .
    3、vscode 中编译 ros
      快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build
      可以点击配置设置为默认,修改.vscode/tasks.json 文件
     -----------------------------------------------------------------------
    {
    // 有关 tasks.json 格式的文档,请参见
        // https://go.microsoft.com/fwlink/?LinkId=733558
        "version": "2.0.0",
        "tasks": [
            {
                "label": "catkin_make:debug", //代表提示的描述性信息
                "type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
                "command": "catkin_make",//这个是我们需要运行的命令
                "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”code
                "group": {"kind":"build","isDefault":true},
                "presentation": {
                    "reveal": "always"//可选always或者silence,代表是否输出信息
                },
                "problemMatcher": "$msCompile"
            }
        ]
    }
    ----------------------------------------------------------------------------
    4 创建 ROS 功能包
    选定 src 右击 ---> create catkin packag
     设置包名  添加依赖roscpp rospy std_msgs
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    一、C++ 实现                                                                                  
    1、在功能包的src 下新建 cpp 文件                                                                 
    -----------------------------------------------------------------------------------              
    /*                                                                                           
        控制台输出 HelloVSCode !!!                                                                
                                                                                                    
    */                                                                                             
    #include "ros/ros.h"                                                               
                                                                            
    int main(int argc, char *argv[])
    {
        setlocale(LC_ALL,"");
        //执行节点初始化
        ros::init(argc,argv,"HelloVSCode");

        //输出日志
        ROS_INFO("Hello VSCode!!!哈哈哈哈哈哈哈哈哈哈");
        return 0;
    }
    -------------------------------------------------------------------------------------
    修改 .vscode/c_cpp_properties.json
    设置 "cppStandard": "gnu17"
           "cppStandard": "c++17"
    配置 CMakeLists.txt
    C++ 配置:
    ----------------------------
    -136 add_executable(源文件名 src/C++源文件名.cpp  )                     -
    -------------------------------
    -149 target_link_libraries(节点名称-
    -150   ${catkin_LIBRARIES}        -
    -151 )                            -
    --------------------------------
    编译执行
    编译: ctrl + shift + B
    执行:cd 文件名
          roscore
          cd 文件名(另一个指令框)
          rosrun 包名 节点名
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    二、python实现
    在 功能包 下新建 scripts 文件夹,添加 python 文件(.py结尾),并添加可执行权限
    ------------------------------------------------------------------------------
    #! /usr/bin/env python
    # -*- coding: utf-8 -*-

    """
        Python 版本的 HelloVScode,执行在控制台输出 HelloVScode
        实现:
        1.导包
        2.初始化 ROS 节点
        3.日志输出 HelloWorld


    """

    import rospy # 1.导包

    if __name__ == "__main__":

        rospy.init_node("Hello_Vscode_p")  # 2.初始化 ROS 节点
        rospy.loginfo("Hello VScode, 我是 Python ....")  #3.日志输出 HelloWorld
    ------------------------------------------------------------------------------
    添加权限:scripts右击-》在集成终端打开  chmod +x *.py回车 ll回车
    配置 CMakeLists.txt
    162 catkin_install_python(PROGRAMS
    163 scripts/自定义文件名.py
    164 DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
    165   )
    --------------------------------
    编译执行
    编译: ctrl + shift + B
    执行:cd 文件名
          roscore
          cd 文件名(另一个指令框)
          source ./devel/setup.bash
          rosrun 包名 节点名.py

    更多相关内容
  • ROS2学习笔记之创建自己的功能包背景前期准备学习内容1. 创建一个包2. 编译新建的包3 Source工作空间的配置文件4 使用新建的包5. 查看包的内容6. 自定义 package.xml总结 学习目标: 使用CMake或Python创建一个新的包...
  • 1.一个终端打开ros管理器 roscore 2.另一个终端打开ros的海龟节点,run一个新节点 rosrun turtlesim turtulesim_node 3添加一个控制命令输入 rosrun turtlesim turtle_teleop_key 4 查看总体运行的节点...

    1.常见命令汇总

    小海龟的自由运动仿真
    1.一个终端打开ros管理器

    roscore
    

    2.另一个终端打开ros的海龟节点,run一个新节点

    rosrun turtlesim turtulesim_node
    

    3添加一个控制命令输入

    rosrun turtlesim turtle_teleop_key
    

    4 查看总体运行的节点情况

    rqt_graph
    

    在这里插入图片描述可以看到由2个node组成,由键盘的控制端teleop_turtle 通过topic 即/turtle/cmd_vel 发送先关控制指令到 turtlesim来控制显示画面里面乌龟的游动.(左右控制专项,上下控制前进后退)

    同时也记录一下常用的其他命令:
    在这里插入图片描述在这里插入图片描述

    (1)rosnode

    rosnode is a command-line tool for printing information about ROS Nodes.
    打印节点信息
    Commands:
    	rosnode ping	test connectivity to node
    	rosnode list	list active nodes
    	rosnode info	print information about node
    	rosnode machine	list nodes running on a particular machine or list machines
    	rosnode kill	kill a running node
    	rosnode cleanup	purge registration information of unreachable nodes
    

    例如查看turtlesim这个节点的相关信息:

    ztfmars@GL503:~$ rosnode info /turtlesim 
    
    --------------------------------------------------------------------------------
    Node [/turtlesim]
    Publications: 
     * /rosout [rosgraph_msgs/Log]
     * /turtle1/color_sensor [turtlesim/Color]
     * /turtle1/pose [turtlesim/Pose]
    
    Subscriptions: 
     * /turtle1/cmd_vel [geometry_msgs/Twist]
    
    Services: 
     * /clear
     * /kill
     * /reset
     * /spawn
     * /turtle1/set_pen
     * /turtle1/teleport_absolute
     * /turtle1/teleport_relative
     * /turtlesim/get_loggers
     * /turtlesim/set_logger_level
    
    
    contacting node http://GL503:36561/ ...
    Pid: 15418
    Connections:
     * topic: /rosout
        * to: /rosout
        * direction: outbound
        * transport: TCPROS
     * topic: /turtle1/cmd_vel
        * to: /teleop_turtle (http://GL503:33687/)
        * direction: inbound
        * transport: TCPROS
    

    (2)rostopic

    rostopic is a command-line tool for printing information about ROS Topics.
    可以用来打印和发布相关话题内容
    Commands:
    	rostopic bw	display bandwidth used by topic
    	rostopic delay	display delay of topic from timestamp in header
    	rostopic echo	print messages to screen
    	rostopic find	find topics by type
    	rostopic hz	display publishing rate of topic    
    	rostopic info	print information about active topic
    	rostopic list	list active topics
    	rostopic pub	publish data to topic
    	rostopic type	print topic or field type
    

    例如发布一条让海龟运动的指令(其实输入完了 …cmd_vel按下连续2次tab可以自动不全):

    rostopic pub /turtle1/cmd_vel -r 10 geometry_msgs/Twist "linear:
      x: 0.0
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.0"
    

    其中linear表示线速度,angular表示转动角度,-r表示一直发布(不加的话,就是只发布一次)后面是频率即 10次/s. ros里面默认的速度都是 m/s, 角度都是 rad/s

    (3) rosservice
    ros启动的相关服务的显示和控制

    	Commands:
    		rosservice args	print service arguments
    		rosservice call	call the service with the provided args
    		rosservice find	find services by service type
    		rosservice info	print information about service
    		rosservice list	list active services
    		rosservice type	print service type
    		rosservice uri	print service ROSRPC uri
    Type rosservice <command> -h for more detailed usage, e.g. 'rosservice call -h'
    

    例如在指定位置生成新海龟

    rosservice call /spawn "x: 10.0
    y: 8.0
    theta: 0.0
    name: 'turtule_new'"
    

    在这里插入图片描述
    (4)rosbag

    Usage: rosbag <subcommand> [options] [args]
    主要是用来储存和记录信息和操作数据
    A bag is a file format in ROS for storing ROS message data. The rosbag command can record, replay and manipulate bags.
    
    Available subcommands:
       check  	Determine whether a bag is playable in the current system, or if it can be migrated.
       compress  	Compress one or more bag files.
       decompress  	Decompress one or more bag files.
       filter  	Filter the contents of the bag.
       fix  	Repair the messages in a bag file so that it can be played in the current system.
       help  
       info  	Summarize the contents of one or more bag files.
       play  	Play back the contents of one or more bag files in a time-synchronized fashion.
       record  	Record a bag file with the contents of specified topics.
       reindex  	Reindexes one or more bag files.
    
    For additional information, see http://wiki.ros.org/rosbag
    

    ( 5 ) rosrun

    Usage: rosrun [–prefix cmd] [–debug] PACKAGE EXECUTABLE [ARGS]
    rosrun will locate PACKAGE and try to find
    an executable named EXECUTABLE in the PACKAGE tree.
    If it finds it, it will run it with ARGS.
    用来启动一个安装包下面可执行文件的命令,如果找到的话,就会送入ARGS参数.

    2.工作空间

    • 结构
      src -> c++源码所在位置;
      build-> 编译过程的中间文件所在位置;
      devel-> 开发过程中的中间文件或者可执行文件所在位置;
      install -> 最终发行的可执行文件所在的位置,可能会devel有重叠;

      在这里插入图片描述- 创建工作空间
      注意:
      catkin_init_workspace :
      初始化工作空间,是在src之中执行的,执行后会生成源文件的cmakelist.txt; 
      catkin_make :
      编译命令是在根目录文件下执行的,即~/catkin_ws, 执行后会在根目录生成build,devel文件夹及其内部的编译文件;
      catkin_make install :
      最后的生成执行文件过程的执行,也是在根目录下,会生成install文件夹的话;
      source devel/setup.bash :
      让所有ROS环境变量生效
      在这里插入图片描述
    • 创建功能包
      在这里插入图片描述注意:
      创建功能包的过程都是在src文件夹之中,会在src文件夹之中生成功能包的文件夹.里面也是包括 include,src,cmakelist.txt,package.xml的一整套;
      catkin_make编译过程都是在根目录之中的.
      另外,每一个功能包里面都是存在cmakelist.txt(编译规则和内容定义) 和 packages.xml(编译依赖项,可以后期通过手动添加的)

      在这里插入图片描述

    3.publist话题发布

    话题模型:
    在这里插入图片描述
    接上一章节内容:
    (1)在建立工作空间之后,创建工作包.
    注意添加上所使用的依赖项,例如本例子中需要使用ros的c++包,消息发送,定位信息,turtle节点信息,所以就写上了roscpp, std_msg, geometry_msgs,turtlesim
    在这里插入图片描述(2)创建发布者代码
    将相关代码命名为velocity_publisher.cpp, 放置在ros文件夹根目录/src/learning_topic/src之中
    在这里插入图片描述
    (3)配置cmaklist.txt
    注意,此时的cmakelist.txt是新建的那个功能包里面的cmakelist.txt,即ros文件夹根目录/src/learning_topic/
    在build表示的内容末尾增加如下2句:

    add_executable(velocity_publisher src/velocity_publisher.cpp)
    target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
    

    在这里插入图片描述注意:编译完成之后,会在devel/lib之下发现安装包的可执行文件的文件夹 learning_topic,里面有编译生成的可执行文件velocity_publisher
    (4)编译并且发布运行
    注意:
    编译一定是在你的ROS项目的根目录哦!如果你要是发现learning_topic话题没有生效的话,再去执行一下soruce devel/setup.bash在本窗口,之后在本窗口执行运行发布命令的ros指令.
    或者
    直接将当前工程加入到shell环境里去

    echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
    source ~/.bashrc
    

    在这里插入图片描述

    注意:如果使用python文件的话,就不用进行编译了,选择这个python文件-> 右键->属性->可作为执行文件(画上勾),直接运行rosrun learning_topic xxx.py 即可运行

    4. 自定义话题的发布和接受过程

    在这里插入图片描述

    4.1 问题描述

    第3节演示的是向系统已有的一个节点(turtle_sim)系统里面根据已有的话题内容,发送固定内容.我们现在自定义2个节点(person_publisher / person_subscriber),通过一个自定义的话题(/person_info)来进行通信.
    因为相关依赖包稍微有一点不同, 可以继续 第3节继续往下做. 或者重新新建一个功能包

    case1: 完全重新做

    (1) 首先建立ros空间,这个参照第2部分内容即可
    (2) 复用前面的learning_tpic功能包,只是修改一下相关的packge.xml 和里面的cmaklist.txt;
    并且在learning_tpic文件夹内,新建msg文件夹,并且在里面新建Person.msg文件.具体内容参见如下:
    在这里插入图片描述(3) 进入功能包learning_tpic\src文件夹,新建两个cpp文件person_publisher.cpp, person_subscriber.cpp
    person_publisher.cpp:

    /***********************************************************************
    Copyright 2020 GuYueHome (www.guyuehome.com).
    ***********************************************************************/
    
    
    /**
     * 该例程将发布/person_info话题,自定义消息类型learning_topic::Person
     */
     
    #include <ros/ros.h>
    #include "learning_topic/Person.h"
    
    int main(int argc, char **argv)
    {
        // ROS节点初始化
        ros::init(argc, argv, "person_publisher");
    
        // 创建节点句柄
        ros::NodeHandle n;
    
        // 创建一个Publisher,发布名为/person_info的topic,消息类型为learning_topic::Person,队列长度10
        ros::Publisher person_info_pub = n.advertise<learning_topic::Person>("/person_info", 10);
    
        // 设置循环的频率
        ros::Rate loop_rate(1);
    
        int count = 0;
        while (ros::ok())
        {
            // 初始化learning_topic::Person类型的消息
        	learning_topic::Person person_msg;
    		person_msg.name = "Tom";
    		person_msg.age  = 18;
    		person_msg.sex  = learning_topic::Person::male;
    
            // 发布消息
    		person_info_pub.publish(person_msg);
    
           	ROS_INFO("Publish Person Info: name:%s  age:%d  sex:%d", 
    				  person_msg.name.c_str(), person_msg.age, person_msg.sex);
    
            // 按照循环频率延时
            loop_rate.sleep();
        }
    
        return 0;
    }
    

    person_subscriber.cpp:

    /***********************************************************************
    Copyright 2020 GuYueHome (www.guyuehome.com).
    ***********************************************************************/
    
    /**
     * 该例程将订阅/person_info话题,自定义消息类型learning_topic::Person
     */
     
    #include <ros/ros.h>
    #include "learning_topic/Person.h"
    
    // 接收到订阅的消息后,会进入消息回调函数
    void personInfoCallback(const learning_topic::Person::ConstPtr& msg)
    {
        // 将接收到的消息打印出来
        ROS_INFO("Subcribe Person Info: name:%s  age:%d  sex:%d", 
    			 msg->name.c_str(), msg->age, msg->sex);
    }
    
    int main(int argc, char **argv)
    {
        // 初始化ROS节点
        ros::init(argc, argv, "person_subscriber");
    
        // 创建节点句柄
        ros::NodeHandle n;
    
        // 创建一个Subscriber,订阅名为/person_info的topic,注册回调函数personInfoCallback
        ros::Subscriber person_info_sub = n.subscribe("/person_info", 10, personInfoCallback);
    
        // 循环等待回调函数
        ros::spin();
    
        return 0;
    }
    

    (4) 在learning_tpic\cmakelist.txt修改一下编译规则:
    在这里插入图片描述
    (5) 在项目的根文件,编译整体功能包:

    catkin_make
    

    可以在编译文件夹devel/lib/learning_tpic中看到新生成的2个可执行文件, person_publisher, person_subscriber
    (6) 运行编译环境生效,并且启动窗口执行

    source devel/setup.bash
    

    重启3个窗口,分别执行如下命令,开始收发指令:

    roscore
    rosrun learning_tpic person_subscriber
    rosrun learning_tpic person_publisher
    

    case2: 继续第3节往下做

    (1) 创建ros空间,这个部分参照第2部分
    (2) 创新新的功能包, new_topic

    catkin_create_pkg new_topic roscpp rospy std_msgs geometry_msgs turtlesim message_generation
    

    注意依赖项,只是增加了一个message_generatio

    (3) 创建好了之后,进入功能包new_topic\src文件夹,新建两个cpp文件person_publisher.cpp, person_subscriber.cpp, 具体内容参照case1

    (4) 在new_topic文件夹同样新建msg文件夹,在里面新建Persion.msg,参照case2

    (5) 修改package.xml文件夹:

      <build_export_depend>message_generation</build_export_depend>
      <exec_depend>message_runtime</exec_depend>
    

    (6) 修改new_topic\cmaklist.txt

    ################################################
    ## Declare ROS messages, services and actions ##
    ################################################
    ;;;;
    #添加依赖项声明
    add_message_files(FILES Person.msg)
    generate_messages(DEPENDENCIES std_msgs)
    
    ###################################
    ## catkin specific configuration ##
    ###################################
    ## The catkin_package macro generates cmake config files for your package
    ## Declare things to be passed to dependent projects
    ## INCLUDE_DIRS: uncomment this if your package contains header files
    ## LIBRARIES: libraries you create in this project that dependent projects also need
    ## CATKIN_DEPENDS: catkin_packages dependent projects also need
    ## DEPENDS: system dependencies of this project that dependent projects also need
    # 去掉注释项目内容,修改如下
    catkin_package(
    #  INCLUDE_DIRS include
      LIBRARIES new_topic
      CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime
    #  DEPENDS system_lib
    ###########
    ## Build ##
    ###########
    ;;;;;
    #添加独立话题(发送/接受方,话题是:person_info),设置编译的可执行文件,并且关联相关链接库/添加依赖项
    add_executable(person_publisher_new src/person_publisher.cpp)
    target_link_libraries(person_publisher_new ${catkin_LIBRARIES})
    add_dependencies(person_publisher_new ${PROJECT_NAME}_generate_messages_cpp)
    
    add_executable(person_subscriber_new src/person_subscriber.cpp)
    target_link_libraries(person_subscriber_new ${catkin_LIBRARIES})
    add_dependencies(person_subscriber_new ${PROJECT_NAME}_generate_messages_cpp)
    
    
    

    (7) 在整体项目文件的根目录中执行编译命令:

    catkin_make
    

    可以在编译文件夹devel/lib/new_topic中看到新生成的2个可执行文件, person_publisher_new, person_subscriber_new
    (8) 运行编译环境生效,并且启动窗口执行

    source devel/setup.bash
    

    重启3个窗口,分别执行如下命令,开始收发指令:

    roscore
    rosrun new_topic person_subscriber_new
    rosrun new_topic person_publisher_new 
    

    可以看到具体通信过程和信息:
    在这里插入图片描述

    展开全文
  • ROS2通过命令创建工作空间和功能包,vscode对ROS2的支持比ROS1少,不能直接在vscode中创建功能包,因此,ROS2主要是通过在终端中使用命令的方式创建和编译功能包。 一、创建工作空间 打开终端界面,通过命令mkdir -...


    前言

    ROS2通过命令创建工作空间和功能包,vscode对ROS2的支持比ROS1少,不能直接在vscode中创建功能包,因此,ROS2主要是通过在终端中使用命令的方式创建和编译功能包。


    一、创建工作空间

    打开终端界面,通过命令mkdir -p xxx_ws/src创建一个ROS2工作空间。

    二、创建功能包

    cd进入工作空间中的src文件夹,通过以下命令来创建一个功能包:

    ros2 pkg create --build-type ament_cmake YOUR_PAK_NAME --dependencies rclcpp std_msgs
    

    在这里插入图片描述
    此时能看到终端中打印了一堆提示内容,cd进入功能包目录,可以看到目录下多了CMakeLists.txt、include、src等文件,说明功能包已经被创建成功。


    三、编译功能包

    第二步已经将功能包创建完成了,此时我们需要对功能包进行编译,ROS1编译是通过catkin_make命令来编译,ROS2会有所不同,ROS2是通过colcon build命令对功能包进行编译,在输入该命令前需要返回到工作空间目录下。该命令会编译工作空间中的所有功能包,如果工程比较大,功能包比较多的时候,编译所有功能包会需要很长的时间,所有我们经常需要只编译工作空间中的一个功能包,可以使用以下命令来编译工作空间中的一个功能包colcon build --packages-select YOUR_PKG_NAME
    编译完成后,在工作空间目录下我们能看到多了几个文件夹,install、log、build,这三个文件夹分别是用于存储编译后的执行文件、日志文件和编译的过程文件。


    总结

    至此,我们的工作空间和功能包已经创建完成,接下来就可以使用vscode来编写代码了。

    展开全文
  • 描述:这篇文章介绍如何用roscreate-pkg或catkin创建一个新的功能包,并用rospack列出功能包的依赖关系。1、catkin功能包的组成要组成一个catkin功能包,必须满足如下相关条件:• 功能包必须包含一个catkin兼容的...

    描述:这篇文章介绍如何用roscreate-pkg或catkin创建一个新的功能包,并用rospack列出功能包的依赖关系。

    1、catkin功能包的组成

    要组成一个catkin功能包,必须满足如下相关条件:

    •      功能包必须包含一个catkin兼容的注释文件package.xml。

    o      package.xml文件提供有关功能包的元信息;

    •      功能包必须包含采用catkin的CmakeLists.txt文件

    o      例外情况是metapackages不必包含CmakeLists.txt

    •      在一个文件夹中不允许出现多个功能包

    o      这意味着多个功能包不能共享一个路径,也不允许功能包之间相互嵌套包;

    最简单的功能包组成如下所示:

    •      my_package/

    •        CMakeLists.txt

    •        package.xml

    2、catkin Workspace里的功能包

    推荐在catkin workspace下生成并编译catkin 功能包,当然,catkin功能包也可单独编译。catkin  workspace的文件组织形式如下所示:

    •      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

    在创建catkin功能包之前,我们先创建一个空的catkin workspace,命名为catkin_ws,接下来的练习都在这个catkin_ws下进行;

    3、创建catkin功能包

    接下来将会阐述如何利用catkin_create_pkg命令工具生成一个新的catkin功能包,并介绍catkin功能包的用途;

    首先,改变路径到catkin workspace的src目录内;

    # You should have created this in the Creating a Workspace Tutorial

    $cd~/catkin_ws/src

    现在使用catkin_create_pkg命令创建名字为beginner_tutorials的功能包,并设置这个新功能包依赖于std_msg,roscpp和rospy;

    ?1 $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

    这将会创建一个beginner_tutorials的文件夹,这个文件夹内会自动生成package.xml文件和CmakeLists.txt文件,这个两个文件会依据你对catin_create_pkg命令的设置参数填写一些信息;

    Catkin_create_pkg后面的参数需包含功能包的名字及所创建功能包的一些依赖选项:

    # This is an example, do not try to run this

    # catkin_create_pkg [depend1] [depend2] [depend3]

    4、功能包依赖关系

    4.1 直接(一级)依赖关系

    在使用catkin_create_pkg时,一些依赖的功能包需要提供出来,这些直接(一级)依赖关系可以通过命令工具rospack查看;

    ?1 $ rospack depends1 beginner_tutorials

    •      std_msgs

    •      rospy

    •      roscpp

    就像看到的一样,rospack列出了用catkin_create_pkg创建时设置的依赖功能包。这些依赖功能包信息被保存在package.xml文件内;

    $ roscd beginner_tutorials

    $catpackage.xml

    •     

    •      ...

    •        catkin

    •        roscpp

    •        rospy

    •        std_msgs

    •      ...

    •     

    4.2 间接依赖关系

    在很多情况下,依赖功能包本身也需要自己的依赖功能包,例如,rospy就会需要一些依赖功能包;

    $ rospack depends1 rospy

    •      genpy

    •      rosgraph

    •      rosgraph_msgs

    •      roslib

    •      std_msgs

    一个功能包会需要很多间接的依赖功能包,幸运的是,rospack可以次序检测到所有嵌套的依赖功能包;

    $ rospack depends beginner_tutorials

    cpp_common

    rostime

    roscpp_traits

    roscpp_serialization

    genmsg

    genpy

    message_runtime

    rosconsole

    std_msgs

    rosgraph_msgs

    xmlrpcpp

    roscpp

    rosgraph

    catkin

    rospack

    roslib

    rospy

    5、 设置生成的功能包

    这一部分将会逐行查看catkin_create_pkg自动生成的各个文件,并根据需要修正它们;

    5.1 设置文件package.xml

    在你新创建的功能包内会产生一个package.xml文件,现在我们查看一下文件package.xml,看哪些元素是我们尤其要关注的;

    5.1.1 描述标签

    首先需要更新的是描述标签:

    The beginner_tutorials package

    根据你的需要,改变这些描述信息,顺便提示一下,最好采用一句话描述这个功能包的用途信息;

    5.1.2 维护者标签

    接下来我们可以看到维护者标签:

    user

    这在package.xml文件里是一个非常重要的标签,它可以让其它人知道维护这个功能包的联系人信息。至少提供一个维护者信息,当然,如果需要,你可以添加任何一个维护者的信息。维护者的标签处于body的位置,属性里面的email信息也需要填写完整:

    Your Name

    5.1.3 许可标签

    接下来是许可标签,这个标签也是必要的:

    TODO

    可以选择一种license填写到里面。常用的license信息为BSD,MIT,Boost Software License,GPLv2,GPLv3,LGPLv2.1和LGPLv3等,针对这篇文章,我们使用BSD许可。

    BSD

    5.1.4 依赖功能包标签

    接下一组标签是描述这个功能包的依赖关系的。这些依赖关系被build_depend,buildtool_depend,run_depend,test_depend等分隔开,有关这些标签的更详细的描述可以查看catkin dependencies。因为我们设置了catkin_create_pkg命令的std_msg,roscpp,rospy参数,因此可以看到下面的依赖项:

    catkin

    roscpp

    rospy

    std_msgs

    在catkin功能包里,除了默认的buildtool_dependon,所有列出的依赖包被作为build_depend添加进来。我们希望在编译和运行时均指定相关的依赖包,因此我们为每一个依赖包添加一下run_depend标签:

    catkin

    roscpp

    rospy

    std_msgs

    roscpp

    rospy

    std_msgs

    5.1.5 最终的package.xml

    去除注解及没有用到的标签,最终的package.xml文件如下所示,看起来更简洁,

    beginner_tutorials

    0.1.0

    The beginner_tutorials package

    Your Name

    BSD

    http://wiki.ros.org/beginner_tutorials

    Jane Doe

    catkin

    roscpp

    rospy

    std_msgs

    roscpp

    rospy

    std_msgs

    6、设置生成的CMakeLists.txt文件

    既然包含元信息的package.xml已经根据需要做了修改,你已经做好了练习的准备了吧。Catkin_create_pkg产生的文件CMakeLists.txt将在以后编译功能包时进行修正完善;0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • ROS创建功能包(二)

    千次阅读 2018-08-14 09:20:16
    ROS创建功能包 创建功能包的命令:$catkin_create_pkg &lt;package_name&gt; [depend1] [depend2] [...] 在所在的工作区间目录下完成操作: 1、创建功能包 cd ~/catkin_ws/src catkin_create_pkg ...
  • a.src:代码空间(Source Space),开发过程中最常用的文件夹,用来存储所有ROS功能包的源码文件。 b.build:编译空间(Build Space),用来存储工作空间编译过程中产生的缓存信息和中间文件。 c.de...
  • 工作空间(work space)是ROS系统中存放工程开发相关的文件夹,其目录结构如下: src:代码空间(Source Space),用于存放开发代码 build:编译空间(Build Space) devel:开发空间(Development Space),存放...
  • 二、创建功能包并导入依赖 三、在功能包下新建几个文件夹存放数据 一、创建工作空间 创建新的工作空间并初始化,ros001是工作空间的名字,可自行修改 mkdir -p ~/ros001/src cd ~/ros001/src catkin_init_...
  • ROS创建工作空间以及功能包

    千次阅读 2020-05-09 13:02:23
    1.工作空间 工作空间(workspace)是一个存放工程开发相关文件的文件夹 ...2.创建工作空间 创建工作空间 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace 编译工作空间 cd ~/catkin_ws/ catki
  • ROS创建自定义msg类型功能包 一、创建msg消息 首先创建一个空的package单独存放msg类型(当然也可以在任意的package中自定义msg类型) 为便于说明,建立一个名为base_sks_msgs的包,用于对自定义msg消息 cd base_sks...
  • 例如:创建一个名称为 catkin_ws 的工作空间 mkdir -p ~/catkin_ws/src 进入到创建的catkin_ws工程目录中 cd ~/catkin_ws/src 将当前文件夹进行属性初始化。 catkin_init_workspace 会在src目录中生成一个 ...
  • src: 代码空间,存放功能包源码。 build: 编译空间,存放编译产生的中间文件。 devel: 开发空间,存放编译后的可执行文件,环境变量 配置的脚本等。 install: 安装空间,和devel作用基本一致,一般使用install命令将...
  • 1、创建工作空间并初始化及功能包创建 mkdir -p 自定义空间名/src cd 自定义空间名(英文) catkin_make 上述命令,首先会创建一个工作空间以及一个 src 子目录,然后再进入工作空间调用 catkin_make命令编译。 2...
  • 创建ROS程序及节点

    2022-03-03 19:23:49
    catkin_create_pkg指令创建功能包,格式如下: catkin_create_pkg 功能包名称 依赖项1 依赖项2 … 二、创建节点 进入learning_msg 功能包的src文件夹内,创建发布节点。 roscd learning_msg cd s
  • 创建功能包 1. 创建工作空间 工作空间是一个存放工程开发相关文件的文件夹,创建工作空间首先在Linux系统中打开一个新的终端,并按照以下步骤输入指令。 $ mkdir -p ~/ROS_ws/src $ cd ~/ROS_ws/src $ catkin_init_...
  • 工作空间可以简单理解为工程目录,通过mkdir创建一个工作空间文件夹,这里我们命名为my_workspace,创建后进入该目录 ~$ mkdir my_workspace //在系统主目录下创建名为my_workspace的文件夹 ~$ cd my_workspace //...
  • src(代码空间):用来放置功能包功能包的代码,配置文件,launch文件等 build(编译空间):放置编译过程当中产生的中间编译文件,二进制文件,一般用不到 devel(开发空间):放置开发过程中的一些可执行文件,库,...
  • 1、编译功能包只要功能包的依赖项都已经安装完毕,我们就可以编译新的功能包了;在开始之前,务必通过source指令设置运行的环境,在Ubuntu系统中可以执行如下指令;$source/opt/ros/groovy/setup.bash1.1 使用catkin...
  • src: 用来存放功能包的 build(编译空间):是用来存放编译过程中产生的二进制文件的 devel(开发空间):编译后生成的可执行文件,最终编译生成的东西最终都要在这里运行 install(安装空间):用install指令安装...
  • 3.5.1创建一个C++功能包 1.创建王家村功能包 王二居住在王家村,王家村和李家村不一样,是使用ament-cmake作为编译类型的。 所以王家村建立指令像下面这样,只不过依赖变成了rclcpp ros2 pkg create village_wang --...
  • 二、创建工作空间(workspace)2.1、创建工作空间三、创建功能包总结 前言 上一节已经完成ROS的安装,本节还是学习‘古月居ROS21讲’,本文主要记录怎样创建工作空间和功能包 一、工作空间(workspace)? ...
  • ROS入门:(1)创建一个ROS功能包

    千次阅读 2019-03-23 09:46:01
    1.创建一个catkin工作空间. ...并使用以下指令,将路径加入环境变量: $ source devel/setup.bash 2.使用catkin_create_pkg创建一个catkin. 首先先进入工作空间的src文件夹: $ cd ~/catkin_ws...
  • 工作空间 创建文件夹并进入该文件夹初始化 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace mkdir中的-p参数允许生成目录catkin_ws同时生成其子目录src ~/是会到根目录,只要加...创建功能包(一
  • Ros知识【09】:功能包介绍

    千次阅读 2021-09-24 13:53:39
    前言 1 ubuntu下安装好ros后 其路径是:/opt/ros/noetic,内容如下: 其中: 1)bin内部是全部shell命令 ...2)include是调用lib中...4)share是所有功能包放置地 5)etc是配置文件,其中包括catkin所在地 ...
  • 创建工作空间 工作空间:类似于ide中创建的工程,开发的系统空间 ...创建功能包 Catkin_create_pkg 功能包名字 依赖1 依赖2 用到那些功能包,就需要添加哪些依赖 创建成功,test_pkg功能包 Catkin_
  • ROS—工作空间和功能包创建 % 博主是机器人方向,计算机相关不是很专业,本篇只是作为学习ROS系统过程中,一些概念的简单挖掘,如有错误,欢迎大家批评指正! 首先理解高级语言程序执行的一个简单过程    1. 源...
  • 功能包ROS2中组织代码的基本容器,方便我们编译、安装、分发开发的代码,一般来讲,每个功能包都是用来完成某项具体的功能相对完整的单元。 ROS2中的功能包可以使用CMake或者Python两种方式来编译,其本身是一个...
  • 创建工作空间 mdkir -p ~/catkin_ws/src cd catkin_ws/src/ catkin_init_workspace//初始化,变成一个ros属性的文件夹 编译工作空间。回到工作空间根目录 cd ~/catkin_ws catkin_make 此时 ...
  • 文章目录1、创建工作空间与功能包1.1工作空间1.1.1工作空间的介绍1.1.2创建...创建功能包并编写代码2.3修改文件并编译2.4运行功能包并查看节点2.5利用python脚本运行3、订阅者Subscriber的实现3.1实现模型3.2创建订阅者...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,231
精华内容 892
关键字:

ros创建功能包的指令