ROS开发系列(2)-ROS工程创建(VSCODE)

1 vscode安装

2 vscode相关插件安装

安装下图中的插件,有助于ROS程序的开发
在这里插入图片描述

3 ros工程的创建

1.打开工作空间
在ROS工作空间根目录下打开终端,输入code .打开vscode,打开vscode后会发现一个空的工程
在这里插入图片描述

2 创建src文件夹
在ROS-TEST-TEST下创建src文件夹
3 编译工作空间
在terminal下打开一个新的终端,输入catkin-make,然后就会自动生成devel和build文件夹
在这里插入图片描述
打开系统终端输入如下指令,配置当前ROS工程的环境变量

echo "source xxx/ros-test-test/devel/setup.bash">>~/.bashrc   #此处xxx代表你的保存文件夹的路径
source ~/.bashrc 

检测配置是否成功,输入下面的指令,按回车,成功会显示我们创建的这个ROS工作路径, 如果不成功,请仔细检查输入的指令。

echo $ROS_PACKAGE_PATH

4 生成json配置文件
ctrl+shift+p输入c/c++: edit configurations(JSON)即可创建出c_cpp_properties.json文件。
在这里插入图片描述

5 创建功能包
右键点击src文件夹,右键弹出选项中,点击"Create Catkin Package",输入包的名称test,按Enter确认,输入包的依赖“std_msgs roscpp”,空格隔开,按Enter确认。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6 创建发布者程序
点击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();
    }
    
}

7 创建订阅者程序
点击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;
}

注意:创建这两个程序后,会发现在include处有波浪线,不要慌,下面我们就来解决这个问题
在这里插入图片描述

8 配置cmakelists文件
在test目录下,双击"CMakeLists.txt",在文件末尾添加:

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)

9 编译工作空间
在terminal中打开一个新的终端输入``,然后会得到如下图片
在这里插入图片描述
这时候不要慌,然后打开之前生成的c_cpp_properties.json文件,在configurations中添加"compileCommands": "${workspaceFolder}/build/compile_commands.json"注意在这句话上面需要添加一个逗号

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json"

        }
    ],
    "version": 4
}

再次编译工作空间就会成功了
在这里插入图片描述
10 运行节点看一下结果

  1. 打开系统终端,输入roscore,打开ROS总节点

  2. 再打开一个系统终端,输入如下指令:

    cd ros-test-test
    rosrun test talker
    
  3. 再打开一个系统终端,输入如下指令:

    cd ros-test-test
    rosrun test listener
    

结果如下:
在这里插入图片描述

4 添加头文件的方法

4.1 非工作区头文件的添加

Ctrl+Shift+P 。选择c_cpp_properties.json,includePath和browse中都需要添加需要的头文件路径;这个没试过好不好使在哪个博客上看到的忘记了
在这里插入图片描述

4.2 工作区自己写的头文件的添加

在c_cpp_properties.json中的includePath加入自己的头文件的路径即可。并在cpp文件中#include该文件,注意include的是相对当前cpp文件的相对路径。#include "../head/test.h",根据当前工程文件结构决定。"/home/zero/ros-test-test/src/test/src/**",这个是自己工程下自己创建的功能包的路径

{
    "configurations": [
        {
            "browse": {
                "databaseFilename": "",
                "limitSymbolsToIncludedHeaders": true
            },
            "includePath": [
                "/home/zero/catkin_ws/devel/include/**",
                "/opt/ros/kinetic/include/**",     
                "/home/zero/ros-test-test/src/test/src/**",                
                "/usr/include/**",
                "/opt/ros/kinetic/include"
            ],
            "name": "ROS",
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu11",
            "cppStandard": "c++17",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json"
        }
    ],
    "version": 4
}

5 BUG

在使用vscode开发ROS的过程中,遇到了程序只是改一个数据,就不能编译通过了,这时候重启一下vscode可能就会好了。或者重启一下电脑。
我是先使用了一下catkin_make clean 然后没好使,然后重启了一下vscode就好了,不知道使用那个clean起没起作用。

6 杂项

在配置c_cpp_properties.json文件时,发现我的json文件中cstandard是gnu11而我在别人博客看到的是c11,所以查了一下两者的区别。
gnu11:带gnu c扩展的c11标准,如果你的代码包含了typeof,__attribute__等等gnu的扩展,就必须用这个。

参考

头文件波浪线问题解决方法
vscode开发ROS(3)-创建第一个ROS项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值