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话题
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号