ROS创建工作空间及功能包流程总结整理(python)

ROS创建工作空间及功能包流程总结整理(python)

参考资料:

B站赵虚左: https://www.bilibili.com/video/BV1Ci4y1L7ZZ?p=19&vd_source=a8e8676617fb04db42af59b530b145fd

所用环境: linux20.04+ROS1 noetic

demo案例: 使用python实现ROS版本的hello world

1、创建工作空间:

  选取自己计算机的某个位置,新建一个文件夹作为自己的工作空间

mkdir -p demo_ws/src

  这里的demo_ws是笔者工作空间的名称,读者可以自定义。一定要在工作空间中设置二级子文件夹并命名为src,作为代码空间用于存放后续编写的功能包源代码,名字不可以自定义。

2、编译工作空间

catkin_make

  正常情况下就可以看到终端输出一些日志并看到工作空间中出现build和devel两个新的文件夹,即编译成功。
ROS创建工作空间及功能包流程总结整理(python)_第1张图片

  但是对于系统中安装了anaconda的用户,可能存在不止一个python。这时候很可能会因为ROS和anaconda中python版本冲突报错:Invoking “cmake” failed。出现该问题的用户只需要在编译时指名所用的python版本(命令如下)即可成功编译。

catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3

3、创建功能包

  进入src文件夹中

cd src

  创建功能包

catkin_create_pkg helloworld roscpp rospy std_msgs

  helloworld是功能包名,功能包名可自行设置,后面需要跟上roscpp、rospy、std-msgs这些常用依赖。其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。

  创建成功后可以在src目录下看到以功能包名字命名的文件夹和配置文件CMakelist.txt.

ROS创建工作空间及功能包流程总结整理(python)_第2张图片

4、编辑源文件

(1)进入ROS功能包

cd helloworld

(2)添加scripts目录,我们后续的python源文件都存放在该scripts文件中

mkdir scripts

(3)新建一个python文件

touch helloworld.py

   进入新建的python文件,输入python代码

#! /usr/bin/env python

"""
    Python 版 HelloWorld

"""
#导包:
import rospy
#编写主入口:
if __name__ == "__main__":
	#初始化ros节点
    rospy.init_node("Hello")
    #输出日志helloworld
    rospy.loginfo("Hello World!!!!")

(4)为 python 文件添加可执行权限

chmod +x 自定义文件名.py

  chmod是linux中用于改变文件权限的命令,文件有rwx,即读取(r)、写入(w)、执行(x)。我们后面需要执行python文件,所以这里需要打开该文件的执行权限。

5、编辑配置文件CamkeList.txt

  162—165行,将注释放开,并把自定义文件名填入。该配置可以为python文件选择合适的解释器,noetic版本之前的用户可能不需要配置也可以成功运行。

catkin_install_python(PROGRAMS scripts/自定义文件名.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

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

cd 自定义空间名称
catkin_make

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

(1)先启动命令行1:

roscore

  roscore用于启动ros核心,在ros中,所有的节点都是依赖于roscore

(2)再启动命令行2:

  回到编译结束的窗口,进入开发空间(devel)执行setup.bash,这一步是为了刷新环境变量。

  执行文件命令:rosrun 功能包名 自定义文件名

cd 工作空间
source ./devel/setup.bash
rosrun helloworld helloworld.py

  输出结果:Hello World!!!

你可能感兴趣的:(ros,python,机器人,linux)