欢迎使用CSDN-markdown编辑器

来源:互联网 发布:纪元1404 类似 知乎 编辑:程序博客网 时间:2024/05/17 21:55

启动小乌龟的命令

  • source /opt/ros/indigo/setup.bash

然后分别在三个终端下命令三段命令

  • 启动节点管理器 roscore
  • rosrun turtlesim turtlesim_node 打开仿真器
  • rosrun turtlesim turtle_teleop_key 控制方向

 功能包/软件包

  • turtlesim_node和turtle_teleop_key都属于turtlesim包
  • 使用rospack list可以获取所有已安装的ros软件包列表清单
  • 要找到一个软件包的目录使用rospack find命令: rospack find package-name
  • 支持tab补全
  • 查看软件包目录下的文件 rosls package-name
  • 访问某软件目录,可以将当前目录切换至此软件包目录 roscd package-name

节点管理器

  • ros是一个基本目标是使机器人专家设计的很多称为节点(node)的几乎相对独立的小程序能够同时运行。这些节点必须能够彼此通信。
    ros中实现通信的关键部分就是ros节点管理器。要启动节点管理器,使用如下命令:roscores
  • 一个合理的操作是在一个终端启动roscore,然后打开其他终端运行其他程序。一般不终止rosscore命令。

节点

  • 一旦启动roscore后,便可以有运行ROSc程序了,ROS程序的运行实例被称为节点(node)。
  • rosrun有两个参数,其中一个参数功能包的名字,第二个参数是改软件包中的可执行文件的名称
  • 通过节点管理器注册成为ROS节点发生在程序的内部,而不是通过rosrun命令
  • 查看节点列表 rosnode list
  • rosout节点是一个特殊的节点,通过roscore自动启动。其作用有点类似控制台的标准输出std::out
  • 要获得特定节点的信息,使用如下命令:
    • rosnode info node-name
    • 这个命令的输出包括话题列表,节点是这些话题的发布者或者订阅者
    • 包括服务列表:这些服务是改节点的提供的。
    • 其linux进程标示符,以及和 与其他节点的所有连接 
  • 终止节点 rosnode kill node-name
  • 如果用ctrl+c杀死节点,那么会导致已终止的节点仍会在rosnode列表中,可以使用rosnode cleanup删除

话题和消息

  • 消息传递的机制
    • 当一个节点想要分享信息时候,它将就会发布消息到对于的 一个或者多个话题中
    • 当一个节点啊想要接受信息时,它就会订阅它所需要的一个或者多个话题
    • ros节点管理器负责确保发布节点和订阅节点能找到对方,而且消息是直接地从发布节点传递到订阅节点,中间不经过节点管理器转交
  • 查看节点构成的计算图
    • ros系统中查看节点之间的发布-订阅关系输入命令rqt_graph,其中r表示ROS,qt指的是用来实现这个可视化程序的QT图形界面(GUI)工具包。
    • 在默认情况下,rqt_graph隐藏了其认为只在调试过程中使用的节点。
    • 远程操作不关心哪个程序订阅了它发布的cmd_vel消息,任何订阅了相关话题的程序都能自主选择是否响应这些命令
  • 消息与消息的类型
    • 获取当前活跃的话题使用如下命令 rostopic list
    • 查看某个话题上发布的消息,可以利用rostopic命令 rostopic echo topic-name,这条命令将会在终端里显示出指定话题里发布的任何消息。
    • 测量发布频率
      • 测量消息发布的频率以及这些消息所占用的带宽
        • rostopic hz topic-name
        • rostopic bw topic-name
        • 这些命令订阅的话题,并输出一些统计量,其中第一条命令输出每秒发布的消息数量,第二条输出每秒发布消息所占的字节量
    • 查看消息类型
      • rosmsg show message-type-name 比如 rosmsg show turtlesim/Color
      • 域(field),每行一个元素,每一个域都是由基本数据类型(列如:int8,bool,string)以及域名称定义。
      • 一个复合域是由简单的一个或者多个子域组合而成的,其中每一个子域也可能是另一个复合域或者独立的域,而且他们一般也是都由基本数据类型组成。
    • 用命令行发布消息
      • 利用rostopic命令工具:rostopic pub –r rate-in-hz topic-name message-type message-content  这条命令重复的按照指定频率给指定的话题发布指定的消息。 该命令最后的参数message-content应该按照顺序听消息类中所有域的参数值,例如: rostopic pub –r 1 /turtle1/cmd_vel geometry_msgs/Twist ‘[2,0,0]’ ‘[0,0,0]’
      • 上述的前面三个数字表示期望的位移线速度,后面三个数字表示期望的角速度。用单引号和中括号组织这些数字赋给他们对应的两个顶层复合域变量。最中要的两个是非0域--位移linear.x以及角度angular.z–是turtlesim重点关注的两个变量。其他4个变量对二维仿真俩说是不可能发生的。
      • -r后面的有两个模式一个是-l默认的锁存模式,只执行一次,但是会确保新的订阅者或收到消息,-1是以一定的时间周期发布消息。
      • -r可以替换成-f表示从文件中读取信息,或者从标准输入中读取,两种情况下,输入应该复合rostopic echo的输出格式
    • 理解消息类型的命名
      • 消息类型名总会包含一个斜杠,斜杠前面的名字是包含它的包:package-name/type-name
        例如: turtlesim/Color 消息类型按如下方式分解: turtlesim(功能包) + Color(类型名) = turtlesim/Color(消息类型)
    • 复杂的消息传递
      • rosrun turtlesim turtlesim_node __name:=A
      • rosrun turtlesim turtlesim_node __name:=B
      • rosrun turtlesim turtle_teleop_key __name:=C
      • rosrun turtlesim turtle_teleop_key __name:=D
      • 后面的参数__name 表示每个节点赋予了每个节点自己的默认名称,覆盖是必要的,因为ros节点管理器不允许多个节点拥有相同的名称。
  • 节点直接的松耦合关系
    • 对于绝大多数的设计精巧的ROS节点–是松耦合的,每个节点都不需要显式知道其他节点的存在与否,他们的唯一交互是间接地发生在基于话题和消息的通信层。
    • ROS程序最关键的设计特性之一:复杂任务分解成可重用的小模块
    • ros为更加直接的一对一通信提供了一种称为服务(services)的机制。
  • 问题检查
    • 当ros没有预期运行时,可以使用一个命令行工具 roswtf,该命令可以不带参数运行,这条命令和深入的检查,包括检测你的环境变量、安装文件以及运行节点,任何节点是否出现意外的挂起或者终止,以及活跃的节点是否正确地和其他节点相链接。可惜是,由roswtf检测的完整列表只能在python中才能找到
原创粉丝点击