【ROS学习笔记2】使用vscode开发ROS全流程

news2025/7/28 22:18:57

【ROS学习笔记2】使用vscode开发ROS全流程

写在前面,本系列笔记参考的是AutoLabor的教程,具体项目地址在 这里

文章目录

  • 【ROS学习笔记2】使用vscode开发ROS全流程
    • 一、安装终端工具Terminator
    • 二、安装VsCode及插件
    • 三、使用VsCode开发全流程
      • 1、创建工作空间
      • 2、使用vscode打开工作空间
      • 3、创建ROS功能包
      • 4、添加Python可执行脚本文件
      • 5、添加Cpp可执行脚本
    • 四、添加launch文件
    • 五、Reference


一、安装终端工具Terminator

输入以下命令行安装terminator终端

sudo apt-get install terminator

terminator终端可以进行拆分,安装完成后启动的终端效果如下:


二、安装VsCode及插件

直接在snap商店中搜索vscode选择第一个软件进行安装即可,注意安装完成后需要对vscode进行更新

使用以下命令对vscode进行更新

sudo apt-get upgrade
sudo apt-get install vscode

需要安装的插件有c/c++ python ros,直接在插件商城搜索安装最多下载量的那个就可以。


三、使用VsCode开发全流程

1、创建工作空间

使用终端在用户目录下创建工作空间并且初始化

cd 用户目录
mkdir -p xxx_ws/src
cd xxx_ws
catkin_make

2、使用vscode打开工作空间

可以在vscode中通过图形化的方式来进行打开,不过这里推荐使用命令行的方式进行打开

cd xxx_ws
code .

然后在vscode中使用ctrl + shift + B执行第一次编译,在执行第一次编译之前我们需要对编译文件进行一些配置,选择这里的这个齿轮进入配置文件开始配置

将其修改为以下的内容:

{
// 有关 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"
        }
    ]
}

即完成配置,这时我们使用ctrl + shift + B执行第一次编译,没有报错即可进行下一步

3、创建ROS功能包

在安装ROS插件的前提下我们可以直接用图形化的方式来创建ROS功能包,省去了使用命令行

cd src
catkin_create_pkg 自定义Ros包名 roscpp rospy std_msgs

的麻烦。
这里直接使用图形化的方式来创建ROS功能包,在路径xxx_ws/src中创建功能包,如果没有该选项说明你没有安装ROS插件。

然后确定自己的包名,这里取的包名为holavscode(注意:包名不能有大写字母

紧接着为包添加依赖,一般的依赖都包括roscpp rospy std_msgs

这样我们就创建好了一个ROS功能包,接下来我们就可以在这个ROS功能包中继续完成我们的源码文件了。

4、添加Python可执行脚本文件

首先为python脚本文件创建一个存放的文件夹,

然我们可以在这个文件夹中开始编写我们的python脚本文件,这里写一个简单的脚本文件,打印一条信息Holaaaaa Vscode!!!

#! usr/bin/env python
#为python选择解释器

import rospy

if __name__ == "__main__":
    rospy.init_node("hola")
    rospy.loginfo("Holaaaaa Vscode!!!")

然后,使用chmod +x *.py可以为所有python文件添加可执行权限

接下来我们需要修改CmakeList.txt文件,找到

#############
## Install ##
#############

的位置,修改

catkin_install_python(PROGRAMS scripts/自定义文件名.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

修改完成后使用ctrl + shift + B执行编译,编译成功会出现以下的提示:

然后我们可以进行验证,首先进行数据刷新

cd xxx_ws
source ./devel/setup.bash

然后打开两个终端分别输入

roscore
rosrun 包名 脚本文件名.py

5、添加Cpp可执行脚本

首先为包添加一个可执行Cpp文件,输入以下内容

#include "ros/ros.h"

int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "");
    //执行节点初始化
    ros::init(argc, argv, "HolaVscode");
    //输出日志信息
    ROS_INFO("Holaaaaaa Vsode!!!");
    return 0;
}

注:如果使用cpp时没有代码提示:

修改 .vscode/c_cpp_properties.json

设置 “cppStandard”: “c++17”

然后修改CmakeList.txt文件

在CmakeList.txt文件中找到

###########
## Build ##
###########

部分

add_executable(执行结点名
  src/源文件名.cpp
)
target_link_libraries(执行结点名
  ${catkin_LIBRARIES}
)

例如这样

需要记住这个执行结点名,因为在后面使用rosrun运行程序的时候需要使用这个节点名,

在运行包之前同样要进行编译ctril+shift+B和缓存刷新

cd 工作空间
source ./devel/setup.bash

运行Cpp脚本和Python脚本有一点区别,Cpp需要编译所以我们使用的是其执行结点名,而Python脚本不需要编译我们可以直接使用源文件

rosrun 包名 执行节点名    #运行cpp脚本
rosrun 包名 python源文件名 #运行python脚本

下面是一个例子


四、添加launch文件

1、介绍

当我们在一个程序中需要启动多个节点时,如果每次都用rosrun逐一启动,显然效率低下,那么更好的做法是使用launch文件,一次性启动多个节点。

2、实现

1.选定功能包右击–>添加launch文件夹

2.选定launch文件夹–>添加launch文件

3.编辑launch文件内容

<launch>
    <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
    <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>
  • node --> 包含的某个节点
  • pkg --> 功能包
  • type --> 被运行的节点文件
  • name --> 为节点命名
  • output --> 设置日志的输出目标

4.更新缓存

source ./devel/setup.bash

5.运行launch文件

roslaunch 包名 launch文件名

3、示例
为我们的上述代码编写launch文件,并且输出到终端

<launch>
    <node pkg="holavscode" type="holavs_c" name="hell_c" output="screen"/>
    <node pkg="holavscode" type="holavs_p.py" name="hello_p" output="screen"/>
</launch>

结果:


五、Reference

http://www.autolabor.com.cn/book/ROSTutorials/chapter1/14-ros-ji-cheng-kai-fa-huan-jing-da-jian/143-launchwen-jian-yan-shi.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊短期疲软,但长期前景乐观

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 由于投资者对亚马逊(AMZN)前景的担忧&#xff0c;导致该公司的股价在过去一年中下跌了39%。然而猛兽财经认为亚马逊近期面临的不利因素只是暂时的&#xff0c;该公司还是有充分的条件可以在医疗保健和物流领域获得重大增长机…

ACM 记忆化搜索

一.记忆化搜索概述 1.概念 搜索是一种简单有效但是效率又很低下的算法结构&#xff0c;其低效的原因主要在于存在很多重叠子问题。而记忆化搜索则是在搜索的基础上&#xff0c;利用数组来记录已经计算出来的重叠子问题状态&#xff0c;进行合理化的剪枝&#xff0c;从而降低时…

高防CDN的知识了解

高防CDN是一种基于CDN&#xff08;内容分发网络&#xff09;技术的网络安全服务&#xff0c;旨在提供高级的防御措施来保护网站或应用程序免受DDoS&#xff08;分布式拒绝服务&#xff09;攻击和其他网络安全威胁。CDN是一种通过将内容分发到全球多个节点来加速网站或应用程序的…

DBC 文件

概述Vector的DBC文件描述了CAN网络的通信规范&#xff0c;通过定义signal可以表示CAN帧中的各个物理信号的含义。通过CANdb Editor软件可以创建和修改DBC文件&#xff0c;一般监控或控制CAN网络内的节点&#xff0c;不需要解析DBC文件里的全部信息&#xff0c;因为有些信息是给…

前端借助Canvas实现压缩base64图片两种方法

一、具体代码 1、利用canvas压缩图片方法一 // 第一种压缩图片方法&#xff08;图片base64,图片类型,压缩比例,回调函数&#xff09;// 图片类型是指 image/png、image/jpeg、image/webp(仅Chrome支持)// 该方法对以上三种图片类型都适用 压缩结果的图片base64与原类型相同// …

02--微信小程序开发流程

开发小程序一般流程&#xff1a;申请小程序帐号安装小程序开发者工具开发小程序提交审核和发布1、注册小程序帐号在微信公众平台官网首页&#xff08;mp.weixin.qq.com&#xff09;点击右上角的“立即注册”按钮。2、填写帐号信息 主体为企业时需要一些信息包括&#xff1a;企业…

狂神说:面向对象(一) —— OOP与方法回顾

OOP详解以类的方式组织代码&#xff0c;以对象的方式组织&#xff08;封装&#xff09;数据什么是面向对象封装 【口袋装数据&#xff0c;留个口&#xff0c;可以用】继承 【儿子和父亲】多态 【同一个事物表现出多种形态】对象和类实际&#xff1a;先有对象后有类代码&#xf…

商城进货记录交易-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)

【实验7-2】商城进货记录交易 【任务介绍】 1.任务描述 每个商城都需要进货&#xff0c;而这些进货记录整理起来很不方便&#xff0c;本案例要求编写一个商城进货记录交易的程序&#xff0c;使用字节流将商场的进货信息记录在本地的csv文件中。程序具体要求如下&#xff1a; …

网络编程NIO

Java NIO&#xff08;New IO 或 Non Blocking IO&#xff09;是从Java 1.4 版本开始引入的一个新的IO API&#xff0c;可以替代标准的 Java IO API。NIO 支持面向缓冲区的、基于通道的 IO 操作。NIO 将以更加高效的方式进行文件的读写操作。 非阻塞 IO(NIO) 通过Selector去实…

ASP.NET Core MVC 项目 IOC容器

目录 一&#xff1a;什么是IOC容器 二&#xff1a;简单理解内置Ioc容器 三&#xff1a;依赖注入内置Ioc容器 四&#xff1a;生命周期 五&#xff1a;多种注册方式 一&#xff1a;什么是IOC容器 IOC容器是Inversion Of Control的缩写&#xff0c;翻译的意思就是控制反转。 …

【Azure 架构师学习笔记】-Azure Data Factory (3)-触发器详解-翻转窗口

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 接上文【Azure 架构师学习笔记】-Azure Data Factory (2)-触发器 前言 上文中提到触发器的类型有以下4种&#xff0c;其中第一种【计划】是常用的&#xff0c; 与其他工具/服务类似的方式&#…

游戏、广告作底盘,价值直播为引擎,搜狐活在当下

2022年&#xff0c;中国互联网行业迎来了集体性的“中年危机”。 流量见顶、红利耗尽&#xff0c;再加上疫情的影响&#xff0c;国内互联网企业在过去一年真真实实地感受到了寒气。根据工信部数据&#xff0c;2022年&#xff0c;中国规模以上互联网和相关服务企业总收入达1.46…

【异构图笔记,篇章1】RGCN:Modeling Relational Data with Graph Convolutional Networks

【异构图笔记&#xff0c;篇章1】RGCN:Modeling Relational Data with Graph Convolutional Networks论文信息论文要点快览论文内容介绍背景任务RGCN Conv的介绍RGCN的trick论文实验结果实体分类链路预测评价及总结本文仅供学习&#xff0c;未经同意请勿转载 后期会陆续公开关于…

顺序表的增删查改

数据结构 是数据存储的方式&#xff0c;对于不同的数据我们要采用不同的数据结构。就像交通运输&#xff0c;选用什么交通工具取决于你要运输的是人还是货物&#xff0c;以及它们的数量。 顺序存储结构 包括顺序表、链表、栈和队列等。 例如腾讯QQ中的好友列表&#xff0c;…

运动蓝牙耳机什么款式最好、公认最好用的运动耳机推荐

如今大家对于运动越来越热衷&#xff0c;健身意识的逐渐加强&#xff0c;也带动了对运动装备的需求&#xff0c;其中运动蓝牙耳机也成为运动达人不可缺少的一部分了&#xff0c;在运动的过程中增加点音乐元素进来也会增多点动力。所以市面上出现了各种款式不一的运动耳机&#…

渗透测试之局域网信息探测实验

渗透测试之局域网信息探测实验实验目的一、实验原理1.1 SoftPerfect Network Scanner 流量监控软件二、实验环境2.1 操作机器2.2 SoftPerfectNetscan Scanner三、实验步骤1. 解压并运行SoftPerfect Network Scanner软件2. 使用SoftPerfect Network Scanner进行局域网信息探测实…

并发编程学习篇从0-1合集

一、synchronized 一、原子性、有序性、可见性 1.1 原子性 数据库的事务&#xff1a;ACID A&#xff1a;原子性-事务是一个最小的执行的单位&#xff0c;一次事务的多次操作要么都成功&#xff0c;要么都失败。 并发编程的原子性&#xff1a;一个或多个指令在CPU执行过程中…

JVM 锁优化和逃逸分析详解

1 锁优化JVM 在加锁的过程中&#xff0c;会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。1.1 自旋锁和自适应自旋现在大多的处理器都是多核处理器 &#xff0c;如果在多核心处理器&#xff0c;有让两个或者以上的线程并行执行&#xff0c;我们可以让一个等待…

(免费分享)基于ssm的BBS社区论坛系统带论文

项目描述前台部分:1.用户注册登录模块用户登录后,可以进行发帖回帖功能,在线签到功能,完善个人信息,添加好友,收藏贴子,评论帖子,点赞功能,记录功能(比如记录今天发生的事情)等等…2.排行榜模块1.帖子讨论热度排行,分两种排行方式:(1) 根据用户今日发出的帖子被回复数量进行排名…