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系统 创建工作空间与功能包_第1张图片
进入到创建的 catkin_ws 工程目录中

cd ~/catkin_ws/src

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

catkin_init_workspace

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

编译工作空间

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

cd ~/catkin_ws/

在这里插入图片描述

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

catkin_make

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

catkin_make install

ROS系统 创建工作空间与功能包_第7张图片

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

catkin_create_pkg[depend1][depend2][depend3]

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

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

创建功能包

cd ~/catkin_ws/src

在这里插入图片描述

catkin_create_pkg test_pkg std_msgs rospy roscpp

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

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

使用C++执行程序

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

编写源文件

helloworld_c.cpp文件内容

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

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

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

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

修改为

add_executable(hello src/helloworld_c.cpp)
  • 第一个参数:自定义名称
  • 第二参数:指定src目下的cpp文件
修改目标链接库

ROS系统 创建工作空间与功能包_第12张图片
把以下代码

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

改为这样

target_link_libraries(hello
   ${catkin_LIBRARIES}
)

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

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

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

编译编写源码文件

cd ~/catkin_ws

再次编译工作空间。

catkin_make

ROS系统 创建工作空间与功能包_第15张图片

设置环境变量

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

source devel/setup.bash

source ~/catkin_ws/devel/setup.bash

以上两种方式都可以设置环境变量
ROS系统 创建工作空间与功能包_第16张图片

检查环境变量

echo $ROS_PACKAGE_PATH

在这里插入图片描述

执行ROS功能包

启动ROS Master

roscore

ROS系统 创建工作空间与功能包_第17张图片
执行编写的源文件

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

执行成功后输出 hello world
ROS系统 创建工作空间与功能包_第18张图片

使用Python执行程序

创建存放Python代码的目录

cd ~/catkin_ws/src/test_pkg

创建 scripts 文件夹

mkdir scripts

ROS系统 创建工作空间与功能包_第19张图片

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

cd scripts

编写源文件

创建 helloworld_p.py Python文件

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

#1.导包
import rospy

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

ROS系统 创建工作空间与功能包_第20张图片
通过以下命令查看Python文件的权限

ls -l

ROS系统 创建工作空间与功能包_第21张图片
为 Python文件 添加执行权限

chmod +x helloworld_p.py

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

编辑功能包下的 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系统 创建工作空间与功能包_第23张图片
设置环境变量

source ~/catkin_ws/devel/setup.bash

编译编写源码文件

cd ~/catkin_ws

再次编译工作空间。

catkin_make

ROS系统 创建工作空间与功能包_第24张图片

执行ROS功能包

启动ROS Master

roscore

执行编写的源文件

cd ~/catkin_ws
rosrun test_pkg helloworld_p.py
rosrun 包名 自定义文件名.py

ROS系统 创建工作空间与功能包_第25张图片

执行成功后输出 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系统 创建工作空间与功能包_第26张图片
ROS系统 创建工作空间与功能包_第27张图片

你可能感兴趣的:(ROS)