建立GAZEBO中四轮小车car_gazebo
所有的伟大,源于一个勇敢的开始!
1.总图( world ,car_gazebo )
2. car_gazebo.xacro
3.gazebo_diffdrive.launch
4.ros_control
ros和Gazebo原来是一体的,现在是两个相互独立的部分,他们之间采用ros_control进行通信。
Controller Manager:每个机器人可能有多个controller,所以这里有一个控制器管理器的概念,提供一种通用的接口来管理不同的controller。controller manager的输入就是ROS上层应用的输出。
Controller:controller可以完成每个joint的控制,请求下层的硬件资源,并且提供了PID控制器,读取硬件资源接口中的状态,在发布控制命令。
Hardware Rescource:为上下两层提供硬件资源的接口。
RobotHW:硬件抽象层和硬件直接打交道,通过write和read方法来完成硬件的操作,这一层也包含关节限位、力矩转换、状态转换等功能。
Real Robot:实际的机器人上也需要有自己的嵌入式控制器,接收到命令后需要反映到执行器上,比如接收到位置1的命令后,那就需要让执行器快速、稳定的到达位置1。
4.1 gazebo中.xacro文件
4.1.1 Transmissions:就是机器人的传动系统,机器人每个需要运动的关节都需要配置相应的Transmission。
注释:Transmission接口采用SimpleTransmission ; Joints接口采用VelocityJointInterface(轮式)
4.1.2 Joint Limits是硬件抽象层中的一块,维护一个关节限位的数据结构,这些限位数据可以从机器人的URDF文件中加载,也可以ROS的参数服务器上加载(先用YAML配置文件导入ROS parameter server),这些限位数据不仅包含关节速度、位置、加速度、加加速度、力矩等方面的限位,还包含安全作用的位置软限位、速度边界(k_v)和位置边界(k_p)等等。
注释:本人没有用到
4.1.3 为了让Gazebo可以识别标签,还需要加载一个gazebo的ros_control插件
4.2 config文件(后续说明)
4.2.1 差分控制配置
4.2.2 joints配置
4.3 差分控制器 :diff_drive_controller
5.小结
在world环境中导入四轮小车,采用差分驱动形式。