ROS进阶学习手记 10 - 搭建自己的TurtleBot(2)- Using iRobot Roomba as the Driving Base

ROS进阶学习手记 10 - 搭建自己的TurtleBot(2)- Using iRobot Roomba as the Driving Base

使用iRobot Roomba 5xx/6xx/7xx作为turtlebot的驱动底盘

 

    要略过的一些内容:

参考《ROS by Example _ Hydro _ Vol1》书中所述,实现到“7.5  Sending Twist Messages to a Real Robot

中间的过程就按书中来进行即可。涉及到的比如设备驱动、ROS网络配置 等内容可参考本博客前的相关文章。

    要在这里讨论的问题:

         在 roslaunch rbx1_bringup turtlebot_minimal_create.launch 这个命令运行时,PC(my_robot1)可以接收cmd_vel消息,并通过串口驱动 Create2® 。

         这里调用的顺序是什么?启动了哪些nodes? 参数是如何设置的?
         我们运行了-v 选项的 roslaunch 命令以后,得到如下的状态打印:一行行来分析【见文末附录1:turtlebot_minimal_create.launch文件的执行记录分析】
         这里面主要的操作就是2个:

  • 1. 设置node运行前需要设置的参数parameters 
  • 2. 运行nodes

关于.launch 文件们

turtlebot_minimal_create.launch 这个launch文件是我们驱动iRobot_Roomba底盘时首先要运行的,显然是很重要的,看看它的层次结构:

1. 标签

首先我们熟悉一下launch文件的tags-标签们:

  • <arg name="base"       default="create"/>  
    这是一个argument标签,表示声明一个参数,后面name指定了参数名为“base”, default指定了它的默认值"create"
  • <param name="/use_sim_time" value="$(arg simulation)"/>
    这是一个ros_parameter标签,即ROS程序运行时需要输入的参数,后面name指定了参数名为“/use_sim_time”, value指定了它的赋值,此地是调用前面 arg name="simulation" 的argument的值 采用了$ 符号。
  • <include file="$(find turtlebot_bringup)/launch/includes/robot.launch.xml">
    引用Include标签,意思引用外部的launch文件或xml文件。 $(find package_name)这里是一个调用ROS外部包的写法,意思robot.launch.xml文件是在turtlebot_bringup这个ROSpackage下面的。ps:是不是很简单?但是在</include>之前还有很多arg标签,这个是专门为所引xml文件配置参数的用法。
  • <node pkg="create_node" type="turtlebot_node.py" name="turtlebot_node" respawn="true" args="--respawnable">
    node标签,节点标签,这个可能是在某个xml文件中有用到,也很常用。比如tb_create_mobile_base.xml文件里,开了create_node 这个包下的 turtlebot_node这个节点。并为它配置了一些属性(respawn-重新生成) ,及参数(如:<param name="sensor_timeout" value="1.0"/>),还有remap参数,即重映射参数标签
  • <remap from="cmd_vel" to="mobile_base/commands/velocity" />
    remap parameter重映射参数标签,就是重新映射一下node运行时的参数名,比如A node发布了 topic_a 但 B_node的代码里写的是subcribe到topic_A, 此时就要把topic_a重映射成topic_A ,以便让B_node能够听到那个topic上的message.
  • 别的就涉及到时自己google咯~~

2. 调用关系


这里我逐层来分析launch 文件:

【turtlebot_minimal_create.launch】

  • 配了一堆参数args,指定了base, battery, stacks, 3d_sensor, simulation;
    声明一个参数/use_sim_time
  • 引用了一个外部xml文件:【/opt/ros/hydro/share/turtlebot_bringup/launch/includes/robot.launch.xml】并为它配了参数
    • 配了一堆参数
    • 又引用了一堆xml文件:$(find turtlebot_bringup)/launch/includes/description.launch.xml
    • 这里面主要是涉及到对机器人外观的解释-urdf的一些操作,关于urdf需要读者以后自行去学习ROS wiki,暂时不展开。
    • 除此之外,还配了关于robot_name/robot_type 等的参数,涉及到启动俩nodes: robot_state_publisher&diagnostic_aggregator
      • 具体可以搜它们的功能,还涉及到yaml配置文件里配了很多与这俩节点有关的参数,后面会慢慢学到yaml的用法。


  • 引用了一个外部xml文件:【/home/exbot/catkin_ws/src/rbx1/rbx1_bringup/launch/includes/tb_create_mobile_base.launch.xml】并为它配了参数

    • 一来就启动了一个重要的node: node pkg="create_node" type="turtlebot_node.py" name="turtlebot_node"
      • 就是它负责调用create_driver这个驱动程序(后面会学到),负责和驱动程序通信,也和上层那些功能nodes通信,承上启下的作用。
        很重要。
    • 又来启动一个node: <node pkg="create_node" type="kinect_breaker_enabler.py" name="kinect_breaker_enabler"/>
      • 引用orangeheadlxm的评论:
         kinect_breaker_enabler.py里是写了一个客户端,其对应的服务器写在了turtlebot_node.py里。它们的作用是当irobot通过SCI和上位机连接上时,把irobot设置为full模式,若未连接上则返回错误并且客户端继续向服务器请求。把response = service_proxy(3)中的3改为1或2还可以把irobot设置成其他模式。
    • 又来启动一个node:<node pkg="robot_pose_ekf" type="robot_pose_ekf" name="robot_pose_ekf">
      • 这是关于robot_pose_ekf包的内容,自行wiki,主要意思是使用odometry + gyroSensor的数据来估计机器人的位置。
      • refer: http://wiki.ros.org/robot_pose_ekf
      • When you're using ROOMBA rather than the CREATE as the moving base of your turtlebot, you need to read this wiki before adding your own gyro sensor.
        也很重要!
    • 又来启动一个node:<node pkg="nodelet" type="nodelet" name="mobile_base_nodelet_manager" args="manager"/>
      • 这是nodelet包下的内容,这里不展开,主要用于 velocity commands multiplexer
      • 与它平行还启动了一个node:<node pkg="nodelet" type="nodelet" name="cmd_vel_mux",这里不展开,主要用于 velocity commands multiplexer
    • 与上一个node平行还启动了一
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值