精华内容
下载资源
问答
  • ROS入门之创建节点
    千次阅读
    2018-03-22 22:06:56

    由于自己看些野路子的书本把自己坑了,于是开始一步步的解BUG之旅,将自己的调试的过程与大家分享。。

    这里假设是你已经安装好了ROS,我在这里用的是Ubuntu 16.04,ROS版本:Kinetic(一直把这个记成Kinect,错了很多地方。。)

    (1)首先建立工作空间:ROS系统进行运行时都是在某个工作空间下,允许有许多个工作空间,经常需要切换

    这里我工作空间名字就叫catkin_ws好了,官方书籍也是这样写的(中间部分代码没有注释,随便翻本书就可以看懂)

    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws/src
    catkin_init_workspace
    cd ~/catkin_ws
    catkin_make
    

    (2)创建ROS包

    cd ~/catkin_ws/src
    catkin_create_pkg example_cpp(功能包名字) std_msgs roscpp

    (3)编译ROS功能包

    cd ~/catkin_ws
    catkin_make

    (4)将两个cpp文件(example_public.cpp和example_subscriber.cpp)放到catkin_ws/example_cpp/src里面

    example_public.cpp

    #include <ros/ros.h>
    #include <std_msgs/String.h>
    #include <sstream>
    int main(int argc,char **argv)
    {
        ros::init(argc,argv,"example_public");       //a)
        ros::NodeHandle n;                           //b)
        ros::Publisher chatter_pub = n.advertise<std_msgs::String>("message",1000);    //c)
        ros::Rate loop_rate(10);                     //d)
        while(ros::ok())                     //中断,遇到ctrl+c时候中断
        {
            std_msgs::String msg;            //申请内存
            std::stringstream ss;                  //信息内容变量
            ss << "I am publisher ";         //写入变量
            msg.data = ss.str();             //写入内存
            chatter_pub.publish(msg);        //调用发布函数
            loop_rate.sleep();               //发送频率
        }
        return 0;
    }

    example_subscriber.cpp

    #include <ros/ros.h>
    #include <std_msgs/String.h>
    void chatterCallback(const std_msgs::String::ConstPtr& msg)
    {
        ROS_INFO("I heard: [%s]",msg->data.c_str()); //接收的消息
    }
    int main(int argc,char **argv)
    {
        ros::init(argc,argv,"example_subscriber");    //a)
        ros::NodeHandle n;                            //b)
        ros::Subscriber sub = n.subscribe("message",1000,chatterCallback);    //c)
        ros::spin();                                  //回调函数
        return 0;
    }

    (5)修改catkin_ws/example_cpp下的CMakeList文件(在末尾加一下内容即可)

    include_directories(
        include
        ${catkin_INCLUDE_DIRS}
    )
    add_executable(example_public src/example_publih.cpp)
    add_executable(example_subscriber src/example_subscriber.cpp)
    add_dependencies(example_public tutorials_generate_messages_cpp)
    add_dependencies(example_subscriber tutorials_generate_messages_cpp)
    target_link_libraries(example_public ${catkin_LIBRARIES})
    target_link_libraries(example_subscriber ${catkin_LIBRARIES})

    注意:这个时候需要去source一下源(这个地方我也没太清楚)

    我们ros的master运行需要source /opt/ros/kinetic/setup.bash

    可以通过写echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

    这样是为了不必每次进行用源,因为终端运行时会自动启动.bashrc文件,你可以可以直接打开.bashrc文件修改参数然后保存

    接下来我们由于是在工作空间中运行我们的节点,这就需要source一下我们工作空间的源

    source /home/tany/catkin_ws/devel/setup.bash(pwd指令可以看我们工作空间所处的位置,可能devel里保存的是工作空间的源,这个cmake有关)避免每次都要source直接在终端敲入同上的方式:

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

    (6)最后

    cd ~/catkin_ws
    catkin_make -j4

    依次开启新窗口,敲一下三行(每行敲完换一个新终端)

    roscore
    
    rosrun example_cpp example_public
    
    rosrun example_cpp example_subscriber

    更多相关内容
  • ROS创建节点并发布数据

    千次阅读 2018-08-17 15:07:34
    通过这篇文 https://blog.csdn.net/dream_cc/article/details/54836896  可以建立一个简单的节点并发布hello world消息。 具体c++代码实现过程及讲解: #include "ros/ros.h" //包含ROS中常用的...

    开发环境:RobWare Stdio

    1. 通过这篇文   https://blog.csdn.net/dream_cc/article/details/54836896  可以建立一个简单的节点并发布hello world消息。
    2. 具体c++代码实现过程及讲解:
      #include "ros/ros.h"  //包含ROS中常用的头文件
      #include "std_msgs/String.h" //按照ros命名规则,std_msgs/String是在ros目录下的string文件内,该文件中有一个string.msg文件
      #include <sstream>
      
      //初始化ROS系统
      //广播消息:在chatter主题上发布std_msgs/String消息到节点管理器
      //以指定的频率循环发布消息到chatter
      
      int main(int argc, char **argv)
      {
          ros::init(argc, argv, "talker");//初始化一个ros节点,节点名称必须是唯一的
          //创建用于处理该节点的句柄,这是一个类,开始是见初始化节点,结束时最后用析构函数清除所用资源
          ros::NodeHandle n;
          //创建一个发布主题
          //节点管理器把chatter主题上发布的数据告知正在监听这个主题的节点
          //NodeHandle::advertise()返回一个ros::publisher()方法,让用户可以在创建的主题上发布消息
          ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);//"chattet"发布的主题  1000 发布队列的长度
          //指定循环频率10hz,它追踪上一次Rate::sleep()被唤醒之后持续的时间,并在到达指定时间后休眠
          ros::Rate loop_rate(10);
          int count = 0;
          //在缺省情况下,roscpp安装一个句柄,当系统按下ctrl+c时,ros::ok()返回flase
          while(ros::ok())
          {
              std_msgs::String msg;
              std::stringstream ss;
              ss << "hello word!!" <<count;
              //C++标准流控制,把字符流给mag.data
              msg.data = ss.str();
              //类似与printf和cout
              ROS_INFO("%s", msg.data.c_str());
              //创建主题时返回的句柄,提供发布消息的方法,用于发布数据
              chatter_pub.publish(msg);
              //
              ros::spinOnce();
              loop_rate.sleep();
              ++count;
          }
          return 0;
      }

      ee

    3. 启动ros内核和节点,(注意要在./bashrc中加入source 路径),就可以在终端看到发布的消息了

    展开全文
  • 动手学ROS(1):创建ros节点 ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等...

    动手学ROS(1):创建ros节点

    ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等诸多功能。

    1 安装 ros

    安装步骤请参考 安装教程

    该页面是ROS Melodic版本。本系列教程提供的代码均为在Ubuntu18.04上实测通过。

    2 创建ros node

    2.1 创建catkin workspace:
    $ mkdir -p ~/catkin_ws/src
    $ cd ~/catkin_ws/
    $ catkin_make
    

    初次运行catkin_make命令会在src目录下生成CMakeLists.txt。该文件不需要改动。

    2.2 创建package
    $ cd ~/catkin_ws/src
    $ catkin_create_pkg ros_tutorial std_msgs roscpp
    

    需要注意的是,创建pkg时需要进入src目录。ros_tutorial为pkg的名称,std_msgs 及roscpp为pkg的所依赖的pkg,我们暂时使用c++来进行代码示例,所以依赖了roscpp。顺便提一下,std_msgs为ros提供的标准通信格式,后续讲到通信方式的时候再来细说。

    我们首先来认识下pkg默认的目录结构

    └── ros_tutorial
        ├── CMakeLists.txt
        ├── include
        │   └── ros_tutorial
        ├── package.xml
        └── src
    

    目前我们需要注意到,新生成的pkg里也有一个CMakeLists.txt,这个文件是需要修改的。熟悉c++的朋友应该可以看出来,这就是一个普通的cmake文件,负责工程的编译。

    我们写的cpp文件就写在src目录下,头文件放在include下,package.xml用来维护依赖pkg。

    2.3 编写ros node

    ros node 可以简单理解为ros通信的基本单位。ros工程运行时有一个master 节点和若干个 client节点,各client之间通过master进行通信。

    下面就简单写一个ros node. 在ros_tutorial/src下新建ros_tutorial_node.cpp文件:

    #include <ros/ros.h>
    
    int main(int argc, char **argv)
    {
        ros::init(argc, argv, "ros_tutorial_node");
        ros::NodeHandle n;
        ros::Rate rate(1);
    
        while (n.ok())
        {
            ROS_INFO("spin once");
            ros::spinOnce();
            rate.sleep();
        }
    
        return 0;
    }
    

    其实这里可以随便写一个cpp文件,这里主要是为了引入ros::nodeHandle的概念。

    • ros::init

      初始化

    • ros::NodeHandle

      创建ros节点

    • ros::Rate

      节点刷新频率

    • ros::spinOnce 或ros::spin

      执行刷新

    以上是启动节点的必要操作,细节后续会逐步介绍。

    2.4 修改CMakeLists

    主要修改两个地方。反注释就可以了。

    • add_executable:编译目标
    • target_link_libraries:定义链接库
    ## Declare a C++ executable
    ## With catkin_make all packages are built within a single CMake context
    ## The recommended prefix ensures that target names across packages don't collide
    add_executable(${PROJECT_NAME}_node src/ros_tutorial_node.cpp)
    
    ## Specify libraries to link a library or executable target against
    target_link_libraries(${PROJECT_NAME}_node
      ${catkin_LIBRARIES}
    )
    
    2.5 编译并执行
    2.5.1 build

    build需要在workspace下进行,故先返回上级目录,再执行catkin_make

    $ cd ..
    $ catkin_make
    

    build成功后,可留意一下workspace下的build和devel文件夹,编译的结果在devel中,build主要记录了cmake相关编译文件。

    2.5.2 run

    首先需要启动roscore,也就是之前提到过的ros master 节点。打开一个新的终端:

    $ roscore
    

    然后在之前的终端中输入:

    $ source devel/setup.bash
    $ rosrun ros_tutorial ros_tutorial_node
    

    初学ros的时候经常会忘记source,养成习惯就好了。

    最后,输出结果:

    $ rosrun ros_tutorial ros_tutorial_node
    [ INFO] [1620964595.224187100]: spin once
    [ INFO] [1620964596.224587500]: spin once
    [ INFO] [1620964597.224583200]: spin once
    [ INFO] [1620964598.224580900]: spin once
    [ INFO] [1620964599.224578200]: spin once
    

    代码的意思是 每秒写一条日志。

    3 结语

    本文快速地把学习ros需要的最基本操作串了起来,接下来会介绍ros的通信方式。

    本系列教程是笔者过去半年的ros开发经验总结,记录成文供读者参考,欢迎留言交流。

    展开全文
  • ROS系统cpp创建节点node

    2021-08-25 21:00:01
    创建一个workspace mkdir -p ws/src workspace中必须先创建src文件夹 编译工作空间 cd ws catkin_make source devel/setup.bash 进入工作空间后使用catkin_make 编译 source可以多使用几次。 创建package ...

    创建一个workspace

    mkdir -p ws/src

    workspace中必须先创建src文件夹

    编译工作空间

    cd ws
    catkin_make
    source devel/setup.bash

    进入工作空间后使用catkin_make 编译

    source可以多使用几次。

    创建package

    cd src
    catkin_create_package {pkg_name} rospy roscpp rosmsg
    cd ../
    source devel/setup.bash

    编写cpp程序

    找到clion所在的文件夹

    ./clion.sh

     使用命令行的方式打开clion,否则在cmakelist可能报错

     打开图中的cmakelists,在这两处做修改,否则后续编译会失败

     

     编写节点

    #include <iostream>
    #include <string>
    #include <ros/ros.h>
    using namespace std;
    
    int main(int argc , char** argv ){
    
        string nodeName = "node_3";
    
        ros::init(argc, argv,nodeName);
        ros::NodeHandle node;
    
        cout<<nodeName<<endl;
    
    
    
        return 0 ;
    }

    回到workspace下,source一下再编译

    cd ws
    source devel/setup.bash
    catkin_make

     测试一下,测试之前roscore需要启动、

    roscore
    

    重开一个命令行,回到ws下

    cd ws
    rosrun {pkg_name} {node name}

    展开全文
  • ROS 主从节点问题

    千次阅读 2022-03-24 16:20:27
    修改节点主要涉及两个文件 ~/.bashrc /etc/hosts 主从关系 树莓派控制的底盘一般作为主机PI 电脑一般作为检测端PC hosts文件修改 主机PI进行操作 告诉机器还有个PC 在哪里 sudo vim /etc/hosts 在最下面添加 `192....
  • 本节创建两个节点,一个用于发布数据,另一个节点接收该数据。 定位到工作区的src目录下,创建两cpp文件。 example_1a.cpp #include "ros/ros.h" //包含ros节点所需的全部文件 #include "std_msgs/String.h" //用于...
  • ROS学习记录3——创建一个节点

    千次阅读 2020-03-26 11:48:57
    1.创建一个功能包 首先,创建一个文件夹作为我们的“工作空间”,然后在工作空间内新建一个src文件夹: 接着我们在我们的工作空间的目录下,运行以下代码: catkin_make 然后在工作空间里会出现:build、devel、....
  • 在Ubuntu20.04中安装ROS Noetic 解决Ubuntu安装ros报错E 这两个链接可以搞定,唯一要注意的是公钥: 设置公钥: sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu....
  • Python创建简单的ROS节点: 用Python实现ROS节点(这里也说明了用Python写ROS功能包也是需要CMakelists.txt的) https://blog.csdn.net/sinat_16643223/article/details/114057998 Python创建ROS节点(使用...
  • ROS:关于节点节点句柄以及命名空间 参考资料:ROS官方文档 首先,我们需要明确的是 节点节点句柄 是不同的。一般而言,一个cpp文件只能启动一个ROS节点,但作为该节点的句柄却可以设置多个。 The ros::...
  • ros 创建node节点并编译

    千次阅读 2019-11-19 20:41:18
    在开始第一个ROS(Robot...创建一个工作区(workspace) 工作区可以作为一个独立的项目进行编译,存放ROS程序的源文件、编译文件和执行文件。建立工作区的方法如下: $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/sr...
  • ROS中使用C++编写节点

    千次阅读 2019-03-18 10:57:03
    使用catkin创建一个工作环境并使用C++写两个节点,实现talker与listener 创建一个工作环境 cd ~ mkdir -p catkin_ws/src cd catkin_ws catkin_make 其中catkin_ws是工作环境目录,src保存源代码 这时候会在工作环境...
  • ROS节点

    千次阅读 多人点赞 2019-12-28 16:25:22
    ROS节点介绍 在ROS的世界里,最小的进程单元就是节点(node) 一个软件包里可以有多个可执行文件,可执行文件在运行之后就成了一个进程(process),这个进程在ROS中就叫做节点 从程序角度来说,node就是一个可执行...
  • ROS节点创建与运行

    2020-08-17 20:53:50
    ROS节点创建与运行 节点发布消息–Publish 新创建功能包 在src里面创建, catkin_create_pkg … 编辑功能包代码 在src/pkg中创建cpp/py文件,打开编辑 代码为古月居课程用的教学代码: /** * 该例程将发布...
  • 1. 创建工作空间 mkdir -p 02_ros_ws/src 进入terminal,查看文件夹 2. 创建功能包 ros2 pkg create tom --build-type ament_python --dependencies rclpy cd 进入src文件夹后,执行上述命令。其中 ros2 ...
  • 之前博客《RO发布者S复习笔记之——系统框架及其编程规范》的(发布者节点和订阅者节点创建和运行)一节中以及介绍如何创建发布者、订阅者、话题消息的通信。本博文继这个博客,来复习一下创建和运行服务服务器与...
  • 控制节点将订阅这些角度,并使用rosservice调用使用Arduino板(将在下面说明)将云台旋转到给定角度。 就我而言,万向架安装在机器人的前部,将传感单元对准不同的方向,我已经有了罗宁,所以我没有购买新的万
  • ros中cpp节点创建

    2021-04-10 16:53:09
    1.创建工作空间 mkdir -p ~/test_ws/src cd ~/test_ws/src catkin_init_workspace cd ~/test_ws catkin_make 2.创建功能包 cd ~/tets_ws/src catkin_create_pkg test-cpp roscpp std_msgs 3.在src中创建...
  • Qt——在Qt中创建ROS节点 1、如何在Qt中发布一个话题 QNode::init 函数中初始化节点ROS Master注册节点信息 发布话题
  • ros系统是通过各个节点组成的,每个节点相当于一个子程序,各个节点除了各司其职之外还要相互合作,它们通过传递话题消息或者提供服务两种方式来进行通信。那各个节点又不是人,它们不会自来熟,因此需要一个中介帮...
  • 01 创建节点 1.1 创建发布节点 example_1a.cpp文件创建一个名为example1a的节点,它将在话题/message来发布数据 #include "ros/ros.h" #include "std_msgs/String.h" #include <sstream> int main(int argc, ...
  • 在本例,用户将会配置一个模型为一个单独的ROS节点生成C++代码,将会转换代码到Ubuntu Linux系统,编译ROS节点并运行。预备知识这个例程需要嵌入式编码器;必须要有Ubuntu Linux系统用于编译和运行生成的C++代码,...
  • 4.创建一个由多个节点组成的ROS包,并对这些节点(在Python中)进行编程,以便使用ROS通信方法彼此通信。 5.浏览Linux文件系统,学习如何在Linux终端中执行各种文件系统操作。 [TERMINAL 1] $ roslaunch turtlebot3...
  • ROS 节点开发

    2022-03-31 16:36:08
    初始化ros工作空间,1个工作空间可以有多个ros工程 #!/bin/bash #创建 rwp=$(pwd)/../ad706 mkdir -p ${rwp}/src cd ${rwp}/src catkin_init_workspace ...创建ros工程 #!/bin/bash source /opt/ros/kinetic
  • ROS2 的主函数的一般形式如下面的代码所示,实际使用时,当我在类里面创建了一个成员函数的时候,发现无法调用到该函数。 int main(int argc, char **argv) { // RCLCPP_INFO(LOGGER, "Initialize node"); rclcpp:...
  • 全文参考博客:ROS教程(三):创建程序包及节点(图文) ** 1、创建工作空间catkin_ws $ mkdir -p ~/catkin_ws/src $ cd catkin_ws #进入catkin_ws $ catkin_make #初始化工作空间,此时生成build文件与devel文件,...
  • ros创建一个节点 ROS2的Rust客户 (Rust Client for ROS2) This is the first article in this series: Rust Client for ROS2 from Scratch. 这是本系列的第一篇文章: Scratch的Rust Client for ROS2 。 背景 ...
  • 代码实现参考: chatter_pub=nh.advertise... ros::init(argc,argv,"ergouzi_colass"); // 基于节点句柄发布不同话题名称的四种方式 // 注意:带有~都会自动加入节点名,否则就直接将()中的名称写在话题前 // 方
  • ROS学习之 cpp节点句柄

    千次阅读 2016-07-18 19:33:02
    wiki链接:...NodeHandles节点句柄 API: http://docs.ros.org/api/roscpp/html/classros_1_1NodeHandle.html 关于节点的启动与关闭,已经在之前的博客中学习记录过了(http://wiki.ros.org/roscpp/
  • 如何编写ros服务节点

    千次阅读 2019-05-19 11:29:24
    编写ros服务节点: 观看此教程之前,请确保您已经按照ros编写srv教程编写了srv文件 首先,我们设置并打开相应的路径,使用指令: . ~/catkin_ws/devel/setup.bash roscd beginner_tutorials 然后创建文件,指令: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,373
精华内容 4,549
关键字:

ros创建节点