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

ROS基础入门——实操教程

ROS基础入门——实操教程


前言

本教程实操为主,少说书。可供参考的文档中详细的记录了ROS的实操和理论,只是过于详细繁杂了,看得脑壳疼,于是做了这个笔记。


Ruby Rose,放在这里相当合理

本文初编辑于2024年10月4日

CSDN主页:https://blog.csdn.net/rvdgdsva

博客园主页:https://www.cnblogs.com/hassle

博客园本文链接:https://www.cnblogs.com/hassle/p/18447212


一、安装【virtualbox】【Ubuntu】【ROS】

前人栽树,后人乘凉

安装virtualbox教程

安装Ubuntu教程

安装ROS教程

测试ROS教程

二、文件创建

2.1创建工作空间和初始化

此处参考(选看)

在ubuntu主界面按下(ctrl + alt + T)打开命令行,然后依次输入下面的命令

mkdir -p test(这是自定义空间名称,爱叫什么叫什么)/src
cd test(这是自定义空间名称,爱叫什么叫什么)
catkin_make

生成了下面的文件树

....    
└── test(文件夹,意为工作空间,第一行代码运行时被创建)├── build(文件夹,意为编译空间,第三行代码运行时被创建)│   ├── ...├── devel(文件夹,意为开发空间,第三行代码运行时被创建)│   ├── setup.bash│   ├── setup.sh│   ├── ...└── src(文件夹,第一行代码运行时被创建)└── CMakeLists.txt (别动这个)
2.2导入包

生成一个基于三个库的ROS包,其中:roscpp是使用C++实现的库,rospy是使用python实现的库,std_msgs是标准消息库

cd src
catkin_create_pkg testpkg(这是ROS包名,爱叫什么叫什么) roscpp rospy std_msgs

此时src文件树变动

....    
└── test├── build│   ├── ...├── devel│   ├── setup.bash│   ├── setup.sh│   ├── ...└── src└── CMakeLists.txt (别动这个!!!动的是下面那个同名文件,别搞错了)└── testpkg├── CMakeLists.txt(执行cpp和py代码需要修改此处)(2.4涉及此处)├── include│   └── testpkg├── package.xml└── src(此处存放cpp代码)(2.3涉及此处)
2.3 编写Cpp与Py程序

Cpp详细教程(教程浓缩成下面一句话了,看完教程感觉脑子很乱的话照着下面的话去做就行)

一句话概括:需要在src(源文件空间)······> testpkg(ROS包名,爱叫什么叫什么)······> src文件夹(用于存放cpp文件)中存放编写好的cpp文件

Py详细教程(同上)

一句话概括:需要在src(源文件空间)······> testpkg(ROS包名,爱叫什么叫什么)······> scripts文件夹(用于存放py文件,需要手动创建该文件夹)中存放编写好的py文件

2.4 Cmakelist.txt文件改写
2.4.1Cpp程序:

在自定义命名包的 CMakeLists.txt(执行cpp和py代码需要修改此处)内修改第136行和第149-151行 为

具体行数因版本不同可能有所变动

注意映射名(映射名就是随便写的名,别写test就行)可与cpp源文件名相同

add_executable(映射名src/源文件名.cpp
)
target_link_libraries(映射名${catkin_LIBRARIES}
)
2.4.2python程序:

在自定义命名包的 CMakeLists.txt(执行cpp和py代码需要修改此处)内修改第162-165行 为

具体行数因版本不同可能有所变动

注意这里Py程序是不需要映射名

catkin_install_python(PROGRAMS scripts/源文件名.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
2.5编译并运行程序
2.5.1Cpp程序:

在自定义空间名称(2.1中创建的)中按下(ctrl + alt + T)打开命令行,依次输入

catkin_make
roscore

在自定义空间名称(2.1中创建的)中按下(ctrl + alt + T)打开另一个命令行,依次输入

source ./devel/setup.bash
rosrun 包名(2.2中创建的) 映射名(2.4中创建的)
2.5.2Python程序:

在自定义空间名称(2.1中创建的)中按下(ctrl + alt + T)打开命令行,依次输入

chmod +x 源文件名.py
catkin_make
roscore

在自定义空间名称(2.1中创建的)中按下(ctrl + alt + T)打开另一个命令行,依次输入

source ./devel/setup.bash
rosrun testpkg(ROS包名,爱叫什么叫什么,2.2中创建的) 源文件名.py(2.4中创建的)

相关文章:

ROS基础入门——实操教程

ROS基础入门——实操教程 前言 本教程实操为主,少说书。可供参考的文档中详细的记录了ROS的实操和理论,只是过于详细繁杂了,看得脑壳疼,于是做了这个笔记。 Ruby Rose,放在这里相当合理 本文初编辑于2024年10月4日 C…...

etcd 快速入门

简介 随着go与kubernetes的大热,etcd作为一个基于go编写的分布式键值存储,逐渐为开发者所熟知,尤其是其还作为kubernetes的数据存储仓库,更是引起广泛专注。 本文我们就来聊一聊etcd到底是什么及其工作机制。 首先,…...

Spring MVC__HttpMessageConverter、拦截器、异常处理器、注解配置SpringMVC、SpringMVC执行流程

目录 一、HttpMessageConverter1、RequestBody2、RequestEntity3、ResponseBody4、SpringMVC处理json5、SpringMVC处理ajax6、RestController注解7、ResponseEntity7.1、文件下载7.2、文件上传 二、拦截器1、拦截器的配置2、拦截器的三个抽象方法3、多个拦截器的执行顺序 三、异…...

GAMES101(19节,相机)

相机 synthesis合成成像:比如光栅化,光线追踪,相机是capture捕捉成像, 但是在合成渲染时,有时也会模拟捕捉成像方式(包括一些技术 动态模糊 / 景深等),这时会有涉及很多专有名词&a…...

Django Nginx+uwsgi 安装配置

Django Nginx+uwsgi 安装配置 本文将详细介绍如何在Linux环境下安装和配置Django应用程序,使用Nginx作为Web服务器和uwsgi作为应用程序服务器。我们将覆盖以下主题: 安装Python和相关库安装和配置Django安装Nginx安装和配置uwsgi配置Nginx以使用uwsgi测试和调试1. 安装Pytho…...

oracle数据备份和导入

一、数据导出 创建目录对象: CREATE DIRECTORY dpump_dir AS /path/to/your/directory;授予权限: GRANT READ, WRITE ON DIRECTORY dpump_dir TO test_user; #导出的用户导出全库数据 expdp your_user/your_password DIRECTORYdpump_dir DUMPFILEfu…...

C++ | Leetcode C++题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; class Solution { public:int findMinArrowShots(vector<vector<int>>& points) {if (points.empty()) {return 0;}sort(points.begin(), points.end(), [](const vector<int>& u, const vector<int>&…...

react-问卷星项目(3)

项目实战 React Hooks 缓存&#xff0c;性能优化&#xff0c;提升时间效率&#xff0c;但是不要为了技术而优化&#xff0c;应该是为了业务而进行优化 内置Hooks保证基础功能&#xff0c;灵活配合实现业务功能&#xff0c;抽离公共部分&#xff0c;自定义Hooks或者第三方&am…...

69 BERT预训练_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录NLP里的迁移学习Bert的动机Bert架构对输入的修改五、预训练任务1、2、3、 六、1、2、3、 七、1、2、3、 八、1、2、3、 NLP里的迁移学习 之前是使用预训练好的模型来抽取词、句子的特征&#xff0c;例如 word2vec 或语言模型这种非深度学习…...

Java报错输出的信息究竟是什么?

Java报错输出的信息究竟是什么&#xff1f; 本篇会带大家了解一下java运行时报错输出的信息内容&#xff0c;简单学习一下虚拟机内存中Java虚拟机栈的工作方式以及栈帧中所存储的信息内容 异常信息 当你的程序运行报错时&#xff0c;你是否会好奇打印出来的那一大坨红色的究竟…...

解表之紫苏

** 声明&#xff1a;本文介绍的中药仅供学习使用&#xff0c;请勿擅自使用&#xff0c;否则后果自负&#xff01;&#xff01;&#xff01;因水平有限&#xff0c;如有不当之处&#xff0c;请批评指正&#xff01;&#xff01;&#xff01;&#xff01;图片来源网络&#xff0…...

JavaScript数据类型

目录 JavaScripit数据类型 原始类型&#xff08;Primitive Types&#xff09; 1 Undefined 特点 实例 2 Null 实例 3 Boolean 重点&#xff1a; 常用falsy情况&#xff1a; 思考 4 Number,BigInt 实例 特点 NaN 5 String 在JavaScript中表示字符串有三种表示方…...

市场中的新兴力量与未来发展

在当前瞬息万变的全球金融市场中&#xff0c;期货交易以其高杠杆与灵活性&#xff0c;吸引了越来越多的投资者参与其中。大粤期货作为中国期货行业的新兴力量&#xff0c;凭借其创新的交易平台、广泛的产品线及专业的风险管理服务&#xff0c;迅速在市场中崭露头角。本文将介绍…...

Golang | Leetcode Golang题解之第446题等差数列划分II-子序列

题目&#xff1a; 题解&#xff1a; func numberOfArithmeticSlices(nums []int) (ans int) {f : make([]map[int]int, len(nums))for i, x : range nums {f[i] map[int]int{}for j, y : range nums[:i] {d : x - ycnt : f[j][d]ans cntf[i][d] cnt 1}}return }...

Java 常用序列化对比

Java 中常用的序列化方式主要包括以下几种: 1. Java 原生序列化 使用方式: 使用 java.io.Serializable 接口。对象需要实现该接口,然后通过 ObjectOutputStream 和 ObjectInputStream 进行序列化和反序列化。 示例代码: import java.io.*;public class Person impleme…...

【redis学习篇1】redis基本常用命令

目录 redis存储数据的模式 常用基本命令 一、set 二、keys pattern keys 字符串当中携带问号 keys 字符串当中携带*号 keys 【^字母】 keys * 三、exists 四、del 五、expire 5.1 ttl命令 5.2key删除策略 5.2.1惰性删除 5.2.2定期删除 六、type key的数据类型…...

量子计算:颠覆未来计算的革命性技术

量子计算&#xff1a;颠覆未来计算的革命性技术 量子计算作为下一代颠覆性技术&#xff0c;正在引领计算领域的重大变革。与传统计算机基于比特的二进制运算不同&#xff0c;量子计算通过量子比特&#xff08;qubits&#xff09;在叠加态和纠缠态下实现并行计算&#xff0c;能…...

ctfshow-web入门(信息收集,持续更新中。。)

写在之前:近期打了个比赛,备受打击,入手了vip账号进修,加油! 文章目录 ctfshow-web1查看源代码ctfshow-web2burp抓包ctfshow-web3burp抓包ctfshow-web4访问robots.txtctfshow-web5dirscarch扫描PHPS文件泄露ctfshow-web6dirscarch扫描ctfshow-web7dirscarch扫描ctfshow-w…...

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC 第一节 硬件解读第二节 CubeMX配置第三节 代码编写 第一节 硬件解读 STM32的ADC是12位&#xff0c;通过硬件过采样扩展到16位&#xff0c;模数转换器嵌入到STM32L071xx器件中。有16个外部通道和2个内部通道&#xf…...

李飞飞谈AI+3D发展:3D/4D AI将成为下一个重要前沿

人工智能(AI)的发展已经深刻改变了我们的世界,从简单的图像识别到复杂的自然语言处理,再到如今正在兴起的生成式模型。在这个过程中,李飞飞教授认为,3D/4D AI技术将是推动下一波变革的关键力量。以下根据她的观点整理了AI发展历程中的关键里程碑以及对3D/4D AI未来发展的…...

centos72009源码编译R语言

./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Pconnect -Psparkr -Phive -Phive-thriftserver -Pmesos -Pyarn -Dhadoop.version3.4.0 -Pkubernetes spark3.5.3 源码版本 ./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Pconnect -P…...

初识算法 · 双指针(4)

目录 前言&#xff1a; 复写零 题目解析 算法原理 算法编写 四数之和 题目解析 算法原理 算法编写 前言&#xff1a; 本文是双指针算法的最后一文&#xff0c;以复写零和四数之和作为结束&#xff0c;介绍方式同样是题目解析&#xff0c;算法原理&#xff0c;算法编写…...

java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码

java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码...

matlab 判断多组数据的分布是否一致,可以使用什么方法?

在 MATLAB 中&#xff0c;可以使用以下几种方法来判断多组数据的分布是否一致&#xff1a; 1. Kolmogorov-Smirnov 检验 (K-S Test) K-S 检验是一种非参数检验&#xff0c;用于比较两组数据是否来自相同的分布。MATLAB 提供了 kstest2 函数来进行这种检验。该方法适用于连续分…...

jenkins配置eureka、nacos发布优雅上下线服务

eureka发布期间优雅上下线 1、编写eureka下线脚本 vim biz_out_of_service-eureka.pyimport sys import requests#服务名&#xff0c;脚本第一个参数 APP_NAMEsys.argv[1] # 需要置为OUT_OF_SERVICE的服务实例的ID&#xff0c;脚本第二个参数 INSTANCE_IDsys.argv[2]# Eureka…...

【JAVA开源】基于Vue和SpringBoot的周边产品销售网站

本文项目编号 T 061 &#xff0c;文末自助获取源码 \color{red}{T061&#xff0c;文末自助获取源码} T061&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

【C++差分数组】2381. 字母移位 II|1793

本文涉及知识点 C差分数组 LeetCode2381. 字母移位 II 给你一个小写英文字母组成的字符串 s 和一个二维整数数组 shifts &#xff0c;其中 shifts[i] [starti, endi, directioni] 。对于每个 i &#xff0c;将 s 中从下标 starti 到下标 endi &#xff08;两者都包含&#…...

【pytorch】范数的计算

近日在看沐神的《动手学深度学习》,其中提到了范数这一数学概念,感觉很陌生,参考ChatGPT补一下知识。 目录 范数示例 1: 计算向量的 L2 范数(欧几里得范数)示例 2: 计算矩阵的 Frobenius 范数示例 3: 计算向量的 L1 范数(曼哈顿距离)曼哈顿范数的定义曼哈顿范数的计算示…...

MATLAB|基于多主体主从博弈的区域综合能源系统低碳经济优化调度

目录 主要内容 程序亮点&#xff1a; 模型研究 一、综合能源模型 二、主从博弈框架 部分代码 结果一览 下载链接 主要内容 程序参考文献《基于多主体主从博弈的区域综合能源系统低碳经济优化调度》&#xff0c;采用了区域综合能源系统多主体博弈协同优化方…...

Django 后端数据传给前端

Step 1 创建一个数据库 Step 2 在Django中点击数据库连接 Step 3 连接成功 Step 4 settings中找DATABASES Step 5 将数据库挂上面 将数据库引擎和数据库名改成自己的 Step 6 在_init_.py中加上数据库的支持语句 import pymysql pymysql.install_as_MySQLdb() Step7 简单创建两…...