机器人设置要求:
机器人使用tf发布坐标框架信息
接收sensor_msgs / LaserScan或sensor_msgs / PointCloud消息
使用tf和nav_msgs / Odometry发布里程信息
同时还接收速度命令以发送到底盘
一搭建机器人实现执行机构、驱动系统、内部传感系统、控制系统(可以基于笔记本实现)
- 执行机构 两个直流电机带动主动轮,配合从动轮实现机器人的移动
- 驱动系统是一块主控版,集成了电机驱动、电源驱动、传感器接口等底层驱动功能
- 电源 提供电力
- 电机驱动 作用1是将上层下达的控制信号转换成电机需要的电源信号,作用2是接受控制系统的运动命令,实现对电机的闭环驱动控制
- 传感器接口集成到主板上处理超声波、里程计等传感器信号
- 内部传感器主要是编码器,通过检测机器人两个主动轮单位时间转动的圈数,测量机器人的速度、角度、里程等信息
- 控制系统
- 单处理器 PC 控制:通过USB串口与机器人主控通信
- 多处理器 PC+嵌入式系统:机器人上搭载嵌入式系统作为本体的控制系统,再配置PC实现远程监控、图形化显示
- 嵌入式平台有很多,嵌入式平台中同样搭载ubuntu系统运行ROS,主要实现与机器人相互通信、外部传感器的数据采集,其他设备的控制系统的基础功能
- PC端运行高性能的上层ROS功能包
- 两者通过无线网络通信
- 控制系统与机器人通信 : 控制系统与机器人驱动系统之间通过串口通信,控制系统下发机器人运动的速度指令,机器人上传里程计等传感器信息。为了实现控制系统与机器人的通信,需要了解通信协议。
二 分布式多机通信
PC+机器人
步骤:
- 设置ip ,PC和机器人处于同一局域网下,ifconfig查看计算机局域网ip地址
- 在两台计算机系统的/etc/hosts文件中加入对方的IP地址和计算机名
- 设置完后,使用ping命令测试网络是否连通
- 设置ROS相关的环境
- 如图所示
三 、写一个控制器端节点 可以给底盘发送速度、可以读数据
了解通信协议之后,现在可以写一个控制器端节点,实现订阅速度控制指令,通过串口发送速度控制指令,实现机器人的运动,通过串口读取编码器的信息,发送机器人里程计消息。ros_exploring-master/robot_mrobot/mrobot_bringup/src/mrobot_bringup.cpp
(我观察了mrobot和riki的代码,实现与底层的通信,要写robot.h 、 robot.cpp、robot_node.cpp )
robot.h中要定义这个机器人类,robot.cpp实现这个类,robot_node.cpp 初始化(启动)这个机器人。
感觉不管怎么写,都是这个层次。
四、定位
五、规划
六、导航
里程计
里程计包括两个方面的信息:位姿(位置和转角)、速度(前进速度和转向速度)
整个移动机器人的控制结构如下图所示,(可能是建图)其中base_controller节点将订阅的cmd_vel信息通过串口或其它通信接口发送给下位机(嵌入式控制板)。下位机中根据机器人运动学公式进行解算,将机器人速度转换为每个轮子的速度,然后通过CAN总线(或其它总线接口)将每个轮子的转速发送给电机驱动板控制电机转动。电机驱动板对电机转速进行闭环控制(PID控制),并统计单位时间内接收到的编码器脉冲数,计算出轮子转速。
定位