当前位置: 首页 > news >正文

VScode创建ROS项目 ROS集成开发环境

ROS使用VScode创建项目步骤

  • 1.创建ROS工作空间
  • 2.启动VScode
  • 3.VScode编译ROS
  • 4.创建ROS功能包
  • C++语言开发
  • Python语言开发

本文章介绍了如何在Ubuntu18.04系统下搭建VScode 的ROS项目
搭建项目分为一下几个步骤:

1.创建ROS工作空间

创建一个demo的ROS工作空间,并进行编译,此时home路径下会生成一个demo的工作空间,demo文件下的结构如图所示

mkdir -p demo/src  # (必须得有 src)
cd demo
catkin_make

在这里插入图片描述

2.启动VScode

进入到demo路径下,启动VScode

cd demo
code .

3.VScode编译ROS

使用快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build点击设置进行编译配置,会生成一个.vscode/tasks.json 文件,修改.vscode/tasks.json 文件的内容,将tasks.json的内容换为如下内容
在这里插入图片描述
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"}]
}

4.创建ROS功能包

  • 选定 src 右击 —> create catkin package
    在这里插入图片描述
  • 创建一个hello_world功能包
    在这里插入图片描述
  • 使用roscpp rospy std_msgs作为依赖库
    在这里插入图片描述

hello_world功能包下的结构如图所示,功能包创建成功
在这里插入图片描述

C++语言开发

  • 在hello_world功能包的src文件夹下新建一个cpp文件

    #include "ros/ros.h"int main(int argc, char *argv[])
    {setlocale(LC_ALL,"");  // 设置可以显示中文//执行节点初始化ros::init(argc,argv,"HelloWorld");//输出日志ROS_INFO("Hello World!!!哈哈哈哈哈哈哈哈哈哈");return 0;
    }

    在这里插入图片描述

  • 配置CMakeLists.txt
    修改hello_world功能包下的CMakeLists.txt,找到add_executable和target_link_libraries,修改成如图所示,hello_world定义的是节点,可以自己随机命名,但add_executable和target_link_libraries的节点要保持一致
    在这里插入图片描述

  • 编译执行

    • 按快捷键ctrl + shift + B 编译,如何所示,说明项目没有问题
      在这里插入图片描述

    • 开启一个Terminal,运行roscore命令在这里插入图片描述

    • 再开启一个新的Terminal,执行以下命令,运行程序

      cd demo
      source ./devel/setup.bash
      rosrun hello_world hello_world # 第一个hello_world表示的是hello_world功能包,第二个hello_world表示的hello_world节点
      

      在这里插入图片描述

Python语言开发

  • 在 hello_world 功能包新建一个 scripts 文件,在 scripts 下新建一个 hello_world_p.py 文件

    #! /usr/bin/env python3import rospyif __name__ == "__main__":rospy.init_node("hello_p")rospy.loginfo("hello world! this is python")
    

    在这里插入图片描述

  • 给 python 文件添加可执行权限
    进入到scripts文件夹下,执行 chmod +x hello_world_p.py 给python文件添加可执行的文件

    cd src/hello_world/scripts
    chmod +x hello_world_p.py
    
  • 配置 CMakeLists.txt
    修改hello_world功能包下的CMakeLists.txt,找到catkin_install_python,修改成如图所示:
    在这里插入图片描述

  • 编译执行

    • 按快捷键ctrl + shift + B 编译,如何所示,说明项目没有问题
      在这里插入图片描述

    • 开启一个Terminal,运行roscore命令
      在这里插入图片描述

    • 再开启一个新的Terminal,执行以下命令,运行程序

      cd deno
      source ./devel/setup.bash
      rosrun hello_world hello_world_p.py
      

      在这里插入图片描述

相关文章:

  • 【数学】Leetcode 69. x 的平方根【简单】
  • Linux源码阅读笔记04-实时调度类及SMP和NUMA
  • 跟《经济学人》学英文:2024年6月15日这期 The war for AI talent is heating up
  • AI与音乐:创新之光还是毁灭之剑?
  • 微型操作系统内核源码详解系列五(四):cm3下svc启动任务
  • 天马学航——智慧教务系统(移动端)开发日志三
  • 用友U9-UBF自定义报表-打印模板开发学习笔记
  • SpringBoot测试实践
  • Spark SQL 血缘解析方案
  • 【Apache Doris】周FAQ集锦:第 7 期
  • python,ipython 和 jupyter notebook 之间的关系
  • 什么是N卡和A卡?有什么区别?
  • Python设计模式 - 简单工厂模式
  • Linux驱动开发笔记(十一)tty子系统及其驱动
  • AMSR/ADEOS-II L1A Raw Observation Counts V003地球表面和大气微波辐射的详细观测数据
  • 【Leetcode】104. 二叉树的最大深度
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 10个最佳ES6特性 ES7与ES8的特性
  • CSS盒模型深入
  • Git同步原始仓库到Fork仓库中
  • iOS 颜色设置看我就够了
  • java取消线程实例
  • jdbc就是这么简单
  • Laravel 中的一个后期静态绑定
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Spring核心 Bean的高级装配
  • STAR法则
  • Travix是如何部署应用程序到Kubernetes上的
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vue2.0 实现互斥
  • 将回调地狱按在地上摩擦的Promise
  • 区块链将重新定义世界
  • 线上 python http server profile 实践
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • Java总结 - String - 这篇请使劲喷我
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #每日一题合集#牛客JZ23-JZ33
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (1) caustics\
  • (12)Hive调优——count distinct去重优化
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C++)八皇后问题
  • (二)原生js案例之数码时钟计时
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)setTimeout 和 setInterval 的区别
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理(一):@echo off
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET 给NuGet包添加Readme
  • .Net7 环境安装配置