VSCode下开发ROS的(C++)

  • Post author:
  • Post category:其他


1.创建工作空间

mkdir -p test_ws/src        //创建文件夹  (必须得有 src) ,也可以鼠标点击来创建
cd test_ws                  //移动到目录下
catkin_make                //进行编译

2.启动VSCode

进入 test_ws 启动 vscode

cd test_ws
code .

安装好VSCode的前提下  终端输入code .自动在该目录下运行VSCode

3. 配置vscode 编译 ros

快捷键 **ctrl + shift + B** 调用编译,选择:`catkin_make:build`

可以点击配置(小齿轮),修改.vscode/tasks.json 文件

工程下自动生成.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”
            "group": {"kind":"build","isDefault":true},
            "presentation": {
                "reveal": "always"//可选always或者silence,代表是否输出信息
            },
            "problemMatcher": "$msCompile"
        }
    ]
}

src右键没有Create Catkin Package的小伙伴自觉去安装ros拓展,如下:

弹出小窗里输入package名字  enter

4. 功能包下 C++ 的实现

在cpp文件中加入内容:

/*
  发布方实现
     1.包含头文件;
     2.初始化 ROS 节点
     3.创建节点句柄
     4.创roscore建发布者对象
     5.编写发布逻辑并发布数据
*/
 
//ros里的文本类型——————>std_msgs/String.h
//1.包含头文件;
#include"ros/ros.h" //包含了标准ROS类的声明
#include"std_msgs/String.h" //文本被封装成单独的数据类型了std_msgs功能包里的string.h
#include<sstream> //支持字符串的流输入输出
 
int main(int argc, char  *argv[])
{
    setlocale(LC_ALL,"");//防止乱码
//2.初始化 ROS 节点  
    ros::init(argc,argv,"talker");//定义了解
 
// 3.创建节点句柄
    ros::NodeHandle nh;//相当于一个重命名 NodeHandle = nh
 
//4.创建发布者对象
    ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",10);
 
//5.编写发布逻辑并发布数据
  //要求以10hz的频率发布,文本后添加编号
  //先创建被发布的消息
    std_msgs::String msg;//创建一个名为msg,在std_msgs/String里
  //发布频率
    ros::Rate rate(10);
  //设置编号
    int count = 0;//定义一个int数据类型的count
  //编写循环,循环中发布数据
  while (ros::ok())
  {
      count++;
 
      //msg.data = "hello";消息内容为hello
      //实现字符串拼接数字,https://blog.csdn.net/shs1992shs/article/details/83051298
      std::stringstream ss;//因为是字符串与数字的组合,所以需要字符串流stringstream
      ss << "hello ---> " <<count;//C++中"<<“叫做插入运算符,第一个相当于把右边赋值给左边,第二紧接其后也一样。
      msg.data = ss.str(); //把流里面的变成字符串给msg.data,我们之前定义的消息是字符串string,所以要用到stringstream里的str
      pub.publish(msg);//用这个发布者对象发布消息,看定义,也和我们之前的创建发布者那边有关,他只能发布string的
      //添加日志
      ROS_INFO("发布的数据是:%s",ss.str().c_str());//%s表示字符串
      rate.sleep();
  }
    
    return 0;
}

为了使编译器能够成功使用ros里的函数补齐提示,需要以下操作:

可能是ubuntu和ros的版本不同,没有cppstandard的可以自己加上这一行:并改成c++17

5. 配置 CMakeLists.txt文件(C++)

在src路径下自动生成了一个CMakeLists.txt文件,但是我不需要这个,于是就删掉了,在工程路径下建立一个CMakeLists.txt  内容如下

cmake_minimum_required(VERSION 3.0.2)
project(helloros)

find_package(catkin REQUIRED COMPONENTS message_generation roscpp sensor_msgs std_msgs geometry_msgs)

# catkin_package(
#   CATKIN_DEPENDS
# )
find_package(catkin  REQUIRED COMPONENTS
 roscpp
)
 
include_directories(include ${catkin_INCLUDE_DIRS} )

add_executable(helloros
  src/helloros.cpp
)
add_dependencies(helloros ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(helloros
  ${catkin_LIBRARIES}
)

6. 编译执行

$ cd build
$ cmake ..
$ make  //我自己生成的可执行文件直接在build下面
$ ./helloros

运行:

//在一个终端运行
roscore 
 
 //在一个新的终端运行
source ./devel/setup.bash        //添加环境变量
rosrun hello_ros_package  helloros  //运行,格式 rosrun  功能包的名字  可执行的节点 



版权声明:本文为qq_35297051原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。