ROS Gazebo(四):ROS Control
来源:互联网 发布:js typeof5类型 编辑:程序博客网 时间:2024/04/30 07:07
如何设置模拟控制器来驱动机器人关节?
必须预先安装 ros_control, ros_controllers
。
一、RSO Control
ros_control 功能包以关节驱动器上的编码器或者输入值为关节状态的输入,通过闭环反馈(如PID)控制来控制输出(如力矩)。并通过transmissions来完成物理系统到关节位置、力矩等的映射。
1、控制器
控制器插件如下:
effort_controllers
–joint_effort_controller
–joint_position_controller
–joint_velocity_controllerjoint_state_controller
–joint_state_controllerposition_controllers
–joint_position_controllervelocity_controllers
–joint_velocity_controller
还可以创建自己的控制器
2、硬件接口
硬件接口如下:
- Joint Command Interfaces
–Effort Joint Interface
–Velocity Joint Interface
–Position Joint Interface - Joint State Interfaces
- Actuator State Interfaces
- Actuator Command Interfaces
–Effort Actuator Interface
–Velocity Actuator Interface
–Position Actuator Interface - Force-torque sensor Interface
- IMU sensor Interface
还可以创建自己的硬件接口
二、gazebo
1、ros_control 和 Gazebo 的数据流图
包括仿真、硬件、控制器和变换。
2、添加 transmission
组件
<transmission name="tran1"> <type>transmission_interface/SimpleTransmission</type> <joint name="joint1"> <hardwareInterface>EffortJointInterface</hardwareInterface> </joint> <actuator name="motor1"> <hardwareInterface>EffortJointInterface</hardwareInterface> <mechanicalReduction>1</mechanicalReduction> </actuator> </transmission> <transmission name="tran2"> <type>transmission_interface/SimpleTransmission</type> <joint name="joint2"> <hardwareInterface>EffortJointInterface</hardwareInterface> </joint> <actuator name="motor2"> <hardwareInterface>EffortJointInterface</hardwareInterface> <mechanicalReduction>1</mechanicalReduction> </actuator> </transmission>
<joint name="">
: URDF中关节的名称。
<type>
: 变换类型。
<hardwareInterface>
: 在标签<actuator> 和 <joint>
内。加载的硬件接口类型。
3、添加gazebo_ros_control
组件
<gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> <robotNamespace>/MYROBOT</robotNamespace> <robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType> </plugin></gazebo>
<robotNamespace>
:当前插件的名称空间,默认为机器人所在空间。
<controlPeriod>
:控制器更新的时间,默认为Gazebo时间
<robotParam>
:参数服务器中机器人的描述,默认为/robot_description
<robotSimType>
:机器人模拟接口的插件名字,默认为'DefaultRobotHWSim'
控制插件默认的行为包括:
- hardware_interface::JointStateInterface
- hardware_interface::EffortJointInterface
- hardware_interface::VelocityJointInterface
3、RRBot
例子
1、编写材料文件
<!--materials.xacro--><?xml version="1.0"?><robot> <material name="red"> <color rgba="0.8 0.0 0.0 1.0"/> </material> <material name="brown"> <color rgba="${222/255} ${207/255} ${195/255} 1.0"/> </material></robot>
2、编写插件文件
<?xml version="1.0"?><robot> <!-- ros_control plugin --> <gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> <robotNamespace>/rrbot</robotNamespace> <robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType> </plugin> </gazebo> <!-- hokuyo --> <gazebo reference="hokuyo_link"> <sensor type="gpu_ray" name="head_hokuyo_sensor"> <pose>0 0 0 0 0 0</pose> <visualize>false</visualize> <update_rate>40</update_rate> <ray> <scan> <horizontal> <samples>720</samples> <resolution>1</resolution> <min_angle>-1.570796</min_angle> <max_angle>1.570796</max_angle> </horizontal> </scan> <range> <min>0.10</min> <max>30.0</max> <resolution>0.01</resolution> </range> <noise> <type>gaussian</type> <!-- Noise parameters based on published spec for Hokuyo laser achieving "+-30mm" accuracy at range < 10m. A mean of 0.0m and stddev of 0.01m will put 99.7% of samples within 0.03m of the true reading. --> <mean>0.0</mean> <stddev>0.01</stddev> </noise> </ray> <plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_gpu_laser.so"> <topicName>/rrbot/laser/scan</topicName> <frameName>hokuyo_link</frameName> </plugin> </sensor> </gazebo> <!-- camera --> <gazebo reference="camera_link"> <sensor type="camera" name="camera1"> <update_rate>30.0</update_rate> <camera name="head"> <horizontal_fov>1.3962634</horizontal_fov> <image> <width>800</width> <height>800</height> <format>R8G8B8</format> </image> <clip> <near>0.02</near> <far>300</far> </clip> <noise> <type>gaussian</type> <!-- Noise is sampled independently per pixel on each frame. That pixel's noise value is added to each of its color channels, which at that point lie in the range [0,1]. --> <mean>0.0</mean> <stddev>0.007</stddev> </noise> </camera> <plugin name="camera_controller" filename="libgazebo_ros_camera.so"> <alwaysOn>true</alwaysOn> <updateRate>0.0</updateRate> <cameraName>rrbot/camera1</cameraName> <imageTopicName>image_raw</imageTopicName> <cameraInfoTopicName>camera_info</cameraInfoTopicName> <frameName>camera_link</frameName> <hackBaseline>0.07</hackBaseline> <distortionK1>0.0</distortionK1> <distortionK2>0.0</distortionK2> <distortionK3>0.0</distortionK3> <distortionT1>0.0</distortionT1> <distortionT2>0.0</distortionT2> </plugin> </sensor> </gazebo> </robot>
3、编写transation文件
见上文
4、编写xacro文件
<?xml version="1.0"?><!-- Revolute-Revolute Manipulator --><robot name="rrbot" xmlns:xacro="http://www.ros.org/wiki/xacro"> ... <!-- Import all Gazebo-customization elements, including Gazebo colors --> <xacro:include filename="$(find rrbot_description)/urdf/rrbot.gazebo" /> <!-- Import Rviz colors --> <xacro:include filename="$(find rrbot_description)/urdf/materials.xacro" /> <xacro:include filename="$(find rrbot_description)/urdf/rrbot.transmission.xacro" /> <!-- Used for fixing robot to Gazebo 'base_link' --> <link name="world"/> <joint name="fixed" type="fixed"> <parent link="world"/> <child link="link1"/> </joint> <!-- Base Link --> <link name="link1"> <collision> <origin xyz="0 0 ${height1/2}" rpy="0 0 0"/> <geometry> <box size="${width} ${width} ${height1}"/> </geometry> </collision> <visual> <origin xyz="0 0 ${height1/2}" rpy="0 0 0"/> <geometry> <box size="${width} ${width} ${height1}"/> </geometry> <material name="orange"/> </visual> <inertial> <origin xyz="0 0 ${height1/2}" rpy="0 0 0"/> <mass value="${mass}"/> <inertia ixx="${mass / 12.0 * (width*width + height1*height1)}" ixy="0.0" ixz="0.0" iyy="${mass / 12.0 * (height1*height1 + width*width)}" iyz="0.0" izz="${mass / 12.0 * (width*width + width*width)}"/> </inertial> </link> <joint name="joint1" type="continuous"> <parent link="link1"/> <child link="link2"/> <origin xyz="0 ${width} ${height1 - axel_offset}" rpy="0 0 0"/> <axis xyz="0 1 0"/> <dynamics damping="0.7"/> </joint> <!-- Middle Link --> ... <joint name="hokuyo_joint" type="fixed"> <axis xyz="0 1 0" /> <origin xyz="0 0 ${height3 - axel_offset/2}" rpy="0 0 0"/> <parent link="link3"/> <child link="hokuyo_link"/> </joint> <!-- Hokuyo Laser --> <link name="hokuyo_link"> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="0.1 0.1 0.1"/> </geometry> </collision> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <mesh filename="package://rrbot_description/meshes/hokuyo.dae"/> </geometry> </visual> <inertial> <mass value="1e-5" /> <origin xyz="0 0 0" rpy="0 0 0"/> <inertia ixx="1e-6" ixy="0" ixz="0" iyy="1e-6" iyz="0" izz="1e-6" /> </inertial> </link> <joint name="camera_joint" type="fixed"> <axis xyz="0 1 0" /> <origin xyz="${camera_link} 0 ${height3 - axel_offset*2}" rpy="0 0 0"/> <parent link="link3"/> <child link="camera_link"/> </joint> <!-- Camera --> ...
5、
参考:
http://wiki.ros.org/ros_control
http://gazebosim.org/tutorials?tut=ros_control&cat=connect_ros
https://github.com/ros-simulation/gazebo_ros_demos
http://wiki.ros.org/rqt_graph
http://wiki.ros.org/rqt
http://wiki.ros.org/urdf/XML/Transmission
- ROS Gazebo(四):ROS Control
- <ROS> Gazebo Ros Control 及 Controller运用
- ROS Gazebo(三):启动gazebo/URDF
- ROS Gazebo(二):概述
- ROS学习--(十九)使用Gazebo模拟器
- 安装ros、gazebo、moveit(rviz)
- ROS Gazebo(一):安装与使用
- ROS-NAOqi(rviz moveit gazebo等)
- ROS-NAOqi(rviz moveit gazebo等)
- interface Gazebo and ROS.
- ros gazebo 运行
- ROS-leaning(3)-Gazebo
- ROS Gazebo(五):ros_control和gazebo仿真总结
- 【ROS Gazebo专题】四、将Fetch机器人放到Gazebo中进行玩耍
- ROS学习--(四)创建ROS Package
- ROS教程(四):编译ROS程序包
- ROS学习笔记(四):ROS主题
- Using Gazebo plugins with ROS
- gensim词袋向量化
- RESTful Web 服务
- Web环境使用相对路径发布Webservice
- Apache Shiro介绍
- imul和mul的计算
- ROS Gazebo(四):ROS Control
- ## 学习笔记 => 箭头函数##
- MindManager帮你搞定商业思维导图
- UGUI实现血条效果
- MySQL命令行导出数据库
- 视屏窗口切换
- js修炼——手写全屏滚动插件
- 远程连接一闪而过或登录后无法正常操作的解决方法
- UML知识总结——用例图