ROS学习笔记二:ROS环境搭建

  1. 安装ubuntu
  2. 安装ROS
    参考赵虚左老师教程:ROS安装
  3. ROS 快速上手体验
    -使用命令来实现
    –创建工作空间:
    mkdir -p ros_learn_ws/src// ros_learn_ws为自定义空间
    cd ros_learn_ws
    catkin_make
    –创建ROS功能包并添加依赖
    cd src
    catkin_create_pkg demo_01 roscpp rospy std_msgs// demo_01为自定义功能包名
    –C++实现
    -在src下新建cpp文件起名为hello.cpp,内容如下:
#include "ros/ros.h"int main(int argc, char *argv[])
{//执行 ros 节点初始化ros::init(argc,argv,"hello");//创建 ros 节点句柄(非必须)ros::NodeHandle n;//控制台输出 hello worldROS_INFO("hello world!");return 0;
}

-修改CmakeLists文件,其中"Hello_c"为声明的可执行的C++ 文件

add_executable(Hello_csrc/hello.cpp
)
target_link_libraries(Hello_c${catkin_LIBRARIES}

-进入工作空间目录,执行命令:

source ./devel/setup.bash

-PS:

echo "source ~/工作空间/devel/setup.bash" >> ~/.bashrc

-执行:
cd ros_learn_ws
source ./devel/setup.bash
rosrun demo_01 Hello_c // 无需在工作空间下,主目录下亦可。执行 demo_01功能包下的节点Hello_c

-使用VSCode 实现:替换编译命令为:ctrl+shift+B
python实现:
在ros功能包下新建scripts文件夹,然后新建文件hello2.py

#! /usr/bin/env pythonimport rospy # 1.导包if __name__ == "__main__":rospy.init_node("Hello_Vscode_p")  # 2.初始化 ROS 节点rospy.loginfo("Hello VScode, 我是 Python ....")  #3.日志输出 HelloWorld

修改配置文件:

catkin_install_python(PROGRAMSscripts/hello2.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

编译后执行:source ./devel/setup.bash
运行节点:rosrun demo_01 hello2.py

-配置launch文件启动多个节点:
在demo_01下新建launch文件夹
新建start_01.launch文件,内容如下

<launch><!-- 执行python节点 --><node pkg="demo_01" type="hello2.py" name="hello_py" output="screen" /><!-- 执行C++节点 --><node pkg="demo_01" type="hello" name="hello_c" output="screen" /><node pkg="turtlesim" type="turtlesim_node" name="t1"/><node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>

PS : 修改launch文件无需使用命令:source ./devel/setup.bash,以下是需要使用source ./devel/setup.bash的场景:

  1. 初始化工作空间环境:当你第一次创建并编译一个 ROS 工作空间后,需要运行这个命令来设置环境变量,使得 ROS能够识别工作空间中的包和可执行文件。
  2. 每次打开新的终端:每次打开新的终端窗口时,都需要重新运行这个命令来确保当前终端会话的环境变量正确设置。这是因为环境变量的设置只对当前终端会话有效。
  3. 修改工作空间后:如果你对工作空间进行了修改(例如添加了新的包或编译了新的代码),运行 source ./devel/setup.bash可以确保这些更改被正确地反映在环境变量中。
  4. 在脚本中自动化环境设置:在某些自动化脚本中,你可能会包含这个命令来确保脚本运行时环境变量正确设置。

节点的执行顺序和launch文件中的定义顺序有关,通常C++节点要比python节点执行要快

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

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

相关文章

5G中什么是ATG网络?

有人问Air to Ground Networks for NR是怎么回事&#xff1f;这个是R18 NR才引入的。 ATG很多部分和NTN类似中的内容类似。比较明显不同的是&#xff0c;NTN的RF内容有TS 38.101-5单独去讲&#xff0c;而ATG则会和地面网络共用某些band&#xff0c;ATG可以工作在N1/N3/N34/N39…

基础算法--双指针

两数之和 点击&#xff1a;题目链接 解法一&#xff1a;暴力解法 时间复杂度&#xff1a;O(N^2) 算法思路&#xff1a;两层for循环即可列出所有两个数字的组合&#xff0c;判断是否等于目标值 算法流程&#xff1a; 两层 for 循环&#xff1a; 外层 for 循环依次枚举第⼀个…

什么是Linux系统架构?

​ Linux系统架构是指Linux操作系统的整体结构和工作层次&#xff0c;它定义了系统组件如何交互、如何管理硬件资源&#xff0c;以及用户如何通过不同的层次与系统进行交互。Linux架构通常有两种划分方法&#xff1a;系统层次架构和功能层次架构&#xff0c;两者都可以很好地描…

spring6:4、原理-手写IoC

目录 4、原理-手写IoC4.1、回顾Java反射4.2、实现Spring的IoC 4、原理-手写IoC 我们都知道&#xff0c;Spring框架的IOC是基于Java反射机制实现的&#xff0c;下面我们先回顾一下java反射。 4.1、回顾Java反射 Java反射机制是在运行状态中&#xff0c;对于任意一个类&#x…

不是“我应该做什么”,而是“我想做什么”

1. 识别内心的渴望 首先&#xff0c;我们需要识别自己真正的愿望和激情所在。这可能需要一些时间和自我反思。问自己&#xff1a;在没有任何外界压力的情况下&#xff0c;我真正想做的是什么&#xff1f;是赚钱、生活、旅行、追星&#xff0c;还是其他什么&#xff1f;识别这些…

30天学会Go--第7天 GO语言 Redis 学习与实践

30天学会Go–第7天 GO语言 Redis 学习与实践 文章目录 30天学会Go--第7天 GO语言 Redis 学习与实践前言一、Redis 基础知识1.1 Redis 的核心特性1.2 Redis 常见使用场景 二、安装 Redis2.1 在 Linux 上安装2.2 在 Windows 上安装2.3 使用 Docker 安装 Redis 三、Redis 常用命令…

Vue项目开发 如何实现父组件与子组件数据间的双向绑定?

在 Vue.js 中&#xff0c;实现父组件与子组件数据之间的双向绑定&#xff0c;可以通过以下几种方式。下面我将介绍几种常见的方法&#xff0c;并解释它们的实现原理和适用场景。 1. 使用 v-model 实现双向绑定 v-model 是 Vue.js 中最常见的双向绑定方式&#xff0c;它可以使…

React第十七章(useRef)

useRef 当你在React中需要处理DOM元素或需要在组件渲染之间保持持久性数据时&#xff0c;便可以使用useRef。 import { useRef } from react; const refValue useRef(initialValue) refValue.current // 访问ref的值 类似于vue的ref,Vue的ref是.value&#xff0c;其次就是vu…

【C++】内存分布、new、delete、 operator new、operator delete

内存分布 在C语言和C中&#xff0c;程序内存被划分成六个部分&#xff1a; 内核空间、栈、内存映射段、堆、数据段、代码段 栈&#xff1a;又称堆栈&#xff0c;主要为非静态局部变量、函数参数、返回值等&#xff0c;栈的生长方向是向下生长的 内存映射段&#xff1a;高效的…

代码随想录算法训练营day37|动态规划part5

今天的几道题目都比较简单&#xff0c;思路也比较相似&#xff0c;都是利用完全背包。完全背包和01背包的不同点在于完全背包每个元素可以取多次&#xff0c;而01背包只能取1次&#xff0c;所以在dp一维数组遍历时&#xff0c;完全背包仍然要从前往后遍历&#xff0c;并且无论是…

混合云策略在安全领域受到青睐

Genetec 发布了《2025 年物理安全状况报告》&#xff0c;该报告根据超过 5,600 名该领域领导者&#xff08;其中包括 100 多名来自澳大利亚和新西兰的领导者&#xff09;的回应&#xff0c;揭示了物理安全运营的趋势。 报告发现&#xff0c;澳大利亚和新西兰的组织采用混合云策…

FastAPI解决跨域报错net::ERR_FAILED 200 (OK)

目录 一、跨域问题的本质 二、FastAPI中的CORS处理 1. 安装FastAPI和CORS中间件 2. 配置CORS中间件 3. 运行FastAPI应用 三、解决跨域报错的步骤 四、案例:解决Vue.js与FastAPI的跨域问题 1. Vue.js前端应用 2. FastAPI后端API 3. 配置CORS中间件 4. 运行和测试 五…

为什么 JavaScript 中的 `new` 运算符报错?

在 JavaScript 中&#xff0c;new 运算符通常用于创建一个新对象并调用构造函数来初始化对象。然而&#xff0c;new 运算符可能会引发一些错误&#xff0c;通常是由于以下原因导致的&#xff1a; 构造函数没有正确的定义&#xff1a; 如果使用 new 运算符调用的函数没有正确地定…

霍尔效应电流传感器

适用于大电流&#xff0c;低功耗的电流检测&#xff1a; TVS选型: RS232的隔离电路: 单片机采集200伏高压 如何做隔离电路&#xff1a; 采用线性光电耦合器HCNR200实现高压直流母线电压的精确采样。还是用电阻分压&#xff0c;只是在ADC检测阶段加上隔离芯片&#xff1a;

如何设置Java爬虫的异常处理?

在Java爬虫中设置异常处理是非常重要的&#xff0c;因为网络请求可能会遇到各种问题&#xff0c;如连接超时、服务器错误、网络中断等。通过合理的异常处理&#xff0c;可以确保爬虫的稳定性和健壮性。以下是如何在Java爬虫中设置异常处理的步骤和最佳实践&#xff1a; 1. 使用…

ceph /etc/ceph-csi-config/config.json: no such file or directory

环境 rook-ceph 部署的 ceph。 问题 kubectl describe pod dragonfly-redis-master-0Warning FailedMount 7m59s (x20 over 46m) kubelet MountVolume.MountDevice failed for volume "pvc-c63e159a-c940-4001-bf0d-e6141634cc55" : rpc error: cod…

【计网笔记】习题

物理层 不属于物理层接口规范定义范畴的是&#xff08;C&#xff09; A. 接口形状 B. 引脚功能 C. 物理地址 D. 信号电平 【2023-912】光网络只能通过导向型介质传播。&#xff08;&#xff09; 【2017-408】若信道在无噪声情况下的极限数据传输速率不小于信噪比为30dB条件下的…

最新 AI 编程工具全面对比:v0、Bolt.new、Cursor、Windsurf

随着人工智能的快速发展&#xff0c;越来越多的 AI 驱动的开发工具应运而生&#xff0c;旨在提升开发效率、优化开发流程&#xff0c;并减轻开发者的工作负担。在这个背景下&#xff0c;四款新兴的 AI 编程工具&#xff1a;v0、Bolt.new、Cursor 和 Windsurf&#xff0c;各具特…

【C++算法】35.位运算_两整数之和

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a; 题目链接&#xff1a; 371. 两整数之和 题目描述&#xff1a; 解法 笔试的话直接 return ab&#xff1b; 接下来讲一下这题的解法&#xff1a; 位运算&#xff08;异或运算-无进位相加&#xff…

PyCharm+Selenium+Pytest配置小记

1、下载ChromeDriver&#xff1a; Chrome130以后的Driver下载&#xff1a; Chrome for Testing availabilityhttps://googlechromelabs.github.io/chrome-for-testing/ &#xff08;1&#xff09;查看自己Crome浏览器的版本&#xff1a;设置-->关于 Chrome&#xff1b; &…