ROS入门(一)

Course1 介绍ROS

概述:

  • ROS的结构和原则
  • ROS的主机,节点,主题和消息
  • 简单控制台命令
  • Catkin 工作空间和创建系统
  • ROS Launch
  • Gazebo模拟器

1. ROS的结构和原则

ROS概念:ROS = Robot Operating System,包括:
1. 通道:ROS提供了一种发布-订阅式的通信框架用以简单、快速地构建分布式计算系
2. 工具:ROS提供了大量的工具组合用以配置、启动、自检、调试、可视化、登录、测试、终止分布式计算系统;
3. 能力:具有控制,规划,预测,定位操纵等功能;
4. 生态系统:ROS的支持与发展依托着一个强大的社区。ros.org尤其关注兼容性和支持文档,提供了一套“一站式”的方案使得用户得以搜索并学习来自全球开发者数以千计的ROS程序包。

ROS历史
ROS系统是起源于2007年斯坦福大学人工智能实验室的STAIR项目与机器人技术公司Willow Garage的个人机器人项目(Personal Robots Program)之间的合作,2008年之后就由Willow Garage来进行推动。如今已被许多的学校公司所使用。为机器人变成提供了实际标准(Defacto standard)

ROS原则
1. 点对点设计:ROS的点对点设计以及服务和节点管理器等机制可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。
2. 分布式设计:程序可以在多核计算机中运行,并且可以通过网络来通信。
3. 多语言:ROS现在支持许多种不同的语言,例如C++、Python、Octave和LISP,也包含其他语言的多种接口实现。语言无关的消息处理,让多种语言可以自由的混合和匹配使用。
4. 轻量级:鼓励将所有的驱动和算法逐渐发展成为和ROS没有依赖性单独的库。ROS建立的系统具有模块化的特点,各模块中的代码可以单独编译,而且编译使用的CMake工具使它很容易的就实现精简的理念。ROS基本将复杂的代码封装在库里,只是创建了一些小的应用程序为ROS显示库的功能,就允许了对简单的代码超越原型进行移植和重新使用。
5. 免费且开源:ROS大多数的源代码都是公开发布的。

ROS工作环境
定义当前工作区的上下文,默认工作区的导入如下:

source /opt/ros/kinetic/setup.zsh 

覆盖Catkin工作区:

cd ~/catkin_ws
source devel/setup.zsh

可以用如下命令来检查本地工作区:

echo $ROS_PACKAGE_PATH

2. ROS的主机,节点,主题和消息

ROS主机Master
用于管理节点间的通信,ROS Master 通过RPC(Remote Procedure Call Protocol,远程过程调用)提供了登记列表和对其他计算图表的查找。没有控制器,节点将无法找到其他节点,交换消息或调用服务。

开启Master命令:

roscore 

ROS节点Nodes
节点就是一些独立编译,执行运算任务的进程。ROS利用规模可增长的方式是代码模块化:一个系统就是典型的由很多节点组成的。在这里,节点也可以被称之为“软件模块”。我们使用“节点”使得基于ROS的系统在运行的时候更加形象化:当许多节点同时运行时,可以很方便的将端对端的通讯绘制成一个图表,在这个图表中,进程就是图中的节点,而端对端的连接关系就是其中弧线连接。

运行节点:

rosrun package_name node_name

查看激活节点列表:
rosnode list

检索有关节点的信息:

rosnode info node_name

ROS主题Topic
消息以一种发布/订阅的方式传递。一个节点可以在一个给定的主题中发布消息。一个节点针对某个主题关注与订阅特定类型的数据。可能同时有多个节点发布或者订阅同一个主题的消息。总体上,发布者和订阅者不了解彼此的存在。

查看激活主题:

rostopic list

订阅和打印一个主题的内容:

rostopic echo /topic

显示主题相关信息:

rostopic info /topic

ROS消息Message
虽然基于话题的发布/订阅模型是很灵活的通讯模式,但是它广播式的路径规划对于可以简化节点设计的同步传输模式并不适合。在ROS中,我们称之为一个服务,用一个字符串和一对严格规范的消息定义:一个用于请求,一个用于回应。
消息用来定义主题topic类型的数据结构,是整型,浮点型,布尔型,字符串等一系列结构进行压缩后,定义成*.msg文件。
查看主题类型:

rostopic type /topic

向topic发布一个消息:

rostopic pub /topic type args

3. 简单控制台命令

运行一个ROS的实例

开始:

roscore

运行一个发布者:talker:

rosrun roscpp_tutorials talker

查看激活节点列表:

rosnode list

显示有关talk节点的信息:

 rosnode info /talker

在talk节点的信息中我们可以看到它的主题:chatter,查看chatter的相关信息:

rostopic info /chatter

chatter主题类型:

 rostopic type /chatter

chatter主题信息内容:

rostopic echo /chatter

分析频率:

rostopic hz /chatter

运行一个订阅者:listener

rosrun roscpp_tutorials listener

发布自己的信息,即创建一个chatter话题下的发布者:

rostopic pub /chatter std_msgs/String "data: 'My own message.'"

4. Catkin 工作空间和创建系统

catkin 创建系统
catkin是ROS创建系统,用来生成可执行文件,库和接口。
(现在很多人建议用catkin build 来代替 catkin_make)
首先进入工作区:

cd ~/catkin_ws

然后创建一个包:

catkin build package_name

每当你创建一个新包时,都需要更新你的环境:

source devel/setup.zsh

在catkin创建的工作区中包含以下三个文件夹:
1. src:这个就是用来存放源码的地方,操作者在这里面进行编码,修改
2. build:用来存放缓存文件和一些中间文件,不用动
3. devel:(development)存放创建目标的地方(在存放之前安装),不用动

清除整个build和devel空间:

catkin clean

检查catkin空间创建情况:

catkin config

创建一个Cmake build类型来发布(Release):

catkin build --cmake-args-DCMAKE_BUILD_TYPE=Release

5. ROS Launch

Launch文件是ROS提供的,可以同时运行多个nodes的文件。Launch文件以一种特殊的XML格式编写,是*.launch文件。

运行一个launch文件:

roslaunch file_name.launch

从包中运行一个launch文件:

roslaunch package_name file_name.launch

launch文件结构(talker_listener)为例:

<launch>
    <node name="listener" pkg="roscpp_tutorials" type="listener" output="screen"/>
    <node name="talker" pkg="roscpp_tutorials" type="talker" output="screen"/>
</launch>

launch: 根元素
node: 用node标签来标明节点
name: 节点的名称
pkg: 包含节点的包的名字
type: 节点类型
output: 标明log信息的所在

range_world.launch(simplified)

<?xml version="1.0"?>
<launch>
    <arg name="use_sim_time" default="true"/>
    <arg name="world" default="gazebo_ros_range"/>
    <arg name="debug" default="false"/>
    <arg name="physics" default="ode"/>
    <group if="$(arg use_sim_time)">
        <param name="/use_sim_time" value="true" />
    </group>
    <include file="$(find gazebo_ros) /launch/empty_world.launch">
        <arg name="world_name" value="$(find gazebo_plugins)/
        test/test_worlds/$(arg world).world"/>
        <arg name="debug" value="$(arg debug)"/>
        <arg name="physics" value="$(arg physics)"/>
    </include>
</launch>

文件分析
创建重用launch文件:

<arg name="arg_name" default="default_value"/>

在文件中用argument:

$(arg arg_name)

当运行文件时可如下设置:

roslaunch launch_file.launch arg_name:=value

如果文件中包含项目中其他文件:

<include file="package_name"/>

寻找其他包的系统路径:

$(find package_name)

将参数传递给包含的文件:

<arg name="arg_name" value="value"/>

6. Gazebo模拟器

Gazebo是一个仿真环境(平台),可以进行三维机器人动力学仿真等,够模拟复杂和现实的环境中关节型机器人,很强大。
运行Gazebo:

rosrun gazebo_ros gazebo
event_listener.jsx 是一种用于React应用程序中的事件监听器组件。它可以帮助我们管理和处理用户交互时发生的事件。 在React中,我们通常使用事件监听器来捕捉和处理用户的操作。event_listener.jsx 提供了一种简洁而方便的方式来注册和管理这些事件监听器。 首先,我们需要在我们的组件中引入 event_listener.jsx。然后,我们可以使用它提供的方法来注册所需的事件监听器。例如,我们可以使用 `event_listener.addClickListener()` 来注册一个点击事件的监听器。 当用户执行对应的交互操作时,注册的监听器将被触发。我们可以通过传递一个函数作为参数来指定要执行的操作。这个函数将接收一个事件对象,我们可以使用它来获取有关事件的详细信息。 除了点击事件,event_listener.jsx 还提供了其他常见的事件类型,如鼠标移动、键盘输入等。我们可以根据实际需要选择合适的事件类型和方法进行监听。 使用 event_listener.jsx 的好处在于它能够实现事件的集中管理。我们可以在一个地方注册和处理所有事件,而不需要在每个组件中重复编写监听器。这样可以提高代码的可维护性和可扩展性。 总之,event_listener.jsx 是一种方便实用的事件监听器组件,可以帮助我们在React应用程序中管理和处理用户的交互操作。通过它,我们可以轻松地注册不同类型的事件监听器,并通过统一的方式处理这些事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值