本文主要是介绍教程 | 阿克曼结构移动机器人的gazebo仿真(六),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第六章、配置controller并用键盘控制节点让小车动起来
1 前 言
上一节用xacro对urdf文件进行一个优化,并且配置好小车gazebo仿真所需的插件,以及传感器的插件。这一节通过配置controller让小车能够在gazebo仿真环境中真正动起来,并且能够用键盘控制节点来做一个控制。
2 配置racebot_control功能包
在工作空间下新建racebot_control功能包,并在功能包中新建如下文件夹:
ros_control是ROS为开发者提供的机器人控制中间件,包含一系列控制器接口、传动装置接口、硬件接口、控制器工具箱等。
◆配置yaml文件
在config文件夹中新建racebot_control.yaml文件,代码如下:
racebot:#上面的racebot是运行动命名空间 Publish all joint states --公布所有--------------------joint_state_controller:type: joint_state_controller/JointStateControllerpublish_rate: 50# Velocity Controllers ----速度控制器---------------------left_rear_wheel_velocity_controller:type: effort_controllers/JointVelocityControllerjoint: left_rear_wheel_jointpid: {p: 1, i: 0.0, d: 0.0, i_clamp: 0.0}right_rear_wheel_velocity_controller:type: effort_controllers/JointVelocityControllerjoint: right_rear_wheel_jointpid: {p: 1, i: 0.0, d: 0.0, i_clamp: 0.0}left_front_wheel_velocity_controller:type: effort_controllers/JointVelocityControllerjoint: left_front_wheel_jointpid: {p: 0.5, i: 0.0, d: 0.0, i_clamp: 0.0}right_front_wheel_velocity_controller:type: effort_controllers/JointVelocityControllerjoint: right_front_wheel_jointpid: {p: 0.5, i: 0.0, d: 0.0, i_clamp: 0.0}# Position Controllers ---位置控制器-----------------------left_steering_hinge_position_controller:joint: left_steering_hinge_jointtype: effort_controllers/JointPositionControllerpid: {p: 10.0, i: 0.0, d: 0.5}right_steering_hinge_position_controller:joint: right_steering_hinge_jointtype: effort_controllers/JointPositionControllerpid: {p: 10.0, i: 0.0, d: 0.5}
在yaml文件中,用到了ros_controllers功能包中的JointVelocityController控制器来控制轮子的转速,用JointPositionController控制器控制摆转件的旋转。之前在URDF中约束了摆转件的旋转角度。控制器发布控制指令,通过上一节配置的Transmission将控制指令转换为执行器的控制信号,实现机器人的运动。注意命名空间可以自行修改但是要与其他相关代码中的命名空间保持一致,否则会让小车无法跑动。
◆配置launch文件
launch文件代码如下:
<?xml version='1.0'?>
<launch><!-- Load joint controller configurations from YAML file to parameter server --><rosparam file="$(find racebot_control)/config/racebot_control.yaml" command="load"/><!-- load the controllers --><node name="controller_manager" pkg="controller_manager" type="spawner" respawn="false"output="screen" ns="/racebot" args="left_rear_wheel_velocity_controller right_rear_wheel_velocity_controllerleft_front_wheel_velocity_controller right_front_wheel_velocity_controllerleft_steering_hinge_position_controller right_steering_hinge_position_controllerjoint_state_controller"/><!--运行joint_state_publisher节点,发布机器人关节状态--><!--<node name = "robot_state_publisher" pkg = "robot_state_publisher" type = "state_publisher">--><node name= "robot_state_publisher" pkg= "robot_state_publisher" type= "robot_state_publisher"><remap from="/joint_states" to="/racebot/joint_states"/></node><!-- servo node --><node pkg="racebot_control" type="servo_commands.py" name="ser
这篇关于教程 | 阿克曼结构移动机器人的gazebo仿真(六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!