ROS机器人入门第一课:ROS快速体验——python实现HelloWorld

文章目录

  • ROS机器人入门第一课:ROS快速体验——python实现HelloWorld
    • 一、HelloWorld实现简介
      • (一)创建工作空间并初始化
      • (二)进入 src 创建 ros 包并添加依赖
    • 二、HelloWorld(Python版)
      • (二)进入 ros 包添加 scripts 目录并编辑 python 文件


ROS安装教程:ROS第 2 课 ROS 系统安装和环境搭建


ROS机器人入门第一课:ROS快速体验——python实现HelloWorld

一、HelloWorld实现简介

ROS中的程序即便使用不同的编程语言,实现流程也大致类似,以当前HelloWorld程序为例,实现流程大致如下:

  1. 先创建一个工作空间;
  2. 再创建一个功能包;
  3. 编辑源文件;
  4. 编辑配置文件;
  5. 编译并执行。

(一)创建工作空间并初始化

mkdir -p 自定义空间名称/src
cd 自定义空间名称
catkin_make

上述命令,首先会创建一个工作空间以及一个 src 子目录,然后再进入工作空间调用 catkin_make命令编译。

(二)进入 src 创建 ros 包并添加依赖

cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

上述命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。


注意: 在ROS中,虽然实现同一功能时,C++和Python可以互换,但是具体选择哪种语言,需要视需求而定,因为两种语言相较而言:C++运行效率高但是编码效率低,而Python则反之,基于二者互补的特点,ROS设计者分别设计了roscpp与rospy库,前者旨在成为ROS的高性能库,而后者则一般用于对性能无要求的场景,旨在提高开发效率。

二、HelloWorld(Python版)

(二)进入 ros 包添加 scripts 目录并编辑 python 文件

cd ros包
mkdir scripts

在这里插入图片描述\

  1. 在scripts目录中新建 python 文件: (文件名自定义)
touch helloworled.py
  1. 写入代码
#! /usr/bin/env python
# - coding: utf-8 -*-"""Python 版 HelloWorld"""
import rospyif __name__ == "__main__":rospy.init_node("Hello")rospy.loginfo("Hello World!!!!")
  1. 为 python 文件添加可执行权限
chmod +x 自定义文件名.py
  1. 编辑 ros 包下的 CamkeList.txt 文件(包和工作空间要分清哦
catkin_install_python(PROGRAMS scripts/自定义文件名.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

不要忘记取消注释
在这里插入图片描述

  1. 进入工作空间目录并编译
cd 自定义空间名称
catkin_make
  1. 进入工作空间目录并执行
  • 先启动命令行1:
roscore
  • 再启动命令行2:
cd 工作空间
source ./devel/setup.bash
rosrun 包名 自定义文件名.py
  • 输出结果:Hello World!!!
    在这里插入图片描述

PS: source ~/工作空间/devel/setup.bash可以添加进.bashrc文件,使用上更方便(因为source ./devel/setup.bash只对该终端窗口起作用

  • 添加方式1: 直接使用 geditvi 编辑 .bashrc 文件,最后添加该内容

  • 添加方式2:echo "source ~/工作空间/devel/setup.bash" >> ~/.bashrc

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

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

相关文章

Java JDK8新日期API

一、 JDK8 中增加了一套全新的日期时间 API,这套 API 设计合理,是线程安全的。 java.time – 包含值对象的基础包java.time.chrono – 提供对不同的日历系统的访问java.time.format – 格式化和解析时间和日期java.time.temporal – 包括底层框架和扩展…

考研数学老师怎么选❓看这一篇就够了

张宇、汤家凤、武忠祥、李永乐、杨超、王式安、方浩这些老师都有自己擅长的细分 比如张宇老师,杨超,汤家凤,武忠祥老师的高数讲的很好,李永乐老师是线代的神,王式安、方浩概率论讲的很好,所以对于不同的学…

【文末附gpt升级4.0方案】FastGPT详解

FastGPT知识库结构讲解 FastGPT是一个基于GPT模型的知识库,它的结构可以分为以下几个部分: 1. 数据收集:FastGPT的知识库是通过从互联网上收集大量的文本数据来构建的。这些数据可以包括维基百科、新闻文章、论坛帖子等各种类型的文本。 2…

【openCV】手写算式识别

OpenCV 机器学习库提供了一系列 SVM 函数和类来实现 SVM 模型的训练和预测,方便用户实现自己的 SVM 模型,并应用于分类问题。本文主要介绍使用 openCV 实现手写算式识别的工作原理与实现过程。 目录 1 SVM 模型 1.1 SVM 模型介绍 1.2 SVM 模型原理 2…

在DelayMS加入bsp_Idle,把单片机延时空闲利用起来

在单片机应用中,使用延时函数 DelayMS() 会导致程序在延时期间无法执行其他任务, 这可能影响系统对一些响应时间要求较高的任务的处理。 为了提高系统的响应速度和利用单片机的空闲时间,可以在延时函数中加入 bsp_Idle() 函数, 以…

3.21系统栈、数据结构栈、栈的基本操作、队列、队列的基本操作------------》

栈 先进后出、后进先出 一、系统栈 大小:8MB 1、局部变量 2、未经初始化为随机值 3、代码执行到变量定义时为变量开辟空间 4、当变量的作用域结束时回收空间 5、函数的形参和返回值 6、函数的调用关系、保护现场和恢复现场 7、栈的增长方向,自高…

5.1.5、【AI技术新纪元:Spring AI解码】HuggingFace Chat

HuggingFace 推理端点允许您在云中部署和提供机器学习模型,使其可以通过 API 访问。 入门 关于 HuggingFace 推理端点的更多详细信息可以在此处找到。 先决条件 添加 spring-ai-huggingface 依赖项: <dependency><groupId>org.springframework.ai</groupId…

【Linux进程的状态】

目录 看Linux源码中的说法 如何查看进程状态&#xff1f; 各个状态的关系 僵尸进程 举个栗子 现象 僵尸进程的危害 孤儿进程 举个栗子 现象 进程的优先级 基本概念 为什么要有进程优先级&#xff1f; 查看系统进程 进程的大致属性 进程优先级vs进程的权限 Linu…

[Semi-笔记] 2023_TIP

目录 概要一&#xff1a;Conservative-Progressive Collaborative Learning&#xff08;保守渐进式协作学习&#xff09;挑战&#xff1a;解决&#xff1a; 二&#xff1a;Pseudo Label Determination for Disagreement&#xff08;伪标签分歧判定&#xff09;挑战&#xff1a;…

利用python进行接口测试及类型介绍

前言 其实我觉得接口测试很简单&#xff0c;比一般的功能测试还简单&#xff08;这话我先这样说&#xff0c;以后可能会删O(∩_∩)O哈&#xff01;&#xff09;&#xff0c;现在找工作好多公司都要求有接口测试经验&#xff0c;也有好多人问我&#xff08;也就两三个人&#x…

python离线安装依赖库 依赖库版本

问题&#xff1a;python开发过程中&#xff0c;下载安装某一功能模块&#xff0c;常常需要各种依赖库支持。如果在线安装&#xff0c;则非常方便简单&#xff0c;但往往需要离线下载所需的依赖库。但各种依赖库存在许多版本&#xff0c;如何准确快速知道我们所需要的依赖库呢&a…

解决微信小程序代码包大小限制方法

1 为什么微信小程序单个包的大小限制为 2MB 微信小程序单个包的大小限制为 2MB 是出于以下几个考虑&#xff1a; 保证小程序的启动速度&#xff1a;小程序的启动速度是影响用户体验的关键因素之一。如果包太大&#xff0c;会导致小程序启动时间过长&#xff0c;从而影响用户体…

node安装

这里写目录标题 https://nodejs.cn/ https://registry.npmmirror.com/binary.html?pathnode/ https://registry.npmmirror.com/binary.html?pathnode/v11.0.0/

初识CSS样式 与 文本背景样式

目录 前言: 1.什么是CSS: 2.关于css的主要特性: 2.1层叠性&#xff1a; 2.2继承性&#xff1a; 2.3优先级&#xff1a; 2.4.CSS的组成结构: 3.css样式的三种写法: 3.1内联样式&#xff1a; 3.1.2存在的优点和缺点: 3.2内部样式表&#xff1a; 3.2.2存在的优点和缺点:…

JAVA 100道题(11)

11.使用ArrayList存储一组整数&#xff0c;并编写一个方法打印所有偶数。 它使用ArrayList来存储一组整数&#xff0c;并编写一个方法来打印所有的偶数。 java复制代码 import java.util.ArrayList; public class Main { public static void main(String[] args) { // 创建一个…

[蓝桥杯 2019 省 A] 修改数组

题目链接 [蓝桥杯 2019 省 A] 修改数组 题目描述 给定一个长度为 N N N 的数组 A [ A 1 , A 2 , A 3 , . . . , A N ] A [A_1, A_2, A_3, ...,A_N] A[A1​,A2​,A3​,...,AN​]&#xff0c;数组中有可能有重复出现的整数。 现在小明要按以下方法将其修改为没有重复整数的…

Java实现Cache Aside Pattern 例子

简单的Java实现Cache Aside pattern &#xff1a; import java.util.HashMap; import java.util.Map;public class CacheAsidePattern {// 模拟数据库或其他数据源static class Database {private static Map<String, String> data new HashMap<>();static {data…

CAN总线Stuff Error

CAN总线Stuff Error&#xff0c;即填充错误&#xff0c;指的是在使用位填充编码的位流中&#xff0c;出现了第六个连续相同的位电平。这种错误通常发生在位填充机制被用于CAN总线通信中&#xff0c;以确保数据传输的正确性和稳定性。以下是一些可能导致Stuff Error的原因&#…

每日三个JAVA经典面试题(十九)

1.Java Concurrency API 中的 Lock 接口(Lock interface)是什么&#xff1f;对比同步它有什么优势&#xff1f;Java并发API中的Lock接口提供了一种比传统synchronized块或方法更灵活、更强大的线程同步机制。Lock接口允许更细粒度的锁控制&#xff0c;通过它可以实现更复杂的线…

一、rv1126开发之视频输入和视频编码

RV1126 H264/HEVC编码流程 一、RV1126编码的流程图&#xff1a; 二、每个代码模块详细讲解 2.1. VI模块的创建 VI模块的初始化&#xff1a;关键在于VI_CHN_ATTR_S结构体&#xff0c;这个结构体是VI设置的结构体。这个结构体的成员变量包括&#xff1a;pcVideoNode&#xff0…