码丁实验室,一站式儿童编程学习产品,寻地方代理合作共赢,微信联系:leon121393608。
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话题
 

