什么是网站源码/网站营销网站营销推广
系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理
文章目录
- 系列文章目录
- 前言
- 一、ros_control目的
- 二、ros_control架构
- 1、控制器管理器
- 2、控制器
- 3、硬件抽象层
- 4、硬件资源
- 5、真实机器人的执行器
- 三、ros_control的Gazebo运动控制实现流程
- 1.gazebo 已经实现了 ros_control 的相关接口
- 2.在已经创建完毕的机器人模型,编写一个单独的 xacro 文件,为机器人模型添加传动装置以及控制器
- 3.将此文件集成进xacro文件
- 4.启动 Gazebo 并发布 /cmd_vel 消息控制机器人运动
- 5.Rviz查看里程计信息
前言
认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对ROS的ros_control控制中间件做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章
提示:以下是本篇文章正文内容
一、ros_control目的
用于仿真机器人和真实机器人连接的控制中间件,机器人仿真和真实环境区别是差了一个ros_control的功能包连接的区别
1、为开发者提供上层应用功能包和底层硬件的的控制连接的中间件【防盗标记–盒子君hzj】
2、包含一系列的控制接口、传动接口、硬件接口、控制器工具箱等等
方法一:使用ros_control功能包的接口(读写,write,read)
方法二:自己实现一个controller(其实不难的)【1、先关注moveit输出给我们什么信息(已经计算好的action信息,如速度,位置,加速度等)2、设计controller,使通讯驱动能达到action的要求,如插补的位置输出】
二、ros_control架构
ros_control其实是gazebo仿真中的一个插件
1、控制器管理器
作用:提供一种通用的接口来管理不同的控制器【防盗标记–盒子君hzj】
例子:有点像ros master
2、控制器
作用:读取硬件状态,,经过处理(PID算法等)发布控制指令,完成机械臂的每个关节的控制例子
(1)力控制器:joint_effort_controller
(2)位置控制器:joint_position_controller
(3)速度控制器:joint_velocity_controller
(4)状态控制器:joint_state_controller
3、硬件抽象层
作用:机器人硬件抽象层和硬件资源直接打交道,通过write和read方法完成硬件操作【防盗标记–盒子君hzj】
4、硬件资源
作用
为上下两层的指令做连接接口(做上层的控制指令接口,接受到信息后,做下层的控制接口)例子
用于连接摄像头、激光雷达,遥控器等传感器
使用USB、CAN等通讯接口和硬件资源层通讯
5、真实机器人的执行器
作用
执行受到的命令
三、ros_control的Gazebo运动控制实现流程
1.gazebo 已经实现了 ros_control 的相关接口
2.在已经创建完毕的机器人模型,编写一个单独的 xacro 文件,为机器人模型添加传动装置以及控制器
<robot name="my_car_move" xmlns:xacro="http://wiki.ros.org/xacro"><!-- 传动实现:用于连接控制器与关节 --><xacro:macro name="joint_trans" params="joint_name"><!-- Transmission is important to link the joints and the controller --><transmission name="${joint_name}_trans"><type>transmission_interface/SimpleTransmission</type><joint name="${joint_name}"><hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface></joint><actuator name="${joint_name}_motor"><hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface><mechanicalReduction>1</mechanicalReduction></actuator></transmission></xacro:macro><!-- 每一个驱动轮都需要配置传动装置 --><xacro:joint_trans joint_name="left_wheel2base_link" /><xacro:joint_trans joint_name="right_wheel2base_link" /><!-- 控制器 --><gazebo><plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so"><rosDebugLevel>Debug</rosDebugLevel><publishWheelTF>true</publishWheelTF><robotNamespace>/</robotNamespace><publishTf>1</publishTf><publishWheelJointState>true</publishWheelJointState><alwaysOn>true</alwaysOn><updateRate>100.0</updateRate><legacyMode>true</legacyMode><leftJoint>left_wheel2base_link</leftJoint> <!-- 左轮 --><rightJoint>right_wheel2base_link</rightJoint> <!-- 右轮 --><wheelSeparation>${base_link_radius * 2}</wheelSeparation> <!-- 车轮间距 --><wheelDiameter>${wheel_radius * 2}</wheelDiameter> <!-- 车轮直径 --><broadcastTF>1</broadcastTF><wheelTorque>30</wheelTorque><wheelAcceleration>1.8</wheelAcceleration><commandTopic>cmd_vel</commandTopic> <!-- 运动控制话题 --><odometryFrame>odom</odometryFrame> <odometryTopic>odom</odometryTopic> <!-- 里程计话题 --><robotBaseFrame>base_footprint</robotBaseFrame> <!-- 根坐标系 --></plugin></gazebo></robot>
3.将此文件集成进xacro文件
<!-- 组合小车底盘与摄像头 -->
<robot name="my_car_camera" xmlns:xacro="http://wiki.ros.org/xacro"><xacro:include filename="my_head.urdf.xacro" /><xacro:include filename="my_base.urdf.xacro" /><xacro:include filename="my_camera.urdf.xacro" /><xacro:include filename="my_laser.urdf.xacro" /><xacro:include filename="move.urdf.xacro" />
</robot>
4.启动 Gazebo 并发布 /cmd_vel 消息控制机器人运动
<launch><!-- 将 Urdf 文件的内容加载到参数服务器 --><param name="robot_description" command="$(find xacro)/xacro $(find demo02_urdf_gazebo)/urdf/xacro/my_base_camera_laser.urdf.xacro" /><!-- 启动 gazebo --><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="world_name" value="$(find demo02_urdf_gazebo)/worlds/hello.world" /></include><!-- 在 gazebo 中显示机器人模型 --><node pkg="gazebo_ros" type="spawn_model" name="model" args="-urdf -model mycar -param robot_description" />
</launch>
5.Rviz查看里程计信息
编写launch文件
<launch><!-- 启动 rviz --><node pkg="rviz" type="rviz" name="rviz" /><!-- 关节以及机器人状态发布节点 --><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" /><node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" /></launch>
添加rviz组件
【防盗标记–盒子君hzj】