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中的程序即使使用不同的编程语言,实现流程大致如下:
- 创建工作空间
- 编译工作空间
- 创建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(PROGRAMSscripts/helloworld_p.pyDESTINATION ${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
- 第二种方式:
打开文件的属性,找到 权限 一栏,然后勾选 - 允许将文件作为程序执行
ROS系统 创建工作空间与功能包相关推荐
- ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包
ROS Noetic入门笔记(一)在ubuntu20.04中安装ROS Noetic并简单测试 ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包 ROS Noetic入门笔记 ...
- ROS(四)——创建工作空间与功能包 Catkin编译系统
catkin编译系统 ROS 的 Catkin 编译系统的一个特点是将程序做成 package (称为 catkin package 或者 ROS package) 的形式,可以理解成模块化. 典型的 ...
- 【RK3399Pro学习笔记】四、ROS 创建工作空间与功能包
目录 创建工作空间 编译工作空间 功能包 创建功能包 编译功能包 设置环境变量 检查环境变量 平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本:Tinker_Edge_R ...
- 《动手学ROS2》3.5.1创建工作空间和功能包
本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 3.4.1 创建工作空间和功能 ...
- ROS机器人操作系统——创建工作空间与功能包(四)
ROS机器人操作系统 文章目录 ROS机器人操作系统 前言 一.工作空间 1.创建工作空间 2.编译工作空间 3.设置环境变量 4.检查环境变量 二.功能包 1.创建功能包 2.编译功能包 总结 前言 ...
- 手把手教会:ROS——机器人操作系统工作空间和功能包的创建02(笔记02)
在上一篇文章中,我已经把ROS的工作空间的创建步骤进行了介绍.接下来,我们就来看一下ROS的功能包是如何创建的. 一.功能包的组成 对于功能包我们可以理解为是一个存放在ROS工作空间中的"s ...
- ROS入门-7.创建工作空间与功能包
一.工作空间 概述:是一个存放工程开发相关文件的文件夹 包括四个主要文件夹 src(代码空间):用来放置功能包,功能包的代码,配置文件,launch文件等 build(编译空间):放置编译过程当中产生 ...
- ROS学习笔记(一):创建工作空间和功能包
所有的ROS程序,包括我们自己开发的程序,都被组织成功能包,而ROS的功能包被存放在称之为工作空间的目录下.因此,在我们写程序之前,第一步是创建一个工作空间以容纳我们的功能包.其实ROS工作空间就是l ...
- 古月居ROS入门21讲——9.创建工作空间与功能包
1.工作空间 工作空间(workspace)直观的形容就是一个仓库,里面装载着ROS的各种项目工程,便于系统组织管理调用. src/: 源代码包 build/: 编译生成的中间文件 devel/: 开 ...
最新文章
- 9步教你用NumPy从头开始构建神经网络!
- 基于Visual C++2010与windows SDK fo windows7开发Windows 7的多点触摸特性应用程序(1)
- NIST发布网络安全劳动力框架
- python中datetime模块_python中的datetime模块
- Java 线上问题排查神器 Arthas 快速上手与原理浅谈
- SQL Server 数据库原理与应用
- oracle快速创建可用用户
- python网格搜索优化参数_python – 是否有可能通过网格搜索调整参数scikit-learn中的自定义内核?...
- 【深度学习基础】张量的描述与深度学习常见张量
- Hadoop大数据技术原理与应用-第一章初识Hadoop
- php做一个每天的考勤表,教你做一个酷毙的考勤表!|
- 前世今生只愿得一人心
- 如何使用SPSS进行两因素重复测量的方差分析
- LeetCode-55. 跳跃游戏
- 随心所“语”之“做”与“想”
- 算法提高 盾神与砝码称重
- 计算机学生要学的基础知识,中小学生应注重学习计算机的基础知识
- MySQL 升级--1
- 最短路 (Dijstra) 最短路
- 飞机大战(案例详解)