ROS系统(四)

手动创建ROS package

转至catkin workspace,并确认已经刷新了setup文件。手动创建一个名为foobar的package:

mkdir -p src/foobar
cd src/foobar

在 foobar/package.xml文件里添加如下语句:

<package>
  <name>foobar</name>
  <version>1.2.4</version>
  <description>
  This package provides foo capability.
  </description>
  <maintainer email="foobar@foo.bar.willowgarage.com">PR-foobar</maintainer>
  <license>BSD</license>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>roscpp</build_depend>
  <build_depend>std_msgs</build_depend>

  <run_depend>roscpp</run_depend>
  <run_depend>std_msgs</run_depend>
</package>

可以用rospack find foobar命令找到它。
在 foobar/CMakeLists.txt文件里输入:

cmake_minimum_required(VERSION 2.8.3)
project(foobar)
find_package(catkin REQUIRED roscpp std_msgs)
catkin_package()

管理系统依赖项

ROS packages有时会需要操作系统提供一些外部函数库,这些函数库就是所谓的“系统依赖项”。
ROS packages必须在配置文件中声明他们需要哪些系统依赖项。查看turtlesim package的配置文件:roscd turtlesim
rosdep 是一个能够下载并安装ROS packages所需要的系统依赖项的小工具 使用方法:rosdep install [package]。并在完成后退出。

ROS在多机器人上的使用

ROS设计是分布式计算。
它允许实时分配计算量以最大化的利用系统资源。(有一个特例——驱动节点必须运行在跟硬件设备有物理连接的机器上)。

  1. 只需要一个master,在一个机器上运行。所有节点都必须通过配置 ROS_MASTER_URI连接到同一个master。
  2. 任意两台机器间任意两端口都必须要有完整的、双向连接的网络。
  3. 每台机器都必须向其他机器广播其能够解析的名字。

跨机器运行的 Talker / listener

在两台机器上分别运行talker / listener, 主机名分别为 marvin 和 hal.登陆主机名为marvin的机器,需要用ssh marvin同样也可以登陆hal.

  1. 启动 master
    我们需要选择一台机器运行master,这里我们选hal. 启动master的第一步是:
ssh hal
roscore
  1. 启动 listener
    机器hal上启动listener, 并配置ROS_MASTER_URI,就可以使用刚刚启动的master了:
ssh hal
export ROS_MASTER_URI=http://hal:11311
rosrun rospy_tutorials listener.py
  1. 启动 talker
    在marvin 机器上启动talker,同样通过配置ROS_MASTER_URI来使用hal机器上的master
ssh marvin
export ROS_MASTER_URI=http://hal:11311
rosrun rospy_tutorials talker.py

可以看到机器hal上的listener正在接收来自marvin机器上talker发布的消息。
talker / listener启动的顺序是没有要求的, 唯一的要求就是master必须先于节点启动。

  1. 反向测试
    终止talker和listener的运行,但仍然保留master在机器 hal上,然后让talker和listerner交换机器运行。

首先,在机器marvin启动listerner:

ssh marvin
export ROS_MASTER_URI=http://hal:11311
rosrun rospy_tutorials listener.py

然后在机器hal上启动talker:

ssh hal
export ROS_MASTER_URI=http://hal:11311
rosrun rospy_tutorials talker.py

自定义消息

将.msg文件放到一个程序包的msg文件夹下即可自定义一个消息类型。
消息类型都被归属到与package相对应的域名空间下。
例:
C++:

#include <std_msgs/String.h>

std_msgs::String msg;

python:

from std_msgs.msg import String

msg = String()

若在其他package中定义消息类型,应添加下列语句:

<build_depend>name_of_package_containing_custom_msg</build_depend>
<run_depend>name_of_package_containing_custom_msg</run_depend>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值