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

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

拓展中搜索并安装ROS插件

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

配置文件:tasks.json

Ctrl+Shift+P: Configure Default Build Task

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

在新增的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

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

在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取消注释得到如下图的三条语句

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

再Ctrl+Shitf+B进行编译

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

ROS:start core

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

执行结果:

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

 

上一篇:IDEA取消编译时 messages build 的弹窗


下一篇:kafka