0
点赞
收藏
分享

微信扫一扫

ROS系统 创建工作空间与功能包


ROS

  • ​​学习目标:​​
  • ​​学习内容:​​
  • ​​使用环境​​
  • ​​操作步骤:​​
  • ​​基本命令​​
  • ​​二、使用步骤​​
  • ​​创建工作空间​​
  • ​​编译工作空间​​
  • ​​创建功能包​​
  • ​​使用C++执行程序​​
  • ​​编写源文件​​
  • ​​编辑功能包下的 Cmakelist.txt文件​​
  • ​​修改目标链接库​​
  • ​​编译编写源码文件​​
  • ​​设置环境变量​​
  • ​​执行ROS功能包​​
  • ​​使用Python执行程序​​
  • ​​编写源文件​​
  • ​​编辑功能包下的 Cmakelist.txt文件​​
  • ​​编译编写源码文件​​
  • ​​执行ROS功能包​​

  • ​​总结​​
  • ​​创建功能包​​
  • ​​工作空间的覆盖​​
  • ​​配置变量环境​​
  • ​​设置Python文件可执行权限​​

学习目标:

ROS 工作空间与功能包的创建

学习内容:

1、 创建工作空间
2、 创建功能包
3、 配置功能包
4、 编译功能包

使用环境

  • VMware Workstation Pro:15.5.0
  • ubuntu:18.04.5
  • ROS:melodic
  • Python:3.6.9
  • gcc:7.5.0

操作步骤:

ROS中的程序即使使用不同的编程语言,实现流程大致如下:

  1. 创建工作空间
  2. 编译工作空间
  3. 创建ROS功能包
  4. 进入ROS包的src目录编辑源文件
  5. 编辑功能包下的Cmakelist.txt文件
  6. 进入工作空间目录并编译(Python无需编译)
  7. 配置环境变量
  8. 启动ROS Master 和 执行编写的源文件

基本命令

  • cd [file_name]:进入某一文件路径
  • cd … :返回上一级目录
  • ls:列出当前路径下的所有文件
  • rospack find [package_name]:返回所要找的包的路径
  • roscd:将当前路径设置为某一个 ROS 包或栈的路径或其子路径
  • pwd:显示出当前
  • roscd log:将路径设置为 ROS 存储日志文件的路径。
  • rosls [locationname[/subdir]]:直接将路径改为某个包下的某个子目录
  • TAB键,相当于Eclipse里面的 ALT+/。但没有ALT+/ 功能那么强大,只能在路径唯一时才会自动出来。

二、使用步骤

创建工作空间

mkdir -p ~/工作空间名称/src

例如:创建一个名称为 catkin_ws 的工作空间

mkdir -p ~/catkin_ws/src

ROS系统 创建工作空间与功能包_源文件
进入到创建的 catkin_ws 工程目录中

cd ~/catkin_ws/src

初始化了工作空间,创建了一个 catkin_ws 空间,在该空间下有一个 src 文件夹

catkin_init_workspace

初始化工作空间后,会在src目录中生成一个 CMakeLists.txt 文件,生成这个文件说明当前路径已经是ROS的工作空间了。
ROS系统 创建工作空间与功能包_工作空间_02

编译工作空间

注:在编译工作空间时,需要在工作空间的根目录执行编译命令。

cd ~/catkin_ws/

ROS系统 创建工作空间与功能包_工作空间_03

编译工作空间下所有功能包的源码。

catkin_make

ROS系统 创建工作空间与功能包_工作空间_04
编译完成后会生成 build 和 devel文件夹。
ROS系统 创建工作空间与功能包_python_05
build文件夹中的内容,存放编译的二进制文件。
ROS系统 创建工作空间与功能包_python_06
devel文件夹中的内容,存放开发中的可执行文件和库
ROS系统 创建工作空间与功能包_源文件_07
此时还缺少一个 install 文件夹,需要执行以下指令,便可自动生一个 install 文件夹。

catkin_make install

ROS系统 创建工作空间与功能包_工作空间_08

install 文件夹中的内容,用来存放着编译后的可执行文件。
ROS系统 创建工作空间与功能包_工作空间_09

catkin_create_pkg<package_name>[depend1][depend2][depend3]

工作空间是一个存放工程开发相关文件的文件夹。

  • src:代码空间
  • build:编译空间
  • devel:开发空间
  • install:安装空间

创建功能包

cd ~/catkin_ws/src

ROS系统 创建工作空间与功能包_源文件_10

catkin_create_pkg test_pkg std_msgs rospy roscpp

上述命令,会在工作空间下生成一个功能包,该功能包依赖于 rospy 、roscpp与std_msgs

  • roscpp:使用C++实现的库
  • rospy:使用Python实现的库
  • std_msgs :标准消息库
    创建ROS功能包时,一般都会依赖这三个库实现。
    ROS系统 创建工作空间与功能包_python_11
    test_pkg中的内容
    ROS系统 创建工作空间与功能包_源文件_12
  • src:存放自己写的源码。
  • include:C++代码头文件,可以存放在这里

使用C++执行程序

编写C++文件放在 test_pkg 功能包的 src目录下
ROS系统 创建工作空间与功能包_源文件_13

编写源文件

helloworld_c.cpp文件内容

// 1.包含 ros 的头文件
#include "ros/ros.h"

//2.编写 main 函数
int&nbsp;main(int&nbsp;argc,&nbsp;char&nbsp;*argv[]){
// 3.初始化ros节点
ros::init(argc,&nbsp;argv,&nbsp;&quot;hello_node&quot;);&nbsp;// 定义节点名称
// 4.输出日志
ROS_INFO(&quot;hello&nbsp;world&quot;);

// 4.输出日志
return&nbsp;0;
}

编辑功能包下的 Cmakelist.txt文件

# add_executable(${PROJECT_NAME}_node src/test_pkg_node.cpp)

修改为

add_executable(hello src/helloworld_c.cpp)

  • 第一个参数:自定义名称
  • 第二参数:指定src目下的cpp文件
修改目标链接库

ROS系统 创建工作空间与功能包_源文件_14
把以下代码

# target_link_libraries(${PROJECT_NAME}_node
#   ${catkin_LIBRARIES}
# )

改为这样

target_link_libraries(hello
   ${catkin_LIBRARIES}
)

注:hello 为 add_executable()第一个参数映射的名称。
ROS系统 创建工作空间与功能包_工作空间_15

ROS系统 创建工作空间与功能包_工作空间_16
注:如果实在找不到这两个地方,可以从上面把配置信息 粘贴到 ​​​CMakeLists.txt​​文件中的任意空白位置。

修改完这两步以后,保存配置文件。

编译编写源码文件

cd ~/catkin_ws

再次编译工作空间。

catkin_make

ROS系统 创建工作空间与功能包_python_17

设置环境变量

让系统能够找到该工作空间,需要设置环境变量。

source devel/setup.bash

source ~/catkin_ws/devel/setup.bash

以上两种方式都可以设置环境变量
ROS系统 创建工作空间与功能包_源文件_18

检查环境变量

echo $ROS_PACKAGE_PATH

ROS系统 创建工作空间与功能包_工作空间_19

执行ROS功能包

启动ROS Master

roscore

ROS系统 创建工作空间与功能包_工作空间_20
执行编写的源文件

rosrun test_pkg hello

  • test_pkg:为刚创建的功能包名
  • hello:为​​CMakeLists.txt​​文件下配置的 add_executable() 映射的cpp文件名

执行成功后输出 hello world
ROS系统 创建工作空间与功能包_python_21

使用Python执行程序

创建存放Python代码的目录

cd ~/catkin_ws/src/test_pkg

创建 scripts 文件夹

mkdir scripts

ROS系统 创建工作空间与功能包_源文件_22

编写Python文件放在 test_pkg 功能包的 scripts 目录下

cd scripts

编写源文件

创建 helloworld_p.py Python文件

touch helloworld_p.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
##指定解释器

#1.导包
import&nbsp;rospy

#2.编写主入口
if&nbsp;__name__&nbsp;==&nbsp;&#39;__main__':
#3.初始化ROS节点
rospy.init_node(&quot;hello_world&quot;);
# 4.输出日志
rospy.loginfo(&quot;Hello&nbsp;Python!&quot;)

ROS系统 创建工作空间与功能包_python_23
通过以下命令查看Python文件的权限

ls -l

ROS系统 创建工作空间与功能包_python_24
为 Python文件 添加执行权限

chmod +x helloworld_p.py

添加权限后,Python文件可以被执行。
ROS系统 创建工作空间与功能包_python_25

编辑功能包下的 Cmakelist.txt文件

# catkin_install_python(PROGRAMS
#   scripts/my_python_script
#   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )

修改为

catkin_install_python(PROGRAMS
   scripts/helloworld_p.py
   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

ROS系统 创建工作空间与功能包_工作空间_26
设置环境变量

source ~/catkin_ws/devel/setup.bash

编译编写源码文件

cd ~/catkin_ws

再次编译工作空间。

catkin_make

ROS系统 创建工作空间与功能包_工作空间_27

执行ROS功能包

启动ROS Master

roscore

执行编写的源文件

cd ~/catkin_ws

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

ROS系统 创建工作空间与功能包_工作空间_28

执行成功后输出 hello Python!

总结

创建功能包
  • 同一个工作空间下,不允许存在同名功能包
  • 不同工作空间下,允许存在同名功能包。
工作空间的覆盖
  • 工作空间的路径依次在ROS_PACKAGE_PATH环境变量中记录
  • 新设置的路径在ROS_PACKAGE_PATH中会自动放置在最前端
  • 运行时,ROS会有限查找最前端的工作空间中是否存在指定的功能包
  • 如果不存在,就顺序向后查找其他工作空间
配置变量环境

source ~/工作空间/devel/setup.bash 可以添加进 .bashrc 文件

  • 添加方式1:直接使用gedit或vi编辑.bashrc 文件,文件末尾添加该内容。
  • 添加方式2:echo “source ~/工作空间/devel/setup.bash” >> ~/.bashrc
设置Python文件可执行权限
  • 第一种方式:

chmod +x helloworld_p.py

  • 第二种方式:
    打开文件的属性,找到 权限 一栏,然后勾选
  • 允许将文件作为程序执行

ROS系统 创建工作空间与功能包_工作空间_29
ROS系统 创建工作空间与功能包_源文件_30

举报

相关推荐

0 条评论