当前位置: 首页 > 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.dtcms.com/a/278061.html

相关文章:

  • PortsSwiggerLab: SSRF with blacklist-based input filter
  • JS进阶-day1 作用域解构箭头函数
  • Spring AI 项目实战(十六):Spring Boot + AI + 通义万相图像生成工具全栈项目实战(附完整源码)
  • NO.5数据结构串和KMP算法|字符串匹配|主串与模式串|KMP|失配分析|next表
  • pthread_mutex_unlock函数的概念和用法
  • 大规模电商系统分库分表实战经验分享
  • NFSV4锁机制(三)
  • 编程技术杂谈2.0
  • DVWA靶场通关笔记-XSS DOM(High级别)
  • 垃圾收集器-Serial Old
  • CVE-2022-0609
  • vue2入门(1)vue核心语法详解复习笔记
  • 【开源项目】网络诊断告别命令行!NetSonar:开源多协议网络诊断利器
  • 1.1.1+1.1.3 操作系统的概念、功能
  • c++无锁队列moodycamel::ConcurrentQueue测试结果
  • 在高并发场景下,仅依赖数据库机制(如行锁、版本控制)无法完全避免数据异常的问题
  • Sping AI Alibaba
  • 第11章 AB实验评估指标体系
  • Soul方程式:Z世代背景下兴趣社交平台的商业模式解析
  • Java行业前景如何?零基础又该如何去学Java?
  • 深入理解 RocketMQ:生产者详解
  • 并行并发丨C++ 协程、现场池 学习笔记
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十三课——图像浮雕效果的FPGA实现
  • 语言模型常用的激活函数(Sigmoid ,GeLU ,SwiGLU,GLU,SiLU,Swish)
  • 算法-汽水瓶兑换
  • Spring AI 项目实战(十七):Spring Boot + AI + 通义千问星辰航空智能机票预订系统(附完整源码)
  • 【webrtc】gcc当前可用码率3:x264响应码率改变
  • 系规备考论文:论IT服务部署实施方法
  • 西藏氆氇新生:牦牛绒混搭液态金属的先锋尝试
  • 分布式锁踩坑记:当“防重“变成了“重复“