gazebo是基于动力学的仿真,底层是通过发送力矩实现机械臂控制的,如果需要在gazebo中用到位置或者速度控制,有两种解决方案,一个是自己编写一个控制器,用来控制力矩输入,一个是采用ros_controller提供的pid方式进行实现。
这里以franka emika panda关节位置控制为例,展示一下调试的过程:
首先是配置文件:
position_control.yaml
pid_position.yaml
接着是xacro文件:
panda.transmission.xacro
最后launch文件:
position_simulation.launch
要改的就这些,网上搜gazebo ros_controller,讲解非常多,有时间再更这一部分。
接下来讲怎么通过ros的工具方便快捷的进行调节和查看,主要有两个工具,一个是rqt_plot,一个是dynamic_reconfigure
常规操作:打开gazebo,加载模型:
gazebo
接着查看一下topic名称,这里是/robot1/joint_states
鉴于这个topic包含的内容很多,我们需要监控的实际是其中的position[i]
举个例子,要看七关节的位置情况,运行这条命令:
rqt_plot /robot1/joint_states/position[6]
可以看到这个:
rqt
就可以实时监控变量状态了。
接着调pid看控制效果:
首先看一下目前的参数
rosrun dynamic_reconfigure dynparam get /robot1/gazebo_ros_control/pid_gains/panda_joint7
复制输出,调节pid参数,再set
get and set
再配合rostopic pub给出阶越信号,就可以实现matlab simulink类似的实时pid调参效果了。