ROS——HelloWorld实现(C++和Python两种方案)

本文介绍了如何在ROS框架下创建和初始化工作空间,创建功能包,并分别用C++和Python编写简单的HelloWorld程序。涉及到的关键步骤包括catkin_make编译,编辑CMakeLists.txt文件,设置环境变量,以及程序的执行。同时,文章还提到了Python2中处理中文字符的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、创建工作空间并初始化

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

cd 自定义空间名称

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

f0df570266e549168d9bd7933cb4a2e8.png

 catkin_make:ros里面的一个编译命令,编译完会输出日志,如下图。

28ff0711037a4eada6bcae167d10935d.png

打开工作空间后出现devel文件和build文件,如下图。

c250ad28e4ad454ba2cb85a5e32b9a99.png

 

二、创建功能包

进入工作空间里面的src目录

cd src

创建功能包  roscpp rospy std_msgs:为三个依赖包,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。

catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

af97fe983f424a2cba223dccff908872.png

 创建后文件夹会发生变化,如下图。

a953cfc3cc8c48daa7d82c0f04d4cd90.png6a747ab59b81488184f380e9490c8f98.png

 会出现一些文件夹和一些cmake文件

 

三、C++版本实现

1、进入 ros 包的 src 目录编辑源文件

cd 自定义的包

源文件放在第二个src文件下

6998cb0df8a3421b93d4a9a8fbd1ada0.png

 创建源文件

2ff5d15d6ba0401c9fecba081aa83087.png

 

7a427ab06ec84cb1990810c3711e01f8.png

 

源文件包含:ros头文件、main函数、初始化节点、输出日志。

 

Vim编译器编译helloworld.Cpp文件

85f8cf037a4b49b7a3611e3561ae68d3.png

 b84fb3048e514703b77537a6178e2a0e.png

 

#include "ros/ros.h"



int main(int argc, char *argv[])

{

    //执行 ros 节点初始化

    ros::init(argc,argv,"hello");

    //创建 ros 节点句柄(非必须)

    ros::NodeHandle n;

    //控制台输出 hello world

    ROS_INFO("hello world!");



    return 0;

}

键入i进入编辑模式,编辑完内容后按ESC在输入“:wq”保存退出。

 

2、编辑 ros 包下的 Cmakelist.txt文件

输入cd ..返回上一级目录编辑CMakeLists.tt

vim CMakeLists.txt

a90cd02f45eb4f7f80ed5d8c3cccb9e3.png

 去掉下图剪头指处的注释

932176c1e9394e0a9b77945c5350901f.png

 

上面两句代码改为:

add_executable(源文件名(可以随便,这里的名字,但要和下面那句代码名字对应一致)

  src/步骤3的源文件名.cpp

)

target_link_libraries(步骤3的源文件名

  ${catkin_LIBRARIES}

)

示例:

add_executable(helloworld src/helloworld.cpp)



target_link_libraries(helloworld

  ${catkin_LIBRARIES}

)

25b42a78bb2849bbb6ed6ef094d8931f.png

 输入完成后同样键入“:wq”保存退出。

 

3、进入工作空间目录并编译

键入“cd ../../”返回工作空间

键入“catkin_make”编译

0071df30a4374586939dab22597a3e75.png

 如下图显示为编译成功

5a41ec62274643dd924fe0c025f8711e.png

 如果出现错误会有红色错误提示。

4、执行

执行要先启动ros核心,这里要新建窗口(Ctrl+Shift+E)

54d88b85bb784d8f99339df0bb7c5f06.png

 指令:

cd 工作空间

source ./devel/setup.bash 构建环境变量

rosrun 包名 C++节点

其中对于 source ./devel/setup.bash 的解释(使用source构建环境变量)将对应的工作空间的路径加入环境变量ROS_PACKAGE_PATH中。如果新开了一个终端命令行,在使用该工作空间前,必须先将该工作空间的路径加入环境变量ROS_PACKAGE_PATH中这句话的目的就是在开新的terminal的时候,运行这个setup.bash,而这个setup.bash的作用是让一些ROS* 开头的命令可以使用。在工作空间的devel文件夹中存在几个setup.*sh形式的环境变量设置脚本。使用source命令运行这些脚本文件,则工作空间的环境变量设置可以生效(如可以找到该工作空间内的项目)

3987ecbfe9154762a030d9c302ae6945.png

 最后输出

[ INFO] [1680504844.008447821]: hello world!

至此c++的一个程序就成功完成!

 

 

 

四、Python版本

1、进入 ros 包添加 scripts 目录并编辑 python 文件

cd ros包 进入功能包

mkdir scripts 创建scripts文件夹

42db3508e9cb414b9f2f33d9a35b7ce2.png

cd scripts    进入script文件夹

touch helloworld.py   创建helloworld.py文件

eef1b19dde9c42c5b4db1c1dc10e4706.png

 

用vim进行编辑,添加内容:

#! /usr/bin/env python

#指定解释器

"""
    Python 版 HelloWorld

"""

import rospy

#主入口

if __name__ == "__main__":

    rospy.init_node("Hello")  #初始化ros节点

    rospy.loginfo("Hello World!!!!")  #输出日志

以上代码分为:

  1. 1.指定解释器
  2. 2.导包
  3. 3.编写主入口
  4. 4.初始化ros节点
  5. 5.输出日志

97a0f058c55a4c76b888967660ec6e47.png

 

编写完成后键入“esc”“:wq”保存退出

2、为 python 文件添加可执行权限

键入”ll”指令查看执行权限

68798b86ad02456c925f2a1c30ad1773.png

 

上图文件没有执行权限

执行“chmod +x 自定义文件名.py”添加执行权限

f9582bf381e54691a8c99087e0a960b2.png

 3、编辑 ros 包下的 CamkeList.txt 文件

返回上一级目录编辑CamkeList.txt 文件这里直接用“vim ../CamkeList.txt”

去掉这里的注释并更改(记得保存退出),更改如下图:

b096531c9bcd4f2e891b7b4bc6c2d063.png

 

4、进入工作空间目录并编译

同c++版本

5、进入工作空间目录并执行

cd 工作空间

source ./devel/setup.bash

25de384413934d49a9b9f2152bc9ab65.png

 

rosrun 包名 自定义文件名.py

d87d18e123354c01ba138dc8f790ea07.png

 运行结果

d0c8f8e8aa684ea99071afc6d77939f2.png

 五、两个版本的细微区别

691c1f6d582344ed82f82437b0a6eb2d.png

 

六、问题总结

运行过程中出现以下情况:

7108007dd394403b9a84319232b689a2.png

 

解决办法:

当在Python 2.X文件中写中文注释或输出中文时候,经常会出现编译错误(在Python 3.X中没有这种错误。):

  File "/home/l/ros/demo01_ws/src/helloworld/scripts/helloworld.py", line 2

SyntaxError: Non-ASCII character '\xe6' in file /home/l/ros/demo01_ws/src/helloworld/scripts/helloworld.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

这是因为Python 2.X的默认编码文件是用ASCII码,如果想要编译通过,则只需要在文件开头加入一行代码将文件存成UTF-8格式即可。

在代码python代码首行加入“# -*- coding:utf-8 -*-  ”

# -*- coding:utf-8 -*-

fd2f1f011b9443f2bc0923feae19e740.png


来源:小凌のBlog—Good Times|一个不咋地的博客

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值