精华内容
下载资源
问答
  • ROS创建功能包

    2021-01-17 17:38:38
    ROS创建自己的功能包 ROS中工作空间(workspace)是一个存放工程开发相关文件的文件夹,其中有四个文件夹。 • src:代码空间(Source Space) • build:编译空间(Build Space) • devel:开发空间(Development Space) • ...

    ROS创建自己的功能包

    ROS中工作空间(workspace)是一个存放工程开发相关文件的文件夹,其中有四个文件夹。
    • src:代码空间(Source Space)
    • build:编译空间(Build Space)
    • devel:开发空间(Development Space)
    • install:安装空间(Install Space)
    OK接下来创作工作空间:
    1.创建工作空间

    mkdir catkin_ws
    cd catkin_ws 
    mkdir src 
    cd src
    catkin_init_workspace
    

    其中catkin_ws为工作空间名字,可以自己定义。但是catkin_ws下的src必须是src。
    关闭当前的terminal

    2.编译工作空间

    cd ~/catkin_ws/
    catkin_make
    catkin_make install
    

    在catkin_ws所在的目录下运行catkin_make
    3.设置环境变量

    source devel/setup.bash
    

    检查一下有没有

    echo $ROS_PACKAGE_PATH
    

    在这里插入图片描述
    其中tang为我的用户名

    为了防止每次运行功能包都要source devel/setup.bash我们可以在.bashrc下加上这样一句话

    source /home/****/catkin_ws/devel/setup.bash
    

    ****为你的用户名。

    在这里插入图片描述
    4.创建功能包

    cd ~/catkin_ws/src
    catkin_create_pkg test_pkg std_msgs rospy roscpp
    

    在src目录下catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
    其中建议包含一下 std_msgs,rospy roscpp分别别是对python和C++的支持, test_pkg为功能包的名字.

    5.编译功能包

     cd catkin_ws
     catkin_make
     source devel/setup.bash
    
    展开全文
  • Ubuntu ROS 创建功能包

    2021-01-25 23:51:21
    文章目录Ubuntu ROS 创建功能包创建尽情享用吧~ Ubuntu ROS 创建功能包 创建 source ~/catkin_ws/devel/setup.bash cd ~/catkin_ws/src catkin_create_pkg <your-package> std_msgs roscpp gedit <your-...

    Ubuntu ROS 创建功能包

    创建包结构

    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws
    catkin init
    catkin config --cmake-args -DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=YES
    cd src
    catkin_create_pkg <your-package> std_msgs roscpp rospy genmsg
    

    for C++

    vi <your-package>/src/<your-code-file>.cpp
    

    for Python

    mkdir <your-package>/bin
    mkdir <your-package>/src/<your-subpackage-name>
    touch <your-package>/bin/<your-run-code-file-name>
    chmod u+x <your-package>/bin/<your-run-code-file-name>
    touch <your-package>/src/<your-subpackage-name>/__init__.py
    vi <your-package>/src/<your-subpackage-name>/<your-code-file>.py
    

    修改 CMakelists.txt

    运行

    vi <your-package>/CMakelists.txt
    

    修改为

    cmake_minimum_required(VERSION 3.0.2)
    project(<your-package>)
    
    #for c++
    add_compile_options(-std=c++17)
    
    #find include file
    find_package(catkin REQUIRED COMPONENTS
      roscpp
      rospy
      std_msgs
      genmsg
    )
    
    #add srv file
    add_service_files(
    	FILES
    	<your-service-name>.srv
    )
    
    #add msg file
    add_message_files(
    	FILES
    	<your-message-name>.msg
    )
    
    #for python
    #python package setup
    catkin_python_setup()
    
    #generate srv code
    generate_messages(
    	DEPENDENCIES
    	<your-.srv-file-depended-msg-namespace>
    )
    
    catkin_package()
    
    include_directories(include ${catkin_INCLUDE_DIRS})
     
     #for c++
    add_executable(<your-package> src/<your-code-file>.cpp)
    target_link_libraries(<your-package> ${catkin_LIBRARIES})
    
    #for python
    catkin_install_python(PROGRAMS
      bin/<your-run-code-file-name>
      DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
    )
    

    运行

    vi <your-package>/package.xml
    

    在合适的位置添加

    <build_depend>message_generation</build_depend>
    <exec_depend>message_runtime</exec_depend>
    

    for Python

    运行

    vi <your-package>/setup.py
    

    添加

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    ## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD
    
    from distutils.core import setup
    from catkin_pkg.python_setup import generate_distutils_setup
    
    # fetch values from package.xml
    setup_args = generate_distutils_setup(
        packages=['<your-subpackage-name>'],
        package_dir={'': 'src'},
    )
    
    setup(**setup_args)
    

    添加代码引用

    for Python

    vi <your-package>/bin/<your-run-code-file-name>
    

    通过

    import <your-subpackage-name>.<your-code-file>
    

    来实现 python 文件的引用

    编译

    catkin build <your-package>
    

    尽情享用吧~

    展开全文
  • ROS2学习笔记之创建自己的功能包背景前期准备学习内容1. 创建一个包2. 编译新建的包3 Source工作空间的配置文件4 使用新建的包5. 查看包的内容6. 自定义 package.xml总结 学习目标: 使用CMake或Python创建一个新的包...
  • ROS有时需要自定义消息,本文叙述如何通过创建功能包并自定义消息 创建ROS工作空间具体实现:https://blog.csdn.net/qq_34911636/article/details/100103448 1.在工作空间catkin_trollycontrol中创建功能包Publish...

    ROS有时需要自定义消息,本文叙述如何通过创建功能包并自定义消息

    创建ROS工作空间具体实现:https://blog.csdn.net/qq_34911636/article/details/100103448

    创建一个package需要在catkin_ws/src下,用到catkin_create_pkg命令,用法是:catkin_create_pkg package depends,其中package是包名,depends是依赖的包名,可以依赖多个软件包。上面的命令创建了serve_test软件包,依赖于roscpp rospy std_msgs。

         一个package下常见的文件、路径有:

        CMakeLists.txt: 定义package的包名、依赖、源文件、目标文件等编译规则,是package不可少的成分

        package.xml: 描述package的包名、版本号、作者、依赖等信息,是package不可少的成分

        src/: 存放ROS的源代码,包括C++的源码和(.cpp)以及Python的module(.py)

        include/: 存放C++源码对应的头文件

        scripts/: 存放可执行脚本,例如shell脚本(.sh)、Python脚本(.py)

        msg/: 存放自定义格式的消息(.msg)

        srv/: 存放自定义格式的服务(.srv)

        models/: 存放机器人或仿真场景的3D模型(.sda, .stl, .dae等)

        urdf/: 存放机器人的模型描述(.urdf或.xacro)

        launch/: 存放launch文件(.launch或.xml)

    其中定义package的是CMakeLists.txt和package.xml,这两个文件是package中必不可少的。catkin编译系统在编译前,首先就要解析这两个文件。这两个文件就定义了一个package。 通常ROS文件组织都是按照以上的形式,这是约定俗成的命名习惯,建议遵守,以上路径中只有CMakeLists.txt和package.xml是必须的,其余路径根据软件包是否需要来决定。

    1.在工作空间catkin_trollycontrol中创建功能包Publishkey

    cd ~catkin_trollycontrol/src
    catkin_create_pkg Publishkey std_msgs rospy roscpp
    

    然后重新编译工作空间切换到cd ~catkin_trollycontrol目录,编译工作空间catkin_make

    2.在功能包目录Publishkey下创建文件夹msg用于存放自定义消息文件differentialwheel.msg

    cd ~catkin_trollycontrol/src/Publishkey
    mkdir msg
    cd msg
    touch differentialwheel.msg

    3.在differentialwheel.msg里面自定义消息如下举例所述:

    #定义智能车的运动控制消息
    #小车前进的速度
    float32 goforwardspeed 
    #小车向后的速度  
    float32 backwardspeed  
    #小车左旋转的速度  
    float32 leftrotationspeed  
    #小车右旋转的速度  
    float32 rightrotationspeed   
    
    #定义小车运动模式,0x01为前进标识,0x02后退标识,0x03左旋转标识,0x04右旋转标识
    char directionofmotion 

    4.打开功能包Publishkey目录下面package.xml文件添加编译和运行的相关依赖

    <build_depend>message_generation</build_depend>
    <exec_depend>message_runtime</exec_depend>

    5.打开功能包Publishkey目录下面CMakeLists.txt,修改CMakeLists.txt文件

    ROS中的编译器使用的是CMake,编译规则通过功能包中的CMakeLists.txt文件设置,使用catkin命令创建

    的功能包中会包含自动生成该文件已经配置多数编译选项,并包含详细的注解,几乎不需要查看相关手册

    稍作修改即可。打开功能包对于这个较为简单的功能包,主要用到了以下四种编译配置项。

    include_directories(include   ${catkin_INCLUDE_DIRS})

    add_executable(mrobot_motor   src/mrobot_bringup.cpp   src/mrobot.cpp)

    target_link_libraries(mrobot_motor   ${catkin_LIBRARIES})

    add_dependencies(mrobot_motor ${PROJECT_NAME}_generate_messages_cpp)

    (1 ) include_directories
           用于设置头文件的相对路径。全局路径默认是功能包的所在目录,比如功能包的头文件一 
    般会放到功能包根目录下的include文件夹中,所以此处需要添加该文件夹。此外,该配置项还 
    包含ROS catkin编译器默认包含的其他头文件路径,比如ROS默认安装路径、Linux系统路径等。
    (2 ) add_executable
           用于设置需要编译的代码和生成的可执行文件。第一个参数为期望生成的可执行文件的 
    名称,后边的参数为参与编译的源码文件(cpp),如果需要多个代码文件,则可在后面依次 
    列出,中间使用空格进行分隔。
    (3 ) target_link_libraries
           用于设置链接库。很多功能需要使用系统或者第三方的库函数,通过该选项可以配置执行 
    文件链接的库文件,其第一个参数与add_executable相同,是可执行文件的名称,后面依次列
    出需要链接的库。此处编译的Publisher和Subscriber没有使用其他库,添加默认链接库即可。
    (4 ) add_dependencies
           用于设置依赖。在很多应用中,我们需要定义语言无关的消息类型,消息类型会在编译 
    过程中产生相应语言的代码,如果编译的可执行文件依赖这些动态生成的代码,则需要使用
    add_dependencies 添加 ${PROJECT_NAME}_generate_messages_cpp 配置,即该功能包动态
    产生的消息代码。该编译规则也可以添加其他需要依赖的功能包。 
    以上编译内容会帮助系统生成mrobot_motor可执行文件

    ⑶抓CMakeLists.txt修改完成后,在工作空间的根路径下开始编译

    (1)在find_package添加message_generation

    (2)add_message_files的注释去掉,并在add_message_files里面添加differentialwheel.msg

    (3)generate_messages的注释去掉,并在generate_messages里面添加std_msgs

    (4)catkin_package的注释去掉,并在catkin_package里面CATKIN_DEPENDS roscpp rospy std_msgs 的末尾添加           message_runtime

    6.以上工作都配置完成之后切换到cd ~catkin_trollycontrol目录,重新编译工作空间catkin_make

    cd ~catkin_trollycontrol
    catkin_make

    7.验证是否正确完成自定义消息

    在终端中输入:rosmsg show differentialwheel

    如果出现Could not find msg 'differentialwheel'错误则在终端中重新输入:

    source  devel/setup.bash 配置工作空间的环境变量,即可解决

    若配置正确则在终端中输出:

    输出消息类型

    [Publishkey/differentialwheel]:
    float32 goforwardspeed
    float32 backwardspeed
    float32 leftrotationspeed
    float32 rightrotationspeed
    char directionofmotion

    其中Publishkey/differentialwheel为消息的路径

    在.cpp需要用到该消息类型只需要添加头文件路径#include“Publishkey/differentialwheel.h”

     另外在/root/catkin_trollycontrol/devel/include/Publishkey,文件下面可以看到自动生成的

    differentialwheel.h文件

     

     

     

    展开全文
  • ROS-创建功能包和节点

    千次阅读 2020-02-21 16:30:53
    个人博客:... ... 本文是我学习ROS的笔记,介绍了如何通过命令行从零创建一个功能包:基于roscpp的Service通信和基于rospy的topic通信。 一.基于roscpp的service通信 1.首先,创建一个工作空间 Catkin...

     个人博客:http://www.chenjianqu.com/

    原文链接:http://www.chenjianqu.com/show-72.html

     本文是我学习ROS的笔记,介绍了如何通过命令行从零创建一个功能包:基于roscpp的Service通信和基于rospy的topic通信。

     

    一.基于roscpp的service通信

    1.首先,创建一个工作空间

        Catkin工作空间是创建、修改、编译catkin软件包的目录。

    (base) chenjianqu@chen:~$ cd ros
    (base) chenjianqu@chen:~/ros$ cd project
    (base) chenjianqu@chen:~/ros/project$ mkdir -p ws2/src
    (base) chenjianqu@chen:~/ros/project$ cd ws2
    (base) chenjianqu@chen:~/ros/project/ws2$ catkin_make #初始化工作空间

        catkin工作空间包括了src、build、devel三个文件夹:

        src/: ROS的catkin软件包(源代码包)

        build/: catkin(CMake)的缓存信息和中间文件

        devel/: 生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等)、环境变量

     

    2.创建一个Package

    (base) chenjianqu@chen:~/ros/project/ws2$ cd src
    (base) chenjianqu@chen:~/ros/project/ws2/src$ catkin_create_pkg serve_test std_msgs rospy roscpp

        创建一个package需要在catkin_ws/src下,用到catkin_create_pkg命令,用法是:catkin_create_pkg package depends,其中package是包名,depends是依赖的包名,可以依赖多个软件包。上面的命令创建了serve_test软件包,依赖于roscpp rospy std_msgs。

         一个package下常见的文件、路径有:

        CMakeLists.txt: 定义package的包名、依赖、源文件、目标文件等编译规则,是package不可少的成分

        package.xml: 描述package的包名、版本号、作者、依赖等信息,是package不可少的成分

        src/: 存放ROS的源代码,包括C++的源码和(.cpp)以及Python的module(.py)

        include/: 存放C++源码对应的头文件

        scripts/: 存放可执行脚本,例如shell脚本(.sh)、Python脚本(.py)

        msg/: 存放自定义格式的消息(.msg)

        srv/: 存放自定义格式的服务(.srv)

        models/: 存放机器人或仿真场景的3D模型(.sda, .stl, .dae等)

        urdf/: 存放机器人的模型描述(.urdf或.xacro)

        launch/: 存放launch文件(.launch或.xml)

        其中定义package的是CMakeLists.txt和package.xml,这两个文件是package中必不可少的。catkin编译系统在编译前,首先就要解析这两个文件。这两个文件就定义了一个package。 通常ROS文件组织都是按照以上的形式,这是约定俗成的命名习惯,建议遵守。以上路径中,只有CMakeLists.txt和package.xml是必须的,其余路径根据软件包是否需要来决定。

     

    3.创建服务消息文件

    (base) chenjianqu@chen:~/ros/project/ws2/src$ ls
    (base) chenjianqu@chen:~/ros/project/ws2/src$ cd serve_test
    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test$ mkdir -p srv
    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test$ cd srv
    
    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test/srv$ vim Greeting.srv

    在Greeting.srv中写入消息内容:

    string name
    int32 age
    ---
    string feedback

        srv文件是用来描述服务(service数据类型的,service通信的数据格式定义在*.srv中。它声明了一个服务,包括请求(request)和响应(reply)两部分。

     

    4.修改CMakeLists.txt和package.xml,编译服务消息

    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test/srv$ cd ..
    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test$ ls
    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test$ vim CMakeLists.txt #修改CMakeLists文件

    修改内容如下:

    find_package(catkin REQUIRED COMPONENTS 
        roscpp
        std_msgs
        message_generation   #需要添加的地方
    )
    #catkin在cmake之上新增的命令,指定从哪个消息文件生成
    add_service_files(FILES Greeting.srv)  #添加这一项
    #catkin新增的命令,用于生成消息 #DEPENDENCIES后面指定生成msg需要依赖其他什么消息,由于gps.msg用到了flaot32这种ROS标准消息,因此需要再把std_msgs作为依赖
    generate_messages(DEPENDENCIES std_msgs)  #添加这一项

     

    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test$ vim package.xml #修改package.xml文件

    修改内容加入:

    <build_depend>message_generation</build_depend> #添加这一项
    <exec_depend>message_runtime</exec_depend> #添加这一项

     

    最后编译服务消息

    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test$ cd ..
    (base) chenjianqu@chen:~/ros/project/ws2/src$ cd ..
    (base) chenjianqu@chen:~/ros/project/ws2$ catkin_make

        编译完成之后会在devel路径下生成Greeting.srv对应的头文件,头文件按照C++的语法规则定义了serve_test::Greeting::Request和 serve_test::Greeting::Response类型的数据。

     

    5.编写Server和Client两个节点的源代码

    (base) chenjianqu@chen:~/ros/project/ws2$ cd src
    (base) chenjianqu@chen:~/ros/project/ws2/src$ cd serve_test
    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test$ ls
    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test$ cd src
    #创建server节点的源代码
    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test/src$ vim server.cpp

    代码内容如下:

    #include <ros/ros.h>
    #include <serve_test/Greeting.h>
    bool handle_function(serve_test::Greeting::Request &req, serve_test::Greeting::Response &res){
        //显示请求信息
        ROS_INFO("Request from %s with age %d", req.name.c_str(), req.age);
        //处理请求,结果写入response
        res.feedback = "Hi " + req.name + ". I’m server!";
        //返回true,正确处理了请求
        return true;
    }
    int main(int argc, char** argv){
        ros::init(argc, argv, "greetings_server");//解析参数,命名节点
        ros::NodeHandle nh;//创建句柄,实例化node
        ros::ServiceServer service = nh.advertiseService("greetings", handle_function);  //写明服务的处理函数
        ros::spin();
        return 0;
    }

        接着创建client节点的源代码

    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test/src$ vim client.cpp

    代码如下:

    #include <ros/ros.h>
    #include <serve_test/Greeting.h>
    
    int main(int argc, char **argv)
    {
        ros::init(argc, argv, "greetings_client");// 初始化,节点命名为"greetings_client"
        ros::NodeHandle nh;
        ros::ServiceClient client = nh.serviceClient<serve_test::Greeting>("greetings");
        // 定义service客户端,service名字为“greetings”,service类型为serve_test
    
        // 实例化srv,设置其request消息的内容,这里request包含两个变量,name和age,见Greeting.srv
        serve_test::Greeting srv;
        srv.request.name = "HAN";
        srv.request.age = 20;
    
        if (client.call(srv))
        {
            // 注意我们的response部分中的内容只包含一个变量response,另,注意将其转变成字符串
            ROS_INFO("Response from server: %s", srv.response.feedback.c_str());
        }
        else
        {
            ROS_ERROR("Failed to call service serve_test");
            return 1;
        }
        return 0;
    }

     

    5.配置CMakeLists.txt,编译工作空间

    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test/src$ cd ..
    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test$ vim CMakeLists.txt

    在CMakeLists.txt文件里添加:

    #要生成的可执行文件server和需要编译的源文件src/server.cpp,如需要多个代码文件,则可在后面一次列出,中间使用空格分隔
    add_executable(server src/server.cpp)
    #设置依赖项,这里必须添加add_dependencies,否则找不到自定义的srv产生的头文件
    add_dependencies(server serve_test_generate_messages_cpp) 
    #设置链接库,很多工序要需要使用第三方库函数,这里可以配置默认链接库
    target_link_libraries(server ${catkin_LIBRARIES}) 
    
    add_executable(client src/client.cpp )
    add_dependencies(client serve_test_generate_messages_cpp)
    target_link_libraries(client ${catkin_LIBRARIES})

    然后编译工作空间

    (base) chenjianqu@chen:~/ros/project/ws2/src/serve_test$ cd ..
    (base) chenjianqu@chen:~/ros/project/ws2/src$ cd ..
    (base) chenjianqu@chen:~/ros/project/ws2$ catkin_make

     

    6.测试

        A.打开一个新的终端,运行roscore

        B.再打开一个新的终端,运行server节点

    (base) chenjianqu@chen:~/ros/project/ws2$ source devel/setup.bash
    (base) chenjianqu@chen:~/ros/project/ws2$ rosrun serve_test server

        C.再打开一个新的终端,运行client节点

    (base) chenjianqu@chen:~/ros/project/ws2$ source devel/setup.bash
    (base) chenjianqu@chen:~/ros/project/ws2$ rosrun serve_test client

        然后服务端节点会收到客户端节点的消息:[ INFO] [1575818511.403724893]: Request from HAN with age 20。

        接着客户端节点收到服务端节点返回的消息:[ INFO] [1575818511.403884222]: Response from server: Hi HAN. I???m server!。

        编译完成后必须刷新一下工作空间的环境,否则可能找不到工作空间。许多时候我们为了打开终端就能够运行工作空间中编译好的ROS程序,我们习惯把“source 工作空间路径/devel/setup.bash”命令追加到~/.bashrc文件中,这样每次打开终端,系统就会刷新工作空间环境。可以通过“echo "source 工作空间路径/devel/setup.bash" >> ~/.bashrc”命令来追加。

     

     

    二.基于rospy的topic通信

        在上面创建工作空间的基础上,创建另一个包。

    (base) chenjianqu@chen:~/ros/project/ws2/src$ catkin_create_pkg topic_test std_msgs rospy

        然后在包目录下创建一个用于存放topic消息的目录msg,创建topic通信格式gps.msg

    (base) chenjianqu@chen:~/ros/project/ws2/src/topic_test/msg$ vim gps.msg

        写入下面的代码,格式与service通信不同,topic通信是单向通信:

    string state
    float32 x
    float32 y

        然后像上面的service例子一样,修改CMakeLists.txt和package.xml,并编译服务消息。

        接下来就可以开始写rospy的程序,这里在包目录下创建scripts文件夹,用于存放简单的python脚本代码,

    (base) chenjianqu@chen:~/ros/project/ws2/src/topic_test/scripts$ vim pytalker.py

    代码如下:

    #!/usr/bin/env python
    #coding=utf-8
    import rospy
    from topic_test.msg import gps #导入自定义的数据类型
    
    def talker():
        pub = rospy.Publisher('gps_info', gps , queue_size=10)
        rospy.init_node('pytalker', anonymous=True)
        #更新频率是1hz
        rate = rospy.Rate(1) 
        x=1.0
        y=2.0
        state='working'
        while not rospy.is_shutdown():
        #计算距离
        rospy.loginfo('Talker: GPS: x=%f ,y= %f',x,y)
        pub.publish(gps(state,x,y))
        x=1.03*x
        y=1.01*y
        rate.sleep()
    
    if __name__ == '__main__':
        talker()
    
    #Publisher 函数第一个参数是话题名称,第二个参数 数据类型,现在就是我们定义的msg 最后一个是缓冲区的大小
    #queue_size: None(不建议)  #这将设置为阻塞式同步收发模式!
    #queue_size: 0(不建议)#这将设置为无限缓冲区模式,很危险!
    #queue_size: 10 or more  #一般情况下,设为10 。queue_size太大了会导致数据延迟不同步。

    写完后设置该文件为可执行文件:

    (base) chenjianqu@chen:~/ros/project/ws2/src/topic_test/scripts$ chmod +x pytalker.py

     

    再新建一个节点脚本文件:

    (base) chenjianqu@chen:~/ros/project/ws2/src/topic_test/scripts$ vim pylistener.py

    代码:

    #!/usr/bin/env python
    #coding=utf-8
    import rospy
    import math
    from topic_test.msg import gps
    
    #回调函数输入的应该是msg
    def callback(gps):
        distance = math.sqrt(math.pow(gps.x, 2)+math.pow(gps.y, 2)) 
        rospy.loginfo('Listener: GPS: distance=%f, state=%s', distance, gps.state)
    def listener():
        rospy.init_node('pylistener', anonymous=True)
        #Subscriber函数第一个参数是topic的名称,第二个参数是接受的数据类型 第三个参数是回调函数的名称
        rospy.Subscriber('gps_info', gps, callback)
        rospy.spin()
    if __name__ == '__main__':
        listener()
    (base) chenjianqu@chen:~/ros/project/ws2/src/topic_test/scripts$ chmod +x pylistener.py

     

        python代码是动态语言,因此无需修改cmakelists.txt文件,直接在工作空间catkin_make一下,再刷新环境变量,即可运行。

     

        代码首行#!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。

     

     

     

     

     

     

    参考文献

    [0]中科院软件所,重德智能公司.中国大学MOOC---《机器人操作系统入门》课程讲义.https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/

     

     

    展开全文
  • Chapter 2. ROS 创建和编译功能包

    千次阅读 2018-07-20 13:49:02
    1. 创建ROS功能包 使用catkin_create_pkg命令来创建一个新的catkin程序包。 首先切换到之前通过创建catkin工作空间教程创建的catkin工作空间中的src目录下: ~/ros_workspace$ cd src 接着使用catkin_create_pkg...
  • 创建工作空间 工作空间:类似于ide中创建的工程,开发的系统空间 ...创建功能包 Catkin_create_pkg 功能包名字 依赖1 依赖2 用到那些功能包,就需要添加哪些依赖 创建成功,test_pkg功能包 Catkin_
  • 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 ...
  • 1、创建功能包: cd catkin_ws/src/ catkin_create_pkg alan_package roscpp rospy std_msgs //rospack depends1 alan_package //rospack find alan_package 2、创建自定义消息: cd alan_package/ mkdir msg ...
  • 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的功能功能包可以用C++...创建功能包 在自己的工作空间下面,创建功能包: cd catkin_ws/src catkin_create_pkg pc_connect rospy cd pc_connect touch setup.py mkdir -p src/connect touch setup.py cd src/
  • ROS教程(三):创建程序及节点(图文)

    万次阅读 多人点赞 2020-12-10 14:36:10
    文章目录前言一、创建功能包二、创建节点三、修改CMakeList.txt四、配置package.xml文件五、编译并执行1.编译2.执行六、rostopic工具总结 前言 根据前篇教程已经创建好了工作空间,并已经成功生效了环境变量,接...
  • 但是,ROS 的 catkin 编译系统试图一次性编译同一个工作空间中的所有功能包。因此,如果你的工作涉及大量的功能包,或者涉及几个相互独立的的项目,则维护数个独立的工作空间可能是有帮助的。 现在,我们在 home ...
  • 创建功能包(ROS package) 参考(http://wiki.ros.org/ROS/Tutorials/CreatingPackage) 1 常用工具 roscreate-pkg catkin 推荐使用catkin (参考: http://wiki.ros.org/catkin/conceptual_overview) 2 catkin ...
  • 自定义功能包,实现自定义功能
  • 使用kinetic版本必须注释这几行 否则出现此错误
  • 创建ROS工作空间 本人是理科生,做这文档也是为了以后生活中害怕忘记,而发布的,并且希望能帮到大家,发布的越多,入坑起来的快。入坑可难受了,天天抠头发。 注:有点详细,免得大家抠头发,阅读可以直接看代码。 ...
  • 用VScode创建ROS功能包

    2021-11-06 10:43:35
    @[TOC](WEN) ...提示输入Package name(你想创建功能包的名称)。如:输入my_package. 之后按下回车键。 该处使用的url网络请求的数据。 3.此时正上方出现下图所示输入窗口。提示输入Depend...
  • 古月居ROS入门——创建工作空间与功能包
  • 安装ROS一个功能包所有的依赖

    千次阅读 2020-05-27 11:17:31
    当下载某个功能包到...一个一个装太麻烦,我们直接安装ros一个功能包所需要的依赖一个较常使用的命令是 : rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y 这个命令是用于安装工作空间中 s
  • ROS创建自定义msg类型功能包 一、创建msg消息 首先创建一个空的package单独存放msg类型(当然也可以在任意的package中自定义msg类型) 为便于说明,建立一个名为base_sks_msgs的包,用于对自定义msg消息 cd base_sks...
  • 工作空间 workspace 工作空间是一个存放工程开发相关文件的文件夹。 src:代码空间(Source Space) build:编译空间(Build Space...功能包ROS里面放置源码的最小单元,所有源码必须都放到功能包里面 ...
  • ubuntu 16.04 ROS kinetic 平台RK3399 创建工作空间 $ mkdir -p catkin_ws/src //创建文件夹作为工作空间 $ cd .. $ catkin_make //编译此工作空间生成CMakeLists.txt $ echo "source /opt/ros/kinetic/setup.bash"&...
  • ROS功能包

    千次阅读 2019-12-28 11:52:02
    ROS package介绍 package是什么呢? 指的是一种特定的文件结构和文件夹组合。通常将实现同一个具体功能的程序代码放到一个package中,比如实现相机数据采集这一功能 文件结构 ROS package 相关命令 ...
  • ROS实践学习入门系列(五)自定义节点功能包使用与消息传递】 本内容经官网实例以及一些参考书总结而成,欢迎留言评论交流~ 联系方式:ziyuanw#foxmail.com(#换成@) 一、回顾小海龟案例: 在小海龟的案例中...
  • 1.mkdir catkin_ws/src 2.cd catkin_ws/src 3.catkin_init_workspace 4.cd ~/catkin_ws/ 5.catkin_make 6.在bashrc中添加 source ~/catkin_ws/devel/setup.bash ...8.创建功能包  cd ~/catkin_...
  • 4.1 ROS功能包

    2021-03-11 21:08:07
    显而易见的,逐一安装功能包的效率低下,在ROS中,提供了一种方式可以将不同的功能包打包成一个功能包,当安装某个功能模块时,直接调用打包后的功能包即可,该包又称之为元功能包(metapackage)。 概念 MetaPackag
  • ros功能包编译时出现依赖项问题

    千次阅读 2017-08-01 10:03:38
    当下载某个功能包到自己的空间,在编译时,出现依赖项有问题,解决如下: $roscd package_name $rosdep package_name rosdep即可安装缺少的依赖项   或者  $rosdep install --from-path src     ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,012
精华内容 4,004
关键字:

ros创建功能包