首页 > 编程语言 >ROS机器人入门系列(二)实现HelloWorld(c++/python)

ROS机器人入门系列(二)实现HelloWorld(c++/python)

时间:2024-08-26 09:25:19浏览次数:8  
标签:python 创建 helloworld 如下 源文件 c++ HelloWorld hello

一、实现流程

1、创建工作空间

2、创建功能包

3、编辑源文件

4、编辑配置文件

5、编译并执行

其中,c++和python的差异仅体现在3,4两部,其他流程基本一致。

二、创建工作空间和创建功能包的实现

2.1  创建工作空间并初始化

(1)创建工作空间

mkdir -p 自定义工作空间名称/src

这里我创建的工作空间名称是demo1

(2)工作空间初始化

我们首先要将当前工作目录切换到我们创建的工作空间,然后再进行初始化

cd demo1
catkin_make

 运行结果如下:

 打开文件,我们可以看到工作空间里有如下三个文件夹

2.2  创建功能包

cd src
catkin_create_pkg 自定义包名 roscpp rospy std_msgs

 运行结果如下:

这里我定义的包名是helloworld,代码中的roscpp和rospy分别是C++和python实现的库,std_msgs是标准信息库,创建ros功能包时,一般都会依赖这三个库实现。打开文件进入我创建的helloworld我们可以看到里面有如下内容:

 三、编辑源文件、编辑配置文件以及编译并执行的实现

3.1  C++相关内容实现

3.1.1  编辑源文件

在创建的功能包下面的src文件夹里创建一个C++源文件,创建文件命令如下:

touch 自定义文件名.cpp

 这里我创建的文件名是helloworld_c

 接下来打开创建好的文件,编辑源文件,具体内容如下:

 3.1.2  编辑配置文件

打开创建的功能包下的CMakeLists.txt文件

首先将第136行和第149行的add_executable和target_link_libraries的井号去掉。

对于add_executable(${PROJECT_NAME}_node  src/helloworld_node.cpp)

第二个参数src/helloworld_node.cpp是我们刚刚编写的源文件,我编写的源文件是在src文件夹下的helloworld_c.cpp文件,因此将第二个参数修改为src/hellloworld_c.cpp;第一个参数是给执行文件命名(自定义),这里我命名为hello_c,也就是把第一个参数改为hello_c,当执行hello时就会映射到我编写的helloworld_c.cpp文件。

 改写结果如下,保存关闭。

 3.1.3  编译

返回工作空间输入如下命令:

catkin_make

 运行结果如下:

 3.1.4  执行

 (1)启动ROS核心

Ctrl+Alt+t打开一个新的终端输入如下命令:

roscore

 运行结果如下:

 (2)配置环境变量

source ./devel/setup.bash

(3)最后一步执行

rosrun 包名 C++节点
rosrun helloworld hello_c

 这里的helloworld是我的功能包的包名,hello_c是我刚刚命名的执行文件,运行结果如下:

可以看到成功地打印了hello world

3.2  Python相关内容实现

3.2.1  编辑源文件

(1)打开功能包新建scripts文件夹

(2)创建python 源文件

这里我命名为helloworld_p

touch helloworld_p.py

创建结果如下:

 (3)编辑源文件

保存关闭,在scripts文件夹里右键,在终端打开输入ll

可以看到,没有执行权限,输入如下命令:

chmod +x hello_p.py

 运行之后再次输入ll,可以看到已经有了执行权限

3.2.2  编辑配置文件

打开功能包下的CMakeLists.txt文件

 

找到第162行的catkin_install_python,我们需要更改的是scripts/my_python_script, my_python_script处应该改为我们刚刚编辑的python源文件,更改后如下:

保存关闭, catkin_install_python是为python文件选择一个恰当的解释器

3.2.3  编译

打开工作空间,右键在终端打开,输入如下命令:

catkin_make

运行结果如下:

 3.2.4  执行

(1)启动ROS核心

Ctrl+Alt+t打开一个新的终端,输入如下命令:

roscore

运行结果如下:

(2)配置环境变量

source ./devel/setup.bash

(3)最后一步执行

rosrun 包名 自定义文件名.py
rosrun helloworld helloworld_p.py

 这里的helloworld是我的功能包的包名,helloworld_p是我刚刚编写的python文件,运行结果如下:

 

可以看到成功地打印了hello world 

标签:python,创建,helloworld,如下,源文件,c++,HelloWorld,hello
From: https://blog.csdn.net/m0_74067088/article/details/141502951

相关文章

  • 突破编程:深入理解C++中的组合模式
    突破编程:深入理解C++中的组合模式在C++及众多面向对象编程语言中,设计模式是解决问题的经典方案,它们帮助开发者在面对复杂系统设计时,能够遵循一套经过验证的最佳实践。组合模式(CompositePattern)是这些设计模式中的一种,它提供了一种将对象组合成树形结构以表示“部分-整体”......
  • python布料分类
    importosimportshutildeforganize_files_by_prefix(folder_path):#遍历指定文件夹forfilenameinos.listdir(folder_path):#检查是否为文件ifos.path.isfile(os.path.join(folder_path,filename)):#按照"_"分割文件名......
  • C++ 析构函数注意事项总结
    在C++中,析构函数是一个特殊的成员函数,它在对象生命周期结束时自动调用,用于执行清理工作,如释放分配给对象的内存、关闭文件、断开网络连接等。正确编写析构函数对于防止内存泄漏、资源泄露和其他资源管理问题至关重要。以下是编写C++析构函数时需要注意的一些重要事项:确保资......
  • C++类和对象(下):初始化列表、explicit关键字、友元函数、友元类
    文章目录C++类和对象9、初始化列表9.1构造函数体赋值9.2初始化列表9.3explicit(显示)关键字10、友元10.1友元函数10.2友元类C++类和对象9、初始化列表一个类的构造函数要初始化成员变量有两种方式,一种是构造函数体赋值,另一种是初始化列表。9.1构造函数体赋值......
  • 揭秘Python中的二维码魔术师:qrcode库的魔法
    文章目录揭秘Python中的二维码魔术师:qrcode库的魔法背景:为什么选择qrcode库?库简介:qrcode是什么?安装指南:如何将qrcode库纳入你的Python环境?快速入门:5个简单函数的使用方法1.生成基本二维码2.生成带有Logo的二维码3.生成彩色二维码4.自定义二维码大小5.生成二维码并直......
  • 掌握时间的艺术:Python的sched库深度解析
    文章目录掌握时间的艺术:Python的sched库深度解析背景:为何选择sched?什么是sched库?如何安装sched库?简单库函数使用方法1.创建调度器实例2.安排事件3.取消事件4.运行调度器5.检查事件是否在队列中场景应用1.定时提醒2.定时备份3.定时关闭程序常见Bug及解决方案1.......
  • 自动生成依赖清单:pipreqs,Python项目的救星
    文章目录**自动生成依赖清单:pipreqs,Python项目的救星**背景:为何选择pipreqs?pipreqs是什么?如何安装pipreqs?库函数使用方法场景应用场景一:新项目初始化场景二:更新现有项目依赖场景三:排除特定库常见Bug及解决方案Bug1:找不到项目中的某些依赖Bug2:生成的依赖文件中包含错误......
  • 深度学习 vector 之模拟实现 vector (C++)
    1.基础框架这里我们有三个私有变量,使用_finish-_start代表_size,_end_of_storage-_start代表_capacity,并且使用到了模版,可以灵活定义存储不同类型的vector,这里将代码量较小的函数直接定义在类的内部使其成为内联函数namespacebit{ template<classT> classv......
  • 【python学习】揭秘Python abc库:从入门到精通,解锁抽象基类的终极技巧
    开篇本文适合Python开发者,尤其是希望在项目中应用面向对象编程(OOP)理念并提高代码复用性和结构性的人群。我们将深入探讨Python中的abc库,了解如何通过定义抽象基类来创建更加灵活、可扩展的代码结构,并介绍一些高级用法、常见的易错点以及实用的小技巧。温格高,2023年环法自行......
  • 两数相加 链表C++
    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0 开头。示例1:输入:l1=[2,4,3],l2=[5,......