ROS学习笔记(二)---使用 VScode 开发 ROS 的Python程序(简例)

news2024/12/23 13:12:10

一、任务介绍

本篇作为ROS学习的第二篇,是关于如何在Ubuntu18.04中使用VSCode编写一个Python程序,输出“Hello!”的内容介绍。
首先我们来了解下ROS的文件系统,ROS文件系统级指的是在硬盘上ROS源代码的组织形式,其结构大致可以如下图所示:
在这里插入图片描述

|--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。
|--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。
|--- src: 源码
	|-- package:功能包(ROS基本单元)包含多个节点、库与配置文件
	            |-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件
       			|-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)
    		    |-- scripts 存储python文件
   			    |-- src 存储C++源文件

二、实施

1.创建ROS工作空间

在“主文件夹>主目录中”右键,点击新建文件夹,输入文件夹名称,要以‘_ws’结尾,创建工作空间。

在这里插入图片描述
创建src,双击demo02_ws,进入文件夹再继续创建src文件夹,然后右键,选择“在终端打开”
在这里插入图片描述

2.编译工作空间

在终端输入catkin_make,回车后,会在工作空间demo02中生成另外两个文件夹。
在这里插入图片描述
(以上操作也可以使用命令行,怎么方便怎么来)

3.使用VScode打开工作空间

在demo02_ws右键终端内输入“code ./”然后回车就会以VSCode环境打开打开demo02_ws。

在这里插入图片描述

4.vscode 中编译 ros

按下快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build,选择后面的小齿轮
在这里插入图片描述
点击小齿轮后进入vscode/tasks.json 文件,将其中的代码全部替换成下面代码,这样可以以后直接将快捷键“ 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"
        }
    ]
}

替换后:
在这里插入图片描述

5.创建 ROS 功能包

鼠标右键选中 src> create catkin package,然后再输入框键入工作包名称
在这里插入图片描述
添加依赖,这里主要有3个 roscpp rospy std_msgs
在这里插入图片描述回车之后,可以在demo02_ws工作空间内看到创建好的ROS功能包“hello”在这里插入图片描述

6.创建python文件

在hello文件夹内继续创建python的存储文件夹scrpits,右击hello>新建文件夹,命名为scripts,接着继续右击scripts,选择创建文件,并命名为“helloworld_p.py”
在这里插入图片描述
这里,我们要实现的功能是直接打印“HelloWorld!”代码如下:

#! /usr/bin/env python
#coding:utf-8
import rospy 


if __name__ == "__main__":

    rospy.init_node("Hello_Vscode_p")  # 2.初始化 ROS 节点    
    rospy.loginfo("HelloWorld, 我是 VSCode!")  #3.日志输出 HelloWorld
    

7.添加python可执行权限

①右击scripts文件,选择在集成终端中打开,然后输入“chmod +x *.py”为script文件夹内的python文件添加可执行权限,通过调用“ll” 可以查看是否添加成功。
在这里插入图片描述

8.配置 CMakeLists.txt

在CMakeLists.txt中找到大概第162行的catkin_install_python,将原来的自动生成python文件名改成你自定义文件名.py
在这里插入图片描述

9.编译python文件

①按下快捷键ctrl + shift + B,如果编译没有问题就可以继续下一步操作。
②打开新的终端,然后打开roscore。(roscore === 是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信)
在这里插入图片描述
③再继续打开一个新的终端,输入“source ./devel/setup.bash”回车之后,继续输入“rosrun hello helloworld_p.py” 即“rosrun+包名+.py名”:运行指定的ROS节点
在这里插入图片描述
以上就是在Ubuntu中使用Vscode来编写一个ros的python文件,今天你学废了吗?

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

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

相关文章

C++入门基础(万字详解!!!)

文章目录 前言1.C关键字2.命名空间3.C的输入输出4.缺省参数4.1 全缺省4.2 半缺省 5.函数重载6. 引用6.1 引用的特性6.2 引用的使用场景6.3 引用和指针 7.内联函数7.1 特性 8.auto关键字8.1 注意事项 9. 基于范围的for循环9.1 使用条件 10.指针控制nullptr10.1 注意事项 11.总结…

iTOP-RK3588开发板单独编译Android固件-打包update.img

在 uboot kernel android 都编译完成的情况下,才可以打包 update.img,所以一般在完整编 译的时候用。输入以下命令: ./build.sh -u 打包完成会在 rockdev/Image-rk3588_s 目录下生成 update.img 镜像。 更多内容:B站搜索迅为RK…

分布式锁有哪些应用场景和实现?

电商网站都会遇到秒杀、特价之类的活动,大促活动有一个共同特点就是访问量激增,在高并发下会出现成千上万人抢购一个商品的场景。虽然在系统设计时会通过限流、异步、排队等方式优化,但整体的并发还是平时的数倍以上,参加活动的商…

电脑垃圾清理怎么做?记住这5个方法!

“我的电脑用了快一年了吧!现在感觉电脑里很多垃圾文件,但又害怕在删除这些垃圾文件时会将一些重要的文件一起删除掉。所以不敢对电脑进行清理。想问下大家平常有没有好用方法去清理电脑呀?感谢!” 随着电脑使用时间的推移&#x…

item_get_sales-获取商品销量详情

一、接口参数说明: item_get_sales-获取商品销量详情,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_get_sales 名称类型必须描述keyString是调用key&#xff08…

什么是 BLE 网关?

Ble网关是一种低功耗设备,可在附近将智能设备连接至基于蓝牙的产品. 它使人们能够将信息从蓝牙设备传输到云. 这些设备可以是传感器或Ble信标. 使用时, 传输数据时无需更改任何内容. 使用这个装置, 您可以将基于蓝牙的产品连接到扬声器等外部硬件. 例如, 您可以在办…

开放式耳机哪个好一点?推荐几款优秀的开放式耳机

在追求更广阔的音场和更真实的音质时,开放式耳机是绝对值得考虑的选择。它们以其通透感和自然的音质而备受推崇,带来更逼真的音乐体验。下面我来推荐几款优秀的开放式耳机,满足你对音质和舒适度的要求,可尽情享受音乐的魅力。 一…

Stable Diffusion+Roop单张图片换头roop安装配置【包含roop破解方法】

1.首先安装秋叶大佬的webui 2.然后在拓展里面搜索roop,下载roop插件,然后重启webui 3.重启后,在文生图和图生图的界面,就可以看到roop的入口 4.这里面,需要提前安装Visual Studio. 勾选一些必要的选项,这里可以参照b站的视频 # 秋叶版本Stablediffusion的Roop插件的安装 …

问题记录和细节补充(完善中)

【问题记录】ORA-01400: 无法将 NULL 插入 Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-01400: 无法将 NULL 插入 ("YWJA"."DEPT_TEST_WXX2"."DEPT_ID")。 原因:主键非自增,输入时并未有主键值传递&#x…

科研绘图chapter1:绘图原则与配色基础

本系列会持续更新,主要参考datawhale的开源课程。详见: https://github.com/datawhalechina/paper-chart-tutorial 文章目录 1.1 科研论文配图的绘制基础1.2 科研论文配图的配色基础1.2.1 配色模式1.2.2 色环配色原则1.3 配色工具/网站 1.1 科研论文配图…

组态王-实现语音播报告警点位信息及语音通知-语音播报器|声光报警器|工业报警方案|语音报警器|工业报警器|语音播报模块

需求简介 本文将介绍组态王如何对产生的告警实现声光语音播报,根据不同的告警点位,朗读具体的告警内容。 本文使用大连英仕博科技有限公司生产的博灵语音通知终端A4与北京亚控开发的组态王进行联动。 本文章分2部分讲解 第一部分为demo调用演示第二部…

SpringCloud(33):Nacos集群部署

1 集群部署 3个或3个以上Nacos节点才能构成集群 (1)安装3个以上Nacos 我们可以复制之前已经解压好的nacos文件夹,分别命名为nacos、nacos1、nacos2 (2)配置集群配置文件 在所有nacos目录的conf目录下,有…

Docker容器与虚拟化技术:Docker架构、镜像操作

目录 一、理论 1.Doker概述 2.Docker核心概念 3.Docker安装 4.Docker的镜像管理命令 二、实验 1.Docker安装 2.查看Docker信息 3.Docker的镜像管理命令 三、问题 1.如何注册Docker账号 2.如何设置Docker公共存储库 四、总结 一、理论 1.Doker概述 (1) IT架构 裸…

Lua脚本对比redis事务区别是什么

redis官方对于lua脚本的解释:Redis使用同一个Lua解释器来执行所有命令,同时,Redis保证以一种原子性的方式来执行脚本:当lua脚本在执行的时候,不会有其他脚本和命令同时执行,这种语义类似于 MULTI/EXEC。从别…

Linux系统USB摄像头测试程序(二)_读取配置

1、收先安装gtk3,我的测试机器是ubutn16.04,只要执行下面的安装命令就可以了 apt-get install libgtk-3-dev 使用下列命令验证是否安装好gtk3: pkg-config --cflags --libs gtk-3.0 2、显示结果类似如下: -pthre…

哪种电容笔更好用?学生党开学值得买电容笔推荐

在过半个月就马上要到开学季了,随着平板电脑在大学校园内的普及,对电容笔提出了更高的要求。而苹果的正版电容笔产品,虽然有着强大的功能,但由于其具有更加昂贵的价格,让其只能作为一种学习和记录的工具,由…

VM中linux虚拟机配置桥接模式(虚拟机与宿主机网络互通)

VM虚拟机配置桥接模式,可以让虚拟机和物理主机一样存在于局域网中,可以和主机相通,和互联网相通,和局域网中其它主机相通。 vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式&…

Leetcode-每日一题【剑指 Offer 31. 栈的压入、弹出序列】

题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列&#xf…

途乐证券-KDJ分别代表什么?

KDJ是一种技能剖析东西,常见于股票、期货等商场中,它的全称是随机目标(KDJ)。KDJ目标包括三条线,分别为K线、D线和J线。那么,KDJ分别代表什么呢?本文将从多个视点进行剖析。 1. KDJ的简单介绍 …

Redis 基础知识

Redis 本文是在学习狂神的redis学习笔记 NoSQL NoSQL特点 解耦! 1、方便扩展(数据之间没有关系,很好扩展!) 2、大数据量高性能(Redis一秒写8万次。读取11万,是一种细粒度的缓存,…