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


进入到创建的 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系统 创建工作空间与功能包相关推荐

  1. ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包

    ROS Noetic入门笔记(一)在ubuntu20.04中安装ROS Noetic并简单测试 ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包 ROS Noetic入门笔记 ...

  2. ROS(四)——创建工作空间与功能包 Catkin编译系统

    catkin编译系统 ROS 的 Catkin 编译系统的一个特点是将程序做成 package (称为 catkin package 或者 ROS package) 的形式,可以理解成模块化. 典型的 ...

  3. 【RK3399Pro学习笔记】四、ROS 创建工作空间与功能包

    目录 创建工作空间 编译工作空间 功能包 创建功能包 编译功能包 设置环境变量 检查环境变量 平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本:Tinker_Edge_R ...

  4. 《动手学ROS2》3.5.1创建工作空间和功能包

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 3.4.1 创建工作空间和功能 ...

  5. ROS机器人操作系统——创建工作空间与功能包(四)

    ROS机器人操作系统 文章目录 ROS机器人操作系统 前言 一.工作空间 1.创建工作空间 2.编译工作空间 3.设置环境变量 4.检查环境变量 二.功能包 1.创建功能包 2.编译功能包 总结 前言 ...

  6. 手把手教会:ROS——机器人操作系统工作空间和功能包的创建02(笔记02)

    在上一篇文章中,我已经把ROS的工作空间的创建步骤进行了介绍.接下来,我们就来看一下ROS的功能包是如何创建的. 一.功能包的组成 对于功能包我们可以理解为是一个存放在ROS工作空间中的"s ...

  7. ROS入门-7.创建工作空间与功能包

    一.工作空间 概述:是一个存放工程开发相关文件的文件夹 包括四个主要文件夹 src(代码空间):用来放置功能包,功能包的代码,配置文件,launch文件等 build(编译空间):放置编译过程当中产生 ...

  8. ROS学习笔记(一):创建工作空间和功能包

    所有的ROS程序,包括我们自己开发的程序,都被组织成功能包,而ROS的功能包被存放在称之为工作空间的目录下.因此,在我们写程序之前,第一步是创建一个工作空间以容纳我们的功能包.其实ROS工作空间就是l ...

  9. 古月居ROS入门21讲——9.创建工作空间与功能包

    1.工作空间 工作空间(workspace)直观的形容就是一个仓库,里面装载着ROS的各种项目工程,便于系统组织管理调用. src/: 源代码包 build/: 编译生成的中间文件 devel/: 开 ...

最新文章

  1. 9步教你用NumPy从头开始构建神经网络!
  2. 基于Visual C++2010与windows SDK fo windows7开发Windows 7的多点触摸特性应用程序(1)
  3. NIST发布网络安全劳动力框架
  4. python中datetime模块_python中的datetime模块
  5. Java 线上问题排查神器 Arthas 快速上手与原理浅谈
  6. SQL Server 数据库原理与应用
  7. oracle快速创建可用用户
  8. python网格搜索优化参数_python – 是否有可能通过网格搜索调整参数scikit-learn中的自定义内核?...
  9. 【深度学习基础】张量的描述与深度学习常见张量
  10. Hadoop大数据技术原理与应用-第一章初识Hadoop
  11. php做一个每天的考勤表,教你做一个酷毙的考勤表!|
  12. 前世今生只愿得一人心
  13. 如何使用SPSS进行两因素重复测量的方差分析
  14. LeetCode-55. 跳跃游戏
  15. 随心所“语”之“做”与“想”
  16. 算法提高 盾神与砝码称重
  17. 计算机学生要学的基础知识,中小学生应注重学习计算机的基础知识
  18. MySQL 升级--1
  19. 最短路 (Dijstra) 最短路
  20. 飞机大战(案例详解)

热门文章

  1. springboot和kafka集成
  2. Handler 系列二:如何通信
  3. Java 中日期的几种常见操作 —— 取值、转换、加减、比较
  4. outlook异常之:邮件输入模式转换
  5. 简单工厂模式,抽象工厂模式,反射工厂模式的代码总结
  6. action和servlet的关系
  7. hadoop java操作hdfs
  8. 用C语言编写一个Linux下的简单shell程序
  9. #define与typedef的区别!
  10. linux(ubuntu版本)安装tengine