ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

在ubuntu16上用vscode编译ros历程记录

2020-12-11 13:35:38  阅读:397  来源: 互联网

标签:node ROS vscode messages init myros 上用 ros


记录一下ubuntu16上用vscode编译ros的过程

拓展中搜索并安装ROS插件

配置文件:tasks.json

Ctrl+Shift+P: Configure Default Build Task

在新增的tasks.jsonz中配置如下内容

 

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "catkin_make",
            "problemMatcher": [
                "$catkin-gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "label": "catkin_make: build"
        }
    ]
}

Ctrl+Shift+P

创建一个ros包 :ROS:Create Catikin Package

命名为myros

在myros包的src新建myros_node.cpp文件

myros_node.cpp

#include "ros/ros.h"
#include "std_msgs/String.h"

#include <sstream>

class myclass 
{
  private:
    int hello;
  public:
  int get_hello(void)
  {
    return this->hello;
  }
};

/**
 * This tutorial demonstrates simple sending of messages over the ROS system.
 */
int main(int argc, char **argv)
{
  /**
   * The ros::init() function needs to see argc and argv so that it can perform
   * any ROS arguments and name remapping that were provided at the command line.
   * For programmatic remappings you can use a different version of init() which takes
   * remappings directly, but for most command-line programs, passing argc and argv is
   * the easiest way to do it.  The third argument to init() is the name of the node.
   *
   * You must call one of the versions of ros::init() before using any other
   * part of the ROS system.
   */
  ros::init(argc, argv, "talker");

  /**
   * NodeHandle is the main access point to communications with the ROS system.
   * The first NodeHandle constructed will fully initialize this node, and the last
   * NodeHandle destructed will close down the node.
   */
  ros::NodeHandle n;

  /**
   * The advertise() function is how you tell ROS that you want to
   * publish on a given topic name. This invokes a call to the ROS
   * master node, which keeps a registry of who is publishing and who
   * is subscribing. After this advertise() call is made, the master
   * node will notify anyone who is trying to subscribe to this topic name,
   * and they will in turn negotiate a peer-to-peer connection with this
   * node.  advertise() returns a Publisher object which allows you to
   * publish messages on that topic through a call to publish().  Once
   * all copies of the returned Publisher object are destroyed, the topic
   * will be automatically unadvertised.
   *
   * The second parameter to advertise() is the size of the message queue
   * used for publishing messages.  If messages are published more quickly
   * than we can send them, the number here specifies how many messages to
   * buffer up before throwing some away.
   */
  ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);

  ros::Rate loop_rate(10);

  /**
   * A count of how many messages we have sent. This is used to create
   * a unique string for each message.
   */
  int count = 0;
  while (ros::ok())
  {
    /**
     * This is a message object. You stuff it with data, and then publish it.
     */
    std_msgs::String msg;

    std::stringstream ss;
    ss << "hello world " << count;
    msg.data = ss.str();

    ROS_INFO("%s", msg.data.c_str());

    /**
     * The publish() function is how you send messages. The parameter
     * is the message object. The type of this object must agree with the type
     * given as a template parameter to the advertise<>() call, as was done
     * in the constructor above.
     */
    chatter_pub.publish(msg);

    ros::spinOnce();

    loop_rate.sleep();
    ++count;
  }


  return 0;
}

新建的文件提示找不到下面两个头文件。

#include "ros/ros.h"
#include "std_msgs/String.h"

此时:Ctrl+Shift+B进行编译错误就会消失。

在myros包下的CMakeLists.txt取消注释得到如下图的三条语句

再Ctrl+Shitf+B进行编译

编译成功后:Ctrl+Shift+P在出现大框框中分别执行:

ROS:start core

ROS:Run a Ros excutable -> myros->myrosnode

执行结果:

 

标签:node,ROS,vscode,messages,init,myros,上用,ros
来源: https://www.cnblogs.com/cczyd/p/14119866.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有