【ROS】—— ROS快速上手

news2024/11/14 11:07:14

文章目录

  • 前言
  • 1. ROS-melodic 安装
  • 2. ROS基本操作
    • 2.1 创建工作空间
    • 2.2 创建功能包
    • 2.3 HelloWorld(C++版)
    • 2.4 HelloWorld(Python版)
  • 3. Vscode ROS 插件
  • 4. vscode 使用基本配置
    • 4.1 启动 vscode
    • 4.2 vscode 中编译 ros
  • 5. launch文件演示
  • 6. ROS文件系统
  • 7. ROS文件系统相关命令

前言

📢本系列将依托赵虚左老师的ROS课程,写下自己的一些心得与笔记。
📢课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ
📢讲义链接:http://www.autolabor.com.cn/book/ROSTutorials/index.html
📢 文章可能存在疏漏的地方,恳请大家指出。

1. ROS-melodic 安装

    推荐这篇博客Ubuntu18.04安装Ros(最新最详细亲测),讲解详细,安装基本不会有太大的问题。

2. ROS基本操作

ROS中的程序即便使用不同的编程语言,实现流程也大致类似,以当前HelloWorld程序为例,实现流程大致如下:

  1. 先创建一个工作空间;
  2. 再创建一个功能包;
  3. 编辑源文件;
  4. 编辑配置文件;
  5. 编译并执行。

2.1 创建工作空间

使用系统命令创建工作空间目录,然后运行ROS的工作空间初始化即可完成创建过程

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

创建完成后,可以在工作空间的根目录下使用catkin_make命令编译整个工作空间。

cd ~/catkin_ws/
catkin_make

运行以下指令使环境生效。

source devel/setup.bash 

用如下命令查看环境变量是否生效

echo $ROS_PACKAGE_PATH

打印如下,则设置成功。
在这里插入图片描述为了使环境变量在所有终端中都有效,输入以下命令。

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

2.2 创建功能包

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

创建完成后,回到工作空间再编译一遍。

cd ..
catkin_make

2.3 HelloWorld(C++版)

1.进入 ros 包的 src 目录编辑源文件

//1.包含 ros 的头文件
//2.编写 main 函数
//3.初始化ros节点
//4.输出日志

#include "ros/ros.h"

int main(int argc, char *argv[])
{
    //执行 ros 节点初始化
    ros::init(argc,argv,"hello");
    //创建 ros 节点句柄(非必须)
    ros::NodeHandle n;
    //控制台输出 hello world
    ROS_INFO("hello world!");

    return 0;
}

2.编辑 ros 包下的 Cmakelist.txt文件

add_executable(步骤3的源文件名
  src/步骤3的源文件名.cpp
)

target_link_libraries(步骤3的源文件名
  ${catkin_LIBRARIES}
)

3.进入工作空间目录并编译

cd ~/catkin_ws/
catkin_make

在这里插入图片描述

4.打开roscore

roscore

5.rosrun启动文件(rosrun 包名 节点名)

rosrun hellowolrd 步骤3的源文件名

运行成功会出现以下打印信息:
在这里插入图片描述

2.4 HelloWorld(Python版)

1.进入 ros 包添加 scripts 目录并编辑 python 文件

cd ros包
mkdir scripts

新建 python 文件: (文件名自定义)

#! /usr/bin/env python
#-- coding:UTF-8 --
# 第一行指定解释器

# 1.导包
# 2.编写主入口
# 3.初始化ros节点
# 4.输出日志

import rospy

if __name__ == "__main__":
	rospy.init_node("Hello")
	rospy.loginfo("Hello World!!!")

2.为 python 文件添加可执行权限

chmod +x 自定义文件名.py

3.编辑 ros 包下的 CamkeList.txt 文件

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

4.进入工作空间目录并编译

cd ~/catkin_ws/
catkin_make

在这里插入图片描述
5.打开roscore

roscore
rosrun 包名 自定义文件名.py

运行成功会出现以下打印信息:
在这里插入图片描述

3. Vscode ROS 插件

C/C++ \ Cmake \Cmake Tools\python\ROS
在这里插入图片描述

4. vscode 使用基本配置

4.1 启动 vscode

code .

4.2 vscode 中编译 ros

快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build
可以点击配置设置为默认,修改.vscode/tasks.json 文件
把这个

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "catkin_make",
			"args": [
				"--directory",
				"/home/yuan/catkin_ws",
				"-DCMAKE_BUILD_TYPE=RelWithDebInfo"
			],
			"problemMatcher": [
				"$catkin-gcc"
			],
			"group": "build",
			"label": "catkin_make: build"
		}
	]
}

改为

{
// 有关 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.4 创建 ROS 功能包
选定 src 右击 —> create catkin package
设置包名 添加依赖
PS1: 如果没有代码提示
修改 .vscode/c_cpp_properties.json
设置 “cppStandard”: “c++17”
PS2: main 函数的参数不可以被 const 修饰
PS3: 当ROS__INFO 终端输出有中文时,会出现乱码
解决办法:在函数开头加入下面代码的任意一句

setlocale(LC_CTYPE, "zh_CN.utf8");
setlocale(LC_ALL, "");

其余步骤与之前一致。

5. launch文件演示

  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-> 设置日志的输出目标
  1. 运行 launch 文件
    roslaunch 包名 launch文件名
  2. 运行结果: 一次性启动了多个节点

6. ROS文件系统

在这里插入图片描述

WorkSpace --- 自定义的工作空间

    |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。
    |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。
    |--- src: 源码
        |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成
            |-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件
            |-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)
            |-- scripts 存储python文件
            |-- src 存储C++源文件
            |-- include 头文件
            |-- msg 消息通信格式文件
            |-- srv 服务通信格式文件
            |-- action 动作格式文件
            |-- launch 可一次性运行多个节点 
            |-- config 配置信息
        |-- CMakeLists.txt: 编译的基本配置

package.xml
该文件定义有关软件包的属性,例如软件包名称,版本号,作者,维护者以及对其他catkin软件包的依赖性。请注意,该概念类似于旧版 rosbuild 构建系统中使用的manifest.xml文件。

CMakelists.txt
文件CMakeLists.txt是CMake构建系统的输入,用于构建软件包。任何兼容CMake的软件包都包含一个或多个CMakeLists.txt文件,这些文件描述了如何构建代码以及将代码安装到何处。

7. ROS文件系统相关命令

ROS 的文件系统本质上都还是操作系统文件,我们可以使用Linux命令来操作这些文件,不过,在ROS中为了更好的用户体验,ROS专门提供了一些类似于Linux的命令,这些命令较之于Linux原生命令,更为简介、高效。文件操作,无外乎就是增删改查与执行等操作,接下来,我们就从这五个维度,来介绍ROS文件系统的一些常用命令。

1.增
catkin_create_pkg 自定义包名 依赖包 === 创建新的ROS功能包
sudo apt install xxx === 安装 ROS功能包

2.删
sudo apt purge xxx ==== 删除某个功能包

3.查
rospack list === 列出所有功能包
rospack find 包名 === 查找某个功能包是否存在,如果存在返回安装路径
roscd 包名 === 进入某个功能包
rosls 包名 === 列出某个包下的文件
apt search xxx === 搜索某个功能包

4.改
rosed 包名 文件名 === 修改功能包文件
需要安装 vim
比如:rosed turtlesim Color.msg

5.执行
5.1roscore
roscore === 是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信。
roscore 将启动:

  • ros master
  • ros 参数服务器
  • rosout 日志节点

用法:

roscore

或(指定端口号)

roscore -p xxxx

5.2rosrun
rosrun 包名 可执行文件名 === 运行指定的ROS节点
比如:rosrun turtlesim turtlesim_node

5.3roslaunch
roslaunch 包名 launch文件名 === 执行某个包下的 launch 文件

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

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

相关文章

沸腾过程气泡成核OVITO渲染

《Lammps空间划分——识别气泡、三维裂隙》 根据博文对纳米气泡的筛选&#xff08;获得select&#xff09;&#xff0c;本案例练习如何渲染气泡。 文章目录一、选择气泡&#xff08;select&#xff09;二、删除液体三、渲染液体四、巧妙利用原子半径大小五、气泡渲染并获得体积…

elasticsearch 7.9.3知识归纳整理(一)之es,kibana,ik的下载安装

es&#xff0c;kibana&#xff0c;ik的下载安装 下载地址 es下载地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch kibana下载地址&#xff1a; https://www.elastic.co/cn/downloads/kibana ik中文分词器下载地址&#xff1a;https://github.com/medcl/el…

我的周刊(第072期)

我的信息周刊&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。&#x1f3af; 项目duplicati[1]Duplicati 是一个免费的开源备份客户端…

力扣(LeetCode)364. 加权嵌套序列和 II(2022.12.31)

给你一个整数嵌套列表 nestedList &#xff0c;每一个元素要么是一个整数&#xff0c;要么是一个列表&#xff08;这个列表中的每个元素也同样是整数或列表&#xff09;。 整数的 深度 取决于它位于多少个列表内部。例如&#xff0c;嵌套列表 [1,[2,2],[[3],2],1] 的每个整数的…

回归原型网络代码episode数据加载

一般PyTorchPyTorchPyTorch加载数据的固定格式是: dataset MyDataset() : 构建DatasetDatasetDataset对象 dataLoader DataLoader(dataset) #通过DataLoaderDataLoaderDataLoader来构造迭代对象. num_epoches 100 for epoch in range(num_epoches): #逐步迭代数据 for img,l…

元宇宙产业委评选2022全球元宇宙十大事件(含国外元宇宙五大事件)

中国移动通信联合会元宇宙产业工作委员会&#xff08;简称为&#xff1a;元宇宙产业委&#xff09; 评选2022全球元宇宙十大事件&#xff08;含国外元宇宙五大事件&#xff09; 1、1月5日&#xff0c;CES 2022上&#xff0c;英伟达&#xff08;NVIDIA&#xff09;宣布旗下元宇…

【django】HttpRequest对象的属性和路由补充

文章目录一、HttpRequest对象的常用属性1、request.GET&#xff1a;获取查询字符串参数案例:特别注意&#xff1a;2、request.POST&#xff1a;post请求数据&#xff0c;只能获取表单参数3、request.body&#xff1a;请求body&#xff0c;响应结果为字节类型4、request.method&…

一文搞懂G1垃圾回收器

G1是从JDK9之后的默认垃圾回收器&#xff0c;其功能强大&#xff0c;性能优异&#xff0c;不过目前市面的材料不算多&#xff0c;很多都是抄来抄去&#xff0c;讲得也不太清楚。经过仔细阅读oracle官网以及相关的材料&#xff0c;从整体上梳理了G1的过程&#xff0c;希望这一文…

数据库设计规范详解

对于后端开发人员&#xff0c;建表是个基础活&#xff0c;是地基&#xff0c;如果地基不大牢固&#xff0c;后面在程序开发过程中会带来很多麻烦&#xff0c;在建表的时候不注意细节&#xff0c;等后面系统上线之后&#xff0c;表的维护成本变得非常高&#xff0c;而且很容易踩…

基数排序分析

&#x1f954; 原理介绍&#xff1a; [排序算法] 基数排序 (C) - Amαdeus - 博客园 前述的各类排序方法都是建立在关键字比较的基础上&#xff0c;而基数排序是一种非比较型整数排序算法。它的基本思想是将整数按位数切割成不同的数字&#xff0c;然后按每个位数分别比较。 …

单片机基础知识之定时计数器和寄存器

目录 一、定时计数器 二、什么是寄存器 三、定时器如何定时10毫秒 四、定时器编程前寄存器配置计划 五、编程定时器控制LED每隔一秒亮灭 一、定时计数器 1、定时计数器的概念引入 定时器和计数器&#xff0c;电路一样 定时或者计数的本质就是让单片机某个部件数数 当定…

Linux基础------高级IO

文章目录阻塞IO非阻塞IO信号驱动异步IO多路转接&#xff08;核心终点&#xff09;实际上 IO “等” 拷贝 等什么呢&#xff1f; -----> 等待的是内核将数据准备好。 拷贝-------> 数据从内核考到用户 IO话题&#xff1a; 无非就是 1 &#xff0c; 改变等的方式 2 &…

Linux中编译带kafka模块的搜狗workflow开源库

workflow依赖的第三方库 openssl https://github.com/openssl/openssl apt install libssl-dev zlib https://github.com/madler/zlib git clone https://github.com/madler/zlib.git./configuremake -j4 make install lz4 (版本>1.7.5) https://github.com/lz4/lz4 …

C语言:预处理(2)

宏通常被用于执行简单的运算。 宏相比于函数的优势&#xff1a; 1.用于调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多。所以宏比函数在程序的规模和速度方面更胜一筹。 2.更为重要的是函数的参数必须声明为特定的类型。所以函数只能在类型合适的…

Diffusion Model原理详解及源码解析

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

KubeSphere中间件部署

目录 &#x1f9e1;应用部署总览 &#x1f9e1;中间件部署 MySQL有状态副本集 &#x1f360;KubeSphere创建配置集 &#x1f360;KubeSphere创建存储卷 &#x1f360;KubeSphere创建有状态副本集 &#x1f360;集群访问 &#x1f49f;这里是CS大白话专场&#xff0c;让枯…

Entity Framework Core 代码自动化迁移

简述 文章内容基于&#xff1a;.NET6 Entity Framewor kCore 7.0.* 使用 EF Core 进行 Code First 开发的时候&#xff0c;肯定会遇到将迁移更新到生产数据库这个问题&#xff0c;大多数都是使用命令生成迁移 SQL&#xff0c;然后使用 SQL 脚本将更新迁移到生产数据库的方式&a…

【一起从0开始学习人工智能0x03】文本特征抽取TfidVectorizer

文章目录文本特征抽取TfidVectorizerTfidVecorizer--------Tf-IDFTF-IDF------重要程度文本特征抽取TfidVectorizer 前几种方法的缺点&#xff1a;有很多词虽然没意义&#xff0c;但是出现次数很多&#xff0c;会影响结果&#xff0c;有失偏颇------------关键词 TfidVecoriz…

一篇文章带你搞懂nodeJs环境配置

1、nodeJs下载地址&#xff0c;这里可以选择你想要的版本&#xff0c;我这里以14.15.1为例 2、下载完成后&#xff0c;直接傻瓜式安装即可。 3、打开命令行&#xff08;以管理员身份打开&#xff09;,输入node -v&#xff0c;出现以下版本号&#xff0c;代表node成功安装 4、在…

html+css设计两个摆动的大灯笼

实现效果 新年马上就要到了&#xff0c;教大家用htmlcss设计两个大灯笼&#xff0c;喜气洋洋。 html代码&#xff1a; html代码部分非常简单&#xff0c;将一个灯笼分成几部分进行设计&#xff0c;灯笼最上方部分&#xff0c;中间的线条部分和最下方的灯笼穗。组合在一起就…