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

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.xdnf.cn/news/15364.html

相关文章:

  • leetGPU解题笔记(1)
  • STM32-第六节-TIM定时器-2(输出比较)
  • 【芯片笔记】ADF4159
  • 【论文阅读】AdaptThink: Reasoning Models Can Learn When to Think
  • 【Java Stream】基本用法学习
  • sql初学见解
  • 2025上海市“星光计划“信息安全管理与评估赛项二三阶段任务书
  • Spring高级特性——反射和动态代理的性能优化
  • Python---上下文管理器
  • 移动端设备本地部署大语言模型(LLM)
  • 无需付费即可利用AI消除音频噪声和生成字幕
  • 浏览器渲染原理与性能优化全解析
  • 【零基础入门unity游戏开发——unity3D篇】3D光源之——unity反射和反射探针技术
  • 在线事务处理OLTP(Online Transaction Processing)负载是什么?
  • 08.如何正确关闭文件
  • QML 自定义Model基础之QAbstractListModel
  • iw 命令 -- linux 无线管理
  • python kivy 打包apk
  • Ampace厦门新能安科技Verify 测评演绎数字推理及四色测评考点分析、SHL真题题库
  • 入职华为od一个月的感受
  • 用 Node.js 构建模块化的 CLI 脚手架工具,从 GitHub 下载远程模板
  • 【Vue】浏览器缓存 sessionStorage、localStorage、Cookie
  • 初级网安作业笔记1
  • 人工智能之数学基础:神经网络的矩阵参数求导
  • S7-1200 与 ET200SP:PROFINET 设备关键数据 IP 地址、MAC 地址及 MRP 环状态获取
  • Spring Boot RESTful API 设计指南:查询接口规范与最佳实践
  • 在新版本的微信开发者工具中使用npm包
  • java8 ConcurrentHashMap 桶级别锁实现机制
  • css如何同时给元素设置背景和背景图?
  • 004_Claude功能特性与API使用