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

AutoLabor-ROS-Python 学习记录——第一章 ROS概述与环境搭建

引言

该文档主要基于赵虚左老师的课程【Autolabor初级教程】ROS机器人入门,撰写一些 ROS Python 相关的重要知识点或者配置内容。

  • 课程视频链接:【Autolabor初级教程】ROS机器人入门
  • 课程电子书:ROS机器人入门课程《ROS理论与实践》零基础教程
  • ROS noetic 配置文档:ROS配置

第一章 ROS概述与环境搭建

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: 编译的基本配置

1.0 ROS 演示

ROS 内置了一些小程序,可以通过运行这些小程序以检测 ROS 环境是否可以正常运行

  • 首先启动三个命令行(ctrl + alt + T)
    • 命令行1键入:roscore
    • 命令行2键入:rosrun turtlesim turtlesim_node(此时会弹出图形化界面)
    • 命令行3键入:rosrun turtlesim turtle_teleop_key(在3中可以通过上下左右控制2中乌龟的运动)

最终结果如下所示:

alt text

注意:光标必须聚焦在键盘控制窗口,否则无法控制乌龟运动。

1.1 集成开发环境_VsCode基本实现流程(为Python)

Python 文件:

#! /usr/bin/env python"""
Python 版HelloWorldAuthor: Penry
Version: 1.0
"""import rospyif __name__ == "__main__":rospy.init_node("hello11")rospy.loginfo("Hello World!1111")

由于一种编写 ROS-Python 习惯的沿袭,某些开源项目编写的 .py 文件没有经过 CMakeLists.txt 配置,导致编译时候出现如下报错:

"python": 没有那个文件或目录

原因: 当前 noetic 版本中,python3 为默认 python 版本,而 python3 与 python2 不兼容

有三种解决方案:

  • 直接声明解释器为 python3 (不建议)
    • /usr/bin/env python3
  • 通过软连接将 python 连接到 python3 (建议)
    • 备份现有链接:sudo mv /usr/bin/python /usr/bin/python.bak
    • 创建新链接:sudo ln -s /usr/bin/python3 /usr/bin/python
    • 验证链接:ls -l /usr/bin/python
  • 配置 CMakeLists.txt (推荐)

配置好软连接之后,即使不配置 CMakeLists.txt,也可以按照以下步骤成功运行 .py文件:

  • Ctrl+Shift+B 编译
  • 功能包/scripts 在终端打开
  • 终端输入 chmod +x *.py 赋予所有 .py 文件执行权限
  • 终端输入 ll 查看可执行文件
  • 新建两个终端:
    • 第一个终端输入 roscore 启动 ROS 主进程
    • 第二个终端输入先输入 source ./devel/setup.bash 配置 ROS 环境,再输入 rosrun 包名 可执行文件名 运行节点.

alt text

http://www.lryc.cn/news/587383.html

相关文章:

  • vue3 el-select默认选中
  • (33)记录描述窗体组件属性的枚举量 enum Qt :: WidgetAttribute, 简记为 WA_
  • 大模型微调(一):基于Swift框架进行自我认知微调(使用Lora微调Qwen3-8B模型)
  • MCU中的系统控制器(System Controller)是什么?
  • pthread_mutex_unlock函数的概念和用法
  • 手写muduo笔记
  • Clojure和Golang中的Channel有什么异同(TBC)
  • NumPy 中 np.c_ 的用法解析
  • Can I Trust Your Answer? Visually Grounded Video Question Answering
  • Python协程进阶:优雅终止与异常处理详解
  • Java 面向对象的特征(一)
  • Actor-Critic重要性采样原理
  • 在高并发场景下,仅依赖数据库机制(如行锁、版本控制)无法完全避免数据异常的问题
  • 用豆包AI云盘保存和分析录音文件
  • 维基艺术图片: 数据标注 (2)
  • java: DDD using oracle 21c
  • 树莓派5-ollama-linux-arm64.tgz 下载
  • KL散度:信息差异的量化标尺 | 从概率分布对齐到模型优化的核心度量
  • 强化学习初探及OREAL实践
  • Leaflet面试题及答案(61-80)
  • Flink数据流高效写入MySQL实战
  • XCZU2CG-2SFVC784I Xilinx FPGA AMD Zynq UltraScale+ MPSoC
  • Vivado ILA抓DDR信号(各种IO信号:差分、ISERDES、IOBUFDS等)
  • 六、深度学习——NLP
  • 无缝衔接直播流体验
  • 早期 CNN 的经典模型—卷积神经网络(LeNet)
  • 板凳-------Mysql cookbook学习 (十一--------8)
  • 【深度学习新浪潮】什么是新视角合成?
  • STM32-第五节-TIM定时器-1(定时器中断)
  • JAVA并发——synchronized的实现原理