当前位置:   article > 正文

ROS——HelloWorld实现(C++和Python两种方案)_用ros节点编写helloworld

用ros节点编写helloworld

 

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

  1. mkdir -p 自定义空间名称/src
  2. cd 自定义空间名称

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

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

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

 

二、创建功能包

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

cd src

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

catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

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

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

三、C++版本实现

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

cd 自定义的包

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

 创建源文件

 

 

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

Vim编译器编译helloworld.Cpp文件

 

 

  1. #include "ros/ros.h"
  2. int main(int argc, char *argv[])
  3. {
  4.     //执行 ros 节点初始化
  5.     ros::init(argc,argv,"hello");
  6.     //创建 ros 节点句柄(非必须)
  7.     ros::NodeHandle n;
  8.     //控制台输出 hello world
  9.     ROS_INFO("hello world!");
  10.     return 0;
  11. }

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

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

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

vim CMakeLists.txt

 去掉下图剪头指处的注释

 

上面两句代码改为:

  1. add_executable(源文件名(可以随便,这里的名字,但要和下面那句代码名字对应一致)
  2.   src/步骤3的源文件名.cpp
  3. )
  4. target_link_libraries(步骤3的源文件名
  5.   ${catkin_LIBRARIES}
  6. )

示例:

  1. add_executable(helloworld src/helloworld.cpp)
  2. target_link_libraries(helloworld
  3.   ${catkin_LIBRARIES}
  4. )

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

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

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

键入“catkin_make”编译

 如下图显示为编译成功

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

4、执行

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

 指令:

  1. cd 工作空间
  2. source ./devel/setup.bash 构建环境变量
  3. rosrun 包名 C++节点

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

 最后输出

[ INFO] [1680504844.008447821]: hello world!

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

四、Python版本

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

  1. cd ros包 进入功能包
  2. mkdir scripts 创建scripts文件夹

  1. cd scripts    进入script文件夹
  2. touch helloworld.py   创建helloworld.py文件

 

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

  1. #! /usr/bin/env python
  2. #指定解释器
  3. """
  4.     Python 版 HelloWorld
  5. """
  6. import rospy
  7. #主入口
  8. if __name__ == "__main__":
  9.     rospy.init_node("Hello")  #初始化ros节点
  10.     rospy.loginfo("Hello World!!!!")  #输出日志

以上代码分为:

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

 

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

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

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

 

上图文件没有执行权限

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

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

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

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

 

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

同c++版本

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

  1. cd 工作空间
  2. source ./devel/setup.bash

 

rosrun 包名 自定义文件名.py

 运行结果

 五、两个版本的细微区别

 

六、问题总结

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

 

解决办法:

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

  1.   File "/home/l/ros/demo01_ws/src/helloworld/scripts/helloworld.py", line 2
  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 -*-


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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/401139
推荐阅读
相关标签
  

闽ICP备14008679号