Turtlebot代码解读-turtlebot_create

Turtlebot代码解读-turtlebot_create

说明:

  • 介绍create底盘,包括模型,驱动,节点

文件树及说明:

├── create_description                #模型目录
│   ├── CHANGELOG.rst
│   ├── CMakeLists.txt
│   ├── meshes                        #3D文件
│   │   ├── create_body.dae
│   │   └── create_body.tga
│   ├── package.xml
│   └── urdf                          #模型URDF
│       ├── create_gazebo.urdf.xacro  #增加gazebo部分定义,在create.urdf.xacro中调用
│       └── create.urdf.xacro         #通用URDF模型定义
├── create_driver                     #驱动目录
│   ├── CHANGELOG.rst
│   ├── CMakeLists.txt
│   ├── package.xml
│   ├── rosdoc.yaml                   #Epydoc文档生成器配置
│   ├── setup.py
│   └── src
│       └── create_driver             #驱动目录
│           ├── create_driver.py      #驱动python实现
│           └── __init__.py
├── create_node                          #节点目录
│   ├── cfg
│   │   └── TurtleBot.cfg                #可利用dynamic_reconfigure配置参数定义
│   ├── CHANGELOG.rst
│   ├── CMakeLists.txt
│   ├── msg                              #消息定义
│   │   ├── BatteryState.msg             #电池状态消息定义
│   │   ├── Drive.msg                    #驱动消息定义
│   │   ├── RawTurtlebotSensorState.msg  #原始传感器状态消息定义
│   │   ├── RoombaSensorState.msg        #Roomba传感器状态消息定义
│   │   ├── TurtlebotSensorState.msg     #Turtlebot传感器消息定义
│   │   └── Turtle.msg                   #turtle消息定义
│   ├── nodes
│   │   └── turtlebot_node.py            #turtlebot功能主要实现
│   ├── package.xml
│   ├── rosdoc.yaml
│   ├── scripts                          
│   │   ├── kinect_breaker_enabler.py    #
│   │   └── load_calib.py                #自动校准
│   ├── setup.py
│   ├── src
│   │   └── create_node                  #节点实现源码目录
│   │       ├── covariances.py           #协方差矩阵,odom-pose  odom-twist 
│   │       ├── create_sensor_handler.py #create传感器处理类
│   │       ├── diagnostics.py           #仪表盘实现,显示传感信息
│   │       ├── gyro.py                  #罗盘实现
│   │       ├── __init__.py
│   │       ├── robot_types.py           #robot类型处理,create或roomba,对应不同的底盘传感器
│   │       ├── roomba_sensor_handler.py #roomba传感处理类
│   │       └── songs.py                 #声音处理
│   └── srv                              #服务目录
│       ├── SetDigitalOutputs.srv        #设置数字输出服务
│       └── SetTurtlebotMode.srv         #设置turtlebot模式服务
├── README.md
└── turtlebot_create
    ├── CHANGELOG.rst
    ├── CMakeLists.txt
    └── package.xml
    

重要知识点:

create_driver/rosdoc.yaml

  • Epydoc,是一个开源的跨平台的Python模块文档自动生成工具
  • 参考:
  • http://epydoc.sourceforge.net/

create_driver/src/create_driver/create_driver.py

  • iRobot公司的Roomba串行控制接口(SCI)和turtlebot 开放接口(OI)。

  • turtlebot.py是一个PyRobot的分支

  • PyRobot最初是基于iRobot公司开发openinterface.py

  • 许多代码来自openinterface.py的,特别是那些里面描述的规范。

  • 代码部分包含的规范文本直接从Roomba SCI规格手册和turtlebot开放接口规范复制过来的。

  • SerialCommandInterface类,是PySerial的上层封装,为iRobot的SCI而设计。

  • 因为SCI基于OI,serialcommandinterface类也用于OI

  • SCI是OI的一个子集,PyRobot首先在Roomba类定义了Roomba的功能,然后在turtlebot类扩展了turtlebot的功能。

  • Roomba类,是SerialCommandInterface类封装定义了Roomba的功能,主要是小车运动相关功能

  • Turtlebot类集成Rooma类,扩展了turtlebot的功能,

create_node/cfg/TurtleBot.cfg

  • 可利用dynamic_reconfigure配置参数定义
  • 定义波特率
  • 定义驱动模式,twist,turtle,drive
  • 定义陀螺仪类型
  • 定义里程修正范围

create_node/nodes/turtlebot_node.py

  • Turtlebot node节点是create_driver的ROS封装,实现ROS相关功能。
  • self.robot = Turtlebot() 实例化create_driver驱动
  • self._init_params() self._init_pubsub() 实例化参数和发布器和订阅器
  • self.sensor_state = TurtlebotSensorState()实例化传感器
  • dynamic_reconfigure.server.Server(TurtleBotConfig, self.reconfigure) 加载动态配置参数
  • self._pos2d = Pose2D() # 2D pose for odometry 里程计
  • self._gyro = TurtlebotGyro() 实例化陀螺仪

create_node/src/diagnostics.py

  • 仪表盘实现
  • 定义:充电状态,充电来源,数字输出,OI模式(passive safe full)
  • 收集:节点状态,节点信息,电池信息,充电来源,跌落传感器,虚拟墙传感器,陀螺仪传感器,数字IO,

create_node/src/gyro.py

  • 陀螺仪实现
  • 发布imu/data和imu/raw话题

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: turtlebot代码解读