1.1 ROS学习笔记之基本概念


导览

本单元你将学到:

  • 如何构建和启动ROS程序(功能包和launch文件)
  • 如何创建ROS程序(使用Python语言)
  • ROS基本概念:节点,参数服务器,环境变量,Roscore

课前总结

  • 功能包:一个ROS程序所包含的所有文件(按结构组织)
  • 关注节点标签的参数意义
  • ls:列出所有内容
  • roscd:进入某目录 命令+目录名
  • catkin_create_pkg
  • rospack list:列出所有功能包
  • rospack profile:刷新功能包
  • rosnode info/:查看节点
  • catkin_make:编译整个src目录。要先cd到catkin_ws才能输入该命令(才有效)
  • catkin_ws/src/所有功能包/src(源文件)
  • 创建功能包要先进入src
  • 创建ROS程序三步走,先创建功能包,再创建源文件(src下),再创建launch文件(launch目录下)
  • 源文件依附于节点哦
  • 源文件运行完毕,节点就kill了
  • 编译完功能包,才能运行

让机器人动起来

  • 方法:运行现有的ROS程序控制该机器人。
  • 一个ROS程序通过使用一些称为launch 文件的特殊文件来执行(执行ROS程序要通过使用.lanuch文件)

roslaunch turtlebot_teleop keyboard_teleop.launch

启动ROS(roslaunch)

roslaunch 是启动ROS程序的命令。用法如下:

roslaunch

该命令有两个参数:第一个是包含launch文件的功能包名称 ,第二个是launch文件的名称本身(位于该功能包内)。

功能包

ROS程序

ROS程序指的是所有cpp文件,python文件,配置文件,编译文件,启动文件和参数文件的其中一种。

ROS使用功能包组织其程序。可以把一个功能包想象成一个特定的ROS程序所包含的所有文件:所有cpp文件,python文件,配置文件,编译文件,启动文件和参数文件。

组织结构

所有这些文件按照下面的结构组织到一个功能包中:

launch 文件夹:包含launch文件
src 文件夹:源文件 (cpp, python)
CMakeLists.txt: 用于编译的cmake规则列表
package.xml: 功能包信息和依赖项

进入功能包(roscd)

  • 要进入某个功能包,可使用ROS命令 roscd。输入:

    roscd package_name

    移动到功能包 package_name 所处的路径。

  • 你想运行的每一个ROS程序都组织在一个功能包中
  • 你所创建的每一个ROS程序都必须组织在一个功能包中
  • 功能包是ROS程序的主要组织系统

launch文件

  • ROS使用launch文件来运行程序
  • 查看launch文件命令

    roscd turtlebot_teleop
    cd launch
    cat keyboard_teleop.launch

  • launch文件

<launch>
  <!-- turtlebot_teleop_key already has its own built in velocity smoother -->
  <node pkg="turtlebot_teleop" type="turtlebot_teleop_key.py" name="turtlebot_teleop_keyboard"  output="screen">
    <param name="scale_linear" value="0.5" type="double"/>
    <param name="scale_angular" value="1.5" type="double"/>
    <remap from="turtlebot_teleop_keyboard/cmd_vel" to="/cmd_vel"/>   <!-- cmd_vel_mux/input/teleop"/-->
  </node>
</launch>
  • 在launch文件中,有一些参数设置和重新映射的额外标签。现在,我们只需要关注节点标签。

  • 所有的launch文件包含在一个 标签中。在该标签中,你会看到一个 标签,在这里我们指定了如下参数:

    pkg=”package_name” # 包含所要执行的ROS程序代码的功能包名称
    type=”python_file_name.py” # 我们要执行的程序文件的名称
    name=”node_name” # 启动Python文件的节点名称
    output=”type_of_output” # 打印Python文件输出的通道

创建功能包(catkin_create_pkg)

创建功能包时,我们需要一个ROS工作空间,也即 catkin 工作空间. catkin 工作空间是你电脑硬盘上的一个目录,你的ROS 功能包必须位于其中以便能够被ROS用到。通常, catkin 工作空间目录简写为 catkin_ws

  1. 在shell中输入roscd进入catkin_ws。你会发现你被带进一个catkin_ws/devel 目录中。由于你想进入的是工作空间,所以输入cd .. 退回到上一层目录,停在/home/user/catkin_ws

  2. 在该工作空间中,有一个目录叫做src。该src文件夹将包含创建的所有功能包每当你想创建一个新的功能包时,你必须在该目录中(catkin_ws/src)。在 WebShell输入 cd src 进入源目录

  3. 创建第一个功能包

catkin_create_pkg my_package rospy
该指令将在 src 目录下创建一个包含有几个文件的功能包

指令用法

catkin_create_pkg

package_name 是你想要创建的功能包的名称,package_dependencies 是该功能包所依赖的其他ROS功能包的名称

验证功能包创建成功与否(rospack)

  • rospack list: 列出ROS系统中所有的功能包。
  • rospack list | grep my_package:从ROS系统所有的功能包中过滤出名为 my_package的功能包。
  • roscd my_package: 切换到功能包 my_package所在硬盘上的位置。

第一个ROS程序

  1. 在功能包my_package的 src 目录下创建一个Python文件
  2. 在功能包 my_package中创建一个launch目录
  3. 在launch目录中创建一个新的launch文件
  4. 执行roslaunch命令来启动你的程序

强制ROS刷新其功能包列表(rospack)

ROS检测不到刚创建的功能包,因此你无法通过roslaunch启动它。这种情况下,你可以使用下面的命令强制ROS刷新其功能包列表:

rospack profile

simple.py

#! /usr/bin/env python 
# -*- coding:utf-8 -*-
# 该行语句确保所使用的解释器是你的环境路径中的第一个
# 每一个Python文件顶部都需要以这一行语句开始

import rospy # 导入rospy——一个ROS的Python库

rospy.init_node('ObiWan') # 初始化一个名为ObiWan的节点

print "Help me Obi-Wan Kenobi, you're my only hope" # 一个简单的Python输出

注:如果你的Python文件是通过终端创建的,可能会出现没有执行权限的情况。这种情况下,ROS就无法找到它。此时,你可以输入命令 chmod +x name_of_the_file.py赋给该文件执行权限

检测与赋予文件权限

  • 要检查一个文件的权限,可在它所处的目录中运行下面的命令:

    ls -la

    • -rw-rw-r- 表示只有 读(r) 和 写e(w) 的权限,而没有执行的权限(用 x 表示)
  • 输入命令 chmod +x name_of_the_file.py赋给该文件执行权限

ROS节点

rosnode查看节点

在刚才的代码中,你初始化了一个ROS节点,但是什么是节点? ROS节点就是ROS创建的程序。查看一台电脑上正在运行的节点,可使用ROS命令:

  • rosnode list

Python程序结束时,节点也就被“kill”掉了

更新Python文件

#! /usr/bin/env python

import rospy

rospy.init_node("ObiWan")
rate = rospy.Rate(2)               # We create a Rate object of 2Hz
while not rospy.is_shutdown():     # Endless loop until Ctrl + C
   print "Help me Obi-Wan Kenobi, you're my only hope"
   rate.sleep()                    # We sleep the needed time to maintain the Rate fixed above

# This program creates an endless loop that repeats itself 2 times per second (2Hz) until somebody presses Ctrl + C
# in the Shell

显示节点信息

  • rosnode info /ObiWan

编译功能包(catkin_make)

创建功能包时,你通常需要编译它,这样它才能运行。ROS编译功能包的命令是:

catkin_make
该命令将编译整个 src目录,并且 它需要被发行到你的catkin_ws目录才能工作。这是强制的。 如果你试图从另一个目录编译,行不通。

catkin_make –only-pkg-with-deps
<>不用书写,该命令只编译指定的功能包及其依赖项

参数服务器

参数服务器是ROS用来存储参数的一个 词典。这些参数供节点在运行时使用,通常用于静态数据,例如配置参数

  • 获取参数列表,运行:
    rosparam list

  • 获取特定参数的值,输入:
    rosparam get

  • 设置一个参数的值,输入:
    rosparam set

Roscore

要想使一切工作,我们需要运行一个roscore。roscore是管理整个ROS系统的主进程 。为了使ROS能够正常工作,始终需要先运行roscore。启动roscore的命令是:
roscore

ROS环境变量

为了正常工作,ROS使用了一套Linux系统环境变量。你可以输入如下命令查看这些变量:

export | grep ROS

  • 最重要的变量是 ROS_MASTER_URI 和 ROS_PACKAGE_PATH。

  • ROS_MASTER_URI -> 包含被执行的ROS核心的url。通常为你的电脑 (localhost)。

  • ROS_PACKAGE_PATH -> 包含你硬盘上存放ROS功能包的路径。

什么是ROS

ROS是一个可以使我们进行本章内容介绍的一个框架。它用来管理所有的进程以及它们之间的通信

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值