VS Code创建、调试ROS项目

2023-05-16

前言:

在vs code下配置ROS项目开发的环境
包括catkin创建编译工作空间,创建ROS项目,调试ROS节点

一、创建工作空间

首先创建一个cMake工作空间,用到了catkin_make其实就是
cmake …
make
两个步骤的缩写。

$ mkdir -p ~/ros_test/src
$ cd ~/ros_test/
$ catkin_make

注意:每次打开工作空间ros_test文件要source一下

cd ~/ros_test
source devel/setup.bash

除此之外,启动ROS还需要source一下:
1)如果之前已经讲source整个语句放到了~/.bashrc中

$ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc

可以直接运行:

source ~/.bashrc

检查通过:

gedit ~/.bashrc

2)如果没有的话就需要自己完整的source

source /opt/ros/melodic/setup.bash

至此,已经创建好了工作空间,

二、创建ROS项目

1、VSCode打开工作空间

用VSCode打开ros_test文件夹,会标示该文件为catkin_workspace,builddevelsrc都在,除此之外,会自动生成vscod文件里面有两个json文件:c_cpp_properties.jsonsetting.json.
在这里插入图片描述c_cpp_properties.json

{
    "configurations": [
        {
            "browse": {
                "databaseFilename": "",
                "limitSymbolsToIncludedHeaders": true
            },
            "includePath": [
                "/opt/ros/melodic/include/**",
                "/home/xiaowei/catkin_ws/src/beginner_tutorials/include/**",
                "/usr/include/**"
            ],
            "name": "ROS",
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c11",
            "cppStandard": "c++14"
        }
    ],
    "version": 4
}

“/home/xiaowei/catkin_ws/src/beginner_tutorials/include/**”,
settings.json
这一句

{
    "python.autoComplete.extraPaths": [
        "/home/xiaowei/catkin_ws/devel/lib/python2.7/dist-packages",
        "/opt/ros/melodic/lib/python2.7/dist-packages"
    ]
}

接下来需要将当前ROS工程的环境变量配置,输入:

echo "source ~/ros_test/devel/setup.bash" >> ~/.bashrc

之后直接source即可

source ~/.bashrc

2、创建ROS包

右键点击"src"文件夹,右键弹出选项中,点击"Create Catkin Package",输入包的名称ros_test,按Enter确认,输入包的依赖“std_msgs rospy roscpp”,空格隔开,按Enter确认。
在这里插入图片描述包创建完成,如下图。
在这里插入图片描述在src文件夹下创建的程序包ros_test,包含includesrcCMakeLists.txtpackage.xml

3、cpp和CMakeLists.txt

主程序以talker和listener为例。
点击ros_test目录下的src文件夹,“右键”–>“新建文件”,输入talker.cpp,双击打开,粘贴以下代码。

#include <iostream>
#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char **argv)
{
    //ros节点初始化 "talker"节点名称,在ROS里同一时间不允许出现两个
    ros::init(argc,argv,"talker");
    //创建节点句柄
    ros::NodeHandle h;
    //创建一个publisher, topic:chatter,消息类型std_msgs::String
    ros::Publisher chatter_pub = h.advertise<std_msgs::String>("chatter",1000); // "chatter"话题名称,消息缓存
    //设置单循环的频率
    ros::Rate looprate(10);

    while (ros::ok())
    {
        std_msgs::String msg;
        std::stringstream ss;
        ss<<"hello world";
        msg.data = ss.str();
        //发布消息
        ROS_INFO("%s",msg.data.c_str());
        chatter_pub.publish(msg);
        //等待回调函数
        ros::spinOnce();
        //按照之前设定的进行循环
        looprate.sleep();
    }
    
}

点击ros_test目录下的src文件夹,“右键”–>“新建文件”,输入listener.cpp,双击打开,粘贴以下代码。

#include <iostream>
#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallBack(const std_msgs::String::ConstPtr &msg)
{
    ROS_INFO("I get: [%s}",msg->data.c_str());
}
int main(int argc, char **argv)
{
    //ros节点初始化 "listener"节点名称,在ROS里同一时间不允许出现两个
    ros::init(argc,argv,"listener");
    //创建节点句柄
    ros::NodeHandle h;
    //创建一个subscriber, topic:chatter,消息类型std_msgs::String, 接收到消息,响应chatterCallBack
    ros::Subscriber listener_sub = h.subscribe<std_msgs::String>("chatter",1000,chatterCallBack);
    
    //循环等待回调函数
    ros::spin();
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(ros_test)

## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg)


## Generate added messages and services
generate_messages(DEPENDENCIES std_msgs)

## Declare a catkin package
catkin_package()

## Build talker and listener
include_directories(include ${catkin_INCLUDE_DIRS})

add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_dependencies(talker ${PROJECT_NAME}_generate_messages_cpp)

add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(listener ${PROJECT_NAME}_generate_messages_cpp)

其中

add_dependencies(talker ${PROJECT_NAME}_generate_messages_cpp)

意味:为可执行文件talker 和 listener添加对生成的消息文件的依赖以确保自定义消息的头文件在被使用之前已经被生成。

4、编译

点击"终端"–>“新建终端”,在终端中输入"catkin_make"
在这里插入图片描述生成可执行文件后,接下来可以运行了,分别打开三个终端输入如下指令:

$ roscore
$ rosrun ros_test talker
$ rosrun ros_test listener

在这里插入图片描述

三、调试ROS节点

1, 在VSCode左侧,点击Debug按钮,点击绿色小三角,在弹出的对话框中,选择环境为“C++(GDB/LLDB)"。此时VSCode会自动生成一个"launch.json"文件。

如果需要对talker.cpp进行断点调试,将:

"program": "enter program name, for example ${workspaceFolder}/a.out"

更改为:

"program": "${workspaceFolder}/devel/lib/ros_test/talker",

2、更改CMakeLists.txt
在project后面添加:

SET(CMAKE_BUILD_TYPE Debug)  

最后编译

$ roscore
$ catkin_make

3、断点调试
最后的断点调试是在终端里输入catkin_make产生的。
在这里插入图片描述

四、Tips

这时,可能还有一些头文件找不到,比如ros/ros.h,我们还需要配置一些东西。
这时使用鼠标悬浮功能,点击“红色灯泡”,点击edit c_cpp_properties.json选项,vscode会自动在配置文件夹中新建.vscode/文件夹,同时在里面初始化了c_cpp_properties.json文件
在这里插入图片描述
用命令行编译我们写的c++代码,同时输出编译信息文件

catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes

这个命令会输出一个compile_commands.json文件在ROS工作空间的build文件夹下面

然后在c_cpp_properties.json文件添加下面一段话

"compileCommands": "${workspaceFolder}/build/compile_commands.json"

这样,就基本可以找到全部头文件了,然后就可以使用代码提示来码代码了。在这里插入图片描述
最后如果需要编写Launch文件,参考之前的文章。

参考:
vscode开发ROS(3)-创建第一个ROS项目
ros项目调试:vscode下配置开发ROS项目

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VS Code创建、调试ROS项目 的相关文章

随机推荐

  • 开源日志库<log4cplus+VS2008使用>整理

    原创作品 xff0c 允许转载 xff0c 转载时请务必以超链接形式标明文章 原始出处 作者信息和本声明 否则将追究法律责任 http pyhcx blog 51cto com 713166 143549 本文出自 碧海笙箫 博客 xff0
  • 二.extern "C"

    extern关键字 xtern可以置于变量或者函数前 xff0c 以标示变量或者函数的定义在别的文件中 xff0c 提示编译器遇到此变量和函数时在其他模块中寻找其定义 此外extern也可用来进行链接指定 一 extern 34 C 34
  • Matlab2013b和Visual Studio 2013混合编程总结

    Matlab2013b和VisualStudio 2013混合编程总结 一 关于软件版本和安装的说明 一般来说 xff0c Matlab版本需高于或者等于VisualStudio的版本 综合版本功能和兼容问题 xff0c 我们选用了Matl
  • [linux] xlwt引起的字符串长度限制解除 & 递归深度限制解除 &Overflow问题

    1 xlwt引起的字符串长度限制 Exception String longer than 32767 characters 由于xlwt引起的excel写入的字符串 xff0c 长度不能大于32767 1 换txt写入 xff0c 或者用
  • 宏定义 宏参数

    带参数的宏定义 xff0c 利用宏参数创建字符串 运算符 看看以下两个宏定义 xff1a define PSQR x printf 34 The square of x is d n 34 x x define PSQR x printf
  • 舵机的PD控制

    PID 舵机以及差速PD调节 span class token keyword struct span span class token class name PID span span class token punctuation sp
  • 位置环与速度环的串级PID

    WHEELTEC的串级pid参考代码 span class token keyword float span Position KP span class token operator 61 span span class token nu
  • 智能车摄像头算法——圆环元素

    入环 1 入环的函数 xff08 1 xff09 搜上下边线 xff08 2 xff09 找凸起的弧 xff08 3 xff09 两点之间补线 xff08 4 xff09 判断上线是否单调 2 找圆环3 补线入环出环 1 入环的函数 xff
  • ROS的代价地图与AMCL定位原理

    地图服务与AMCL定位 costmap xff08 代价地图 xff09 AMCL定位 xff08 自适应蒙特卡罗定位 xff09 costmap xff08 代价地图 xff09 1 地图文件格式 xff1a 除了pgm xff08 便携
  • ROS路径规划算法

    ROS路径规划算法 全局路径规划Dijkstra算法A 算法 局部路径规划DWA算法TEB算法 全局路径规划 提供Dijkstra和A算法 xff0c 默认使用Dijkstra Dijkstra是把从出发点到终点的整个栅格地图上的所有的点
  • STM32常用功能配置

    STM32基本代码 设置外部中断定时器中断定时器产生pwmAD多通道转换DMA 43 AD扫描多通道转换iic协议读取数据SPI协议读取数据 设置外部中断 中断优先级分组 外部中断 AFIO作用 注意 xff1a 1 相同的Pin不能同时触
  • Ogre-渐变背景色(gradient background)的实现

    转载自 xff1a http blog csdn net hefee article details 6287341 背景色在ogre里面是通过ViewPort类中的setBackgroundColour xff08 xff09 这个成员函
  • Qt::WindowFlags

    查了些资料 xff0c 整理了一下 xff0c 以备查询 枚举类型 Qt WindowFlags低位的一个字节用于定义窗口部件的窗口类型 Qt WindowFlags的高位字节定义了窗口提示 xff0c 窗口提示能够进行位或操作 xff0c
  • java学习记录8

    什么是File 文件夹和文件 xff1a 文件夹是用来组织和管理磁盘文件的一种数据结构 文件是在电脑中 xff0c 以实现某种功能或某个软件的部分功能为目的定义的一个单位 xff0c 文件是由文件名和图标组成 xff0c 一种类型的文件具有
  • 保护模式编程之(一)——分段机制与GDT/LDT

    概述 xff1a 若想理解操作系统程序中的启动相关的部分 xff0c 必须要理解保护模式下的编程 xff0c 而分段机制是保护模式编程下的基础 另外 xff0c 由于实模式与保护模式的不同 xff0c 对保护模式下的分段机制更需要注意 同时
  • C++ 网络编程

    socket通信 xff1a socket 创建TCP套接字 bind 将套接字绑定到本地地址端口上 listen 监听端口 connect accept 接受用户请求 xff0c 返回对应此连接的新套接字 read write close
  • ROS学习(2)——rviz与gazebo问题记录

    ROS学习 xff08 2 xff09 rviz与gazebo问题记录 继续按照教程学习 xff0c 踩了很多坑 1 工作环境配置问题 实践6 2 4在rviz中显示模型时 xff0c 运行launch文件出现如下报错 原因 xff1a 出
  • VINS-Mono 代码详细解读——基础储备:在线Cam到IMU的外参标定 InitialEXRotation类

    本讲还是为了estimator类中最主要的函数processImage xff08 xff09 做知识储备 前面两讲知识储备主要讲了IMU预积分相关的integrationBase类以及图像特征点管理器feature manager cpp
  • VINS-Mono 代码详细解读——回环检测与重定位、四自由度位姿图优化

    本文主要介绍VINS的闭环检测重定位与位姿图优化部分 xff0c 作为系列文章的最后一节 回环检测的关键就是如何有效检测出相机曾经经过同一个地方 xff0c 这样可以避免较大的累积误差 xff0c 使得当前帧和之前的某一帧迅速建立约束 xf
  • VS Code创建、调试ROS项目

    前言 xff1a 在vs code下配置ROS项目开发的环境 包括catkin创建编译工作空间 xff0c 创建ROS项目 xff0c 调试ROS节点 一 创建工作空间 首先创建一个cMake工作空间 xff0c 用到了catkin mak