ROS系统(一)

ROS系统(一)

  • ROS文件系统介绍
      • 文件系统工具
            • rospack
            • roscd
            • rosls
      • TAB自动补全
  • 创建ROS工作空间
  • 创建ROS程序包
      • catkin程序包的组成
      • 创建catkin程序包
      • 程序包依赖关系
      • 自定义package.xml
  • 编译ROS程序包
  • 理解ROS节点
    • 先决条件
    • 图的概念描述
      • 客户端
  • 理解ROS话题
      • ROS Topics

ROS文件系统介绍

Package:软件包,ROS应用程序代码的组织单元。每个软件包都可包含程序库、可执行文件、脚本或其他手动创建文件。

Manifest(package.xml):清单,对“软件包”信息做描述,定义软件包相关元信息之间的依赖关系(版本、维护者、许可协议等)。

文件系统工具

rospack

获取软件包的相关信息
用法:rospack find [包名称]

roscd

是rosbash命令集的一部分,允许直接切换(cd)工作目录到某个软件包或软件集当中。
用法:roscd find [本地名称[/子目录]]
可用pwd输出当前工作目录。
roscd只能切换到在 ROS_PACKAGE_PATH 环境下的软件包路径。
echo $ROS_PACKAGE_PATH查看 ROS_PACKAGE_PATH 包含的路径,每条路径用冒号:分隔。
roscd log可切换到ROS保存日记文件的目录下。(若没执行过ROS程序,会报错)

rosls

是rosbash命令集的一部分,允许直接按软件包名称,而不是绝对路径执行ls命令。用法:rosls [本地包名称[/子目录]]

TAB自动补全

当软件包过长时,用 TAB键自动补全。
想查看所有已安装列表时,用roscd 和 两次TAB键可以实现。

创建ROS工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make

第一次运行时,会在src中创建 CMakeLists.txt 的链接
若使用python 3时,第一次创建用

catkin_make  -DPYTHON_EXECUTABLE=/usr/bin/python3

新生成setup.bash文件

source devel/setup.bash

需确保ROS_PACKAGE_PATH环境变量包含你的工作空间目录,查看方式为:

echo $ROS_PACKAGE_PATH

创建ROS程序包

catkin程序包的组成

(1)必须包含catkin compliant package.xml文件。
(age.xml文件提供有关程序包的元信息)
(2)必须包含一个catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必须包含一个对CMakeList.txt文件的引用。
(3)每个目录下只能有一个程序包
程序包格式为:

my_package/
     CMakeLists.txt
     package.xml

创建catkin程序包

1.cd ~/catkin_ws/src进到catkin工作空间中src目录下
2. catkin_create_pkg 创建新的程序包名 这个程序包依赖包例:std_msgs rospy roscpp
这将会创建一个名为新程序包名的文件夹,这个文件夹里面包含一个package.xml文件和一个CMakeLists.txt文件。这两个文件都自动包含了部分执行catkin_create_pkg命令时提供的信息。

程序包依赖关系

  1. 一级依赖:
    程序函数依赖包可以用rospack depends1 程序包名来查看。
    将依赖包保存在package.xml文件中。
 roscd beginner_tutorials
 cat package.xml
  1. 间接依赖
    例: rospack depends1 rospy
    用rospack可递归检测出所有依赖包 rospack depends 程序包名

自定义package.xml

  1. 描述标签:
<description>The beginner_tutorials package</description>
  1. 维护者标签
    可以让其他人联系程序包的相关人员。至少需要填写一个维护者名称,还应在标签Email属性中填写邮箱地址
 <maintainer email="[email protected]">user</maintainer>
  1. 许可标签
    一些常见的开源许可协议有BSD、MIT、Boost Software License、GPLv2、GPLv3、LGPLv2.1和LGPLv3。
    例:
 <license>BSD</license>
  1. 依赖项标签
    这些依赖项分为build_depend、buildtool_depend、run_depend、test_depend。
    除了catkin中默认提供的buildtool_depend,所有我们列出的依赖包都已经被添加到build_depend标签中。
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
 

因为在编译和运行时我们需要用到所有指定的依赖包,因此还需要将每一个依赖包分别添加到run_depend标签中。

编译ROS程序包

  1. 先source环境配置(setup)文件
 source /opt/ros/groovy/setup.bash
cd ~/catkin_ws
catkin_make 

切换到catkin workspace 并查看src文件夹,可以看到一个名为beginner_tutorials的文件夹。

cd ~/catkin_ws/
ls src

使用catkin_make编译

理解ROS节点

先决条件

  1. 先用rosversion -d 查本地ros版本
  2. sudo apt-get install ros-本机安装ros版本-ros-tutorials安装一个轻量级的模拟器

图的概念描述

  1. Nodes节点:一个节点为一个可执行文件,可以通过ROS与其它节点进行通信。或接收信息。也可以提供或使用某种服务
    是一个能执行特定工作的工作单元,并能相互通信,从而实现机器人整体功能。
  2. messages信息:一种ROS数据类型,用于订阅或发布一个话题
  3. Topics话题:节点可以发布消息到话题,也可以订阅话题以接收消息。
  4. Master字节管理器:ROS名称服务 ,可以帮助节点找到彼此。
  5. rosout: ROS中相当于stdout/stderr。是一个用于收集和记录节点调的节点。
  6. roscore:主机+ rosout + 参数服务器
    是运行ROS程序之前的命令。
    如果 roscore 运行后无法正常初始化,很有可能是存在网络配置问题,修改该文件夹的用户归属关系:
 sudo chown -R <your_username> ~/.ros

客户端

ROS客户端库允许使用不同编程语言编写的节点之间互相通信:

  • rosnode

rosnode list: 查看当前运行节点的名称
rosnode info/指定节点 返回特定节点信息

  • rosrun
    允许使用包名直接运行一个包内节点
rosrun [package_name] [node_name]

例:重新打开一个终端

rosrun turtlesim turtlesim_node

可以看到 turtlesim 窗口。
ROS可以通过命令行重新配置名称。
关闭 turtlesim 窗口停止运行节点 (或者回到rosrun turtlesim终端并使用ctrl-C),重新运行并改变节点名:

rosrun turtlesim turtlesim_node __name:=my_turtle

若仍有/turtlesim,则用rosnode cleanup 删除

可以使用ping来测试rosnode ping my_turtle

理解ROS话题

  1. 确保roscore运行
  2. 在新的终端中运行rosrun turtlesim turtlesim_node
  3. 再开一个新的终端:运行rosrun turtlesim turtle_teleop_key,可以通过键盘来控制turtle的运动。

ROS Topics

urtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来互相通信的。turtle_teleop_key在一个话题上发布按键输入消息,而turtlesim则订阅该话题以接收该消息。

  1. 在新的终端中运行rosrun rqt_graph rqt_gra看节点通信图
    2.rostopic 获取有关ROS话题信息
    rostopic -h查看rostopic子命令
    rostopic echo [topic]显示在某个话题上发布的数据。
    当你按下向上方向键时应该会看到linear信息。
    需要刷新一下ROS graph(rosrun rqt_graph rqt_gra)。可以看到rostopic echo(红色显示部分)也订阅了turtle1/command_velocity话题。
    打开新终端:
    rostopic list能够列出所有当前订阅和发布的话题。
    rostopic list -h可以查看一下list子命令需要的参数
    rostopic list -v会显示出有关所发布和订阅的话题及其类型的详细信息

你可能感兴趣的:(ROS系统,操作系统,自动驾驶)