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中的程序即使使用不同的编程语言,实现流程大致如下:
- 创建工作空间
- 编译工作空间
- 创建ROS功能包
- 进入ROS包的src目录编辑源文件
- 编辑功能包下的Cmakelist.txt文件
- 进入工作空间目录并编译(Python无需编译)
- 配置环境变量
- 启动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
进入到创建的 catkin_ws 工程目录中
cd ~/catkin_ws/src
初始化了工作空间,创建了一个 catkin_ws 空间,在该空间下有一个 src 文件夹
catkin_init_workspace
初始化工作空间后,会在src目录中生成一个 CMakeLists.txt 文件,生成这个文件说明当前路径已经是ROS的工作空间了。
编译工作空间
注:在编译工作空间时,需要在工作空间的根目录执行编译命令。
cd ~/catkin_ws/
编译工作空间下所有功能包的源码。
catkin_make
编译完成后会生成 build 和 devel文件夹。
build文件夹中的内容,存放编译的二进制文件。
devel文件夹中的内容,存放开发中的可执行文件和库
此时还缺少一个 install 文件夹,需要执行以下指令,便可自动生一个 install 文件夹。
catkin_make install
install 文件夹中的内容,用来存放着编译后的可执行文件。
catkin_create_pkg<package_name>[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功能包时,一般都会依赖这三个库实现。
test_pkg中的内容 - src:存放自己写的源码。
- include:C++代码头文件,可以存放在这里
使用C++执行程序
编写C++文件放在 test_pkg 功能包的 src目录下
编写源文件
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文件
修改目标链接库
把以下代码
# target_link_libraries(${PROJECT_NAME}_node
# ${catkin_LIBRARIES}
# )
改为这样
target_link_libraries(hello
${catkin_LIBRARIES}
)
注:hello 为 add_executable()第一个参数映射的名称。
注:如果实在找不到这两个地方,可以从上面把配置信息 粘贴到 CMakeLists.txt
文件中的任意空白位置。
修改完这两步以后,保存配置文件。
编译编写源码文件
cd ~/catkin_ws
再次编译工作空间。
catkin_make
设置环境变量
让系统能够找到该工作空间,需要设置环境变量。
source devel/setup.bash
或
source ~/catkin_ws/devel/setup.bash
以上两种方式都可以设置环境变量
检查环境变量
echo $ROS_PACKAGE_PATH
执行ROS功能包
启动ROS Master
roscore
执行编写的源文件
rosrun test_pkg hello
- test_pkg:为刚创建的功能包名
- hello:为
CMakeLists.txt
文件下配置的 add_executable() 映射的cpp文件名
执行成功后输出 hello world
使用Python执行程序
创建存放Python代码的目录
cd ~/catkin_ws/src/test_pkg
创建 scripts 文件夹
mkdir scripts
编写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!")
通过以下命令查看Python文件的权限
ls -l
为 Python文件 添加执行权限
chmod +x helloworld_p.py
添加权限后,Python文件可以被执行。
编辑功能包下的 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}
)
设置环境变量
source ~/catkin_ws/devel/setup.bash
编译编写源码文件
cd ~/catkin_ws
再次编译工作空间。
catkin_make
执行ROS功能包
启动ROS Master
roscore
执行编写的源文件
cd ~/catkin_ws
rosrun test_pkg helloworld_p.py
rosrun 包名 自定义文件名.py
执行成功后输出 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
- 第二种方式:
打开文件的属性,找到 权限 一栏,然后勾选 - 允许将文件作为程序执行