这里有个视频,介绍怎么让机器人在平面运动(在x和y方向上进行平移):https://www.youtube.com/watch?v=mtSpqObg9X4
如果你们看不了视频也没关系,就下载他的代码看一下也能明白:
$ git clone https://bitbucket.org/theconstructcore/plannar_mover.git
$ roslaunch plannar_mover kinetic_main.launch
问题1:运动过程中上平面掉下来
上面这个视频,作者提到一个问题,就是运动过程中,上面的平面会掉下来,大家可以看视频下方的评论,我进行了解答:
因为作者给下层的那个板子的平移轴 x_axis_joint
设的原点设错了,设成了 <origin xyz="0 0 0.01" rpy="0 0 0" />
,改成<origin xyz="0 0 0" rpy="0 0 0" />
就好了。
xy轴平移关节的设计
先上我正确的代码:
<joint name="x_axis_joint" type="prismatic">
<parent link="world"/>
<child link="x_axis_planar"/>
<origin xyz="0 0.0 0.00" rpy="0 0 0" />
<axis xyz="1 0 0" />
<limit effort="50" velocity="1" lower="-${x_limit}" upper="${x_limit}" />
</joint>
<joint name="y_axis_joint" type="prismatic">
<parent link="x_axis_planar"/>
<child link="y_axis_planar"/>
<origin xyz="0 0.0 0.0" rpy="0 0 0" />
<axis xyz="0 1 0" />
<limit effort="50" velocity="1" lower="-${y_limit}" upper="${y_limit}" />
</joint>
对应的控制器在一个yaml文件中设置,在作者给出的代码里是这个文件:plannar_mover_control.yaml,里面给xy轴用的是位置控制器。
除此之外,我们还可以选择用速度控制器和力量控制器,更多介绍参考:
https://www.guyuehome.com/890 这个链接里古月居老师不仅介绍了各种控制器,还介绍了各处接口设置。要是大家看了有什么疑问也可以在评论区提问(我)。
这里给一个我使用力量控制器和速度控制器的yaml示例:
x_axis_controller:
type: effort_controllers/JointEffortController
joint: x_axis_joint
y_axis_controller:
type: effort_controllers/JointEffortController
joint: y_axis_joint
yaw_controller:
type: effort_controllers/JointVelocityController
joint: joint1
pid: {p: 500.0, i: 0.0, d: 0.1, i_clamp: 0.0}
up_down_controller:
type: effort_controllers/JointPositionController
joint: joint2
pid: {p: 100000.0, i: 0.0, d: 0.1, i_clamp: 1.0}
这里可以看到,xy轴用的力量控制,joint1用的速度控制(yaw),joint2用的位置控制(上下)。
问题2:pid设置太小会无法移动
从我的示例可以看到,我给控制上下的轴设了非常大的p值,这是因为我的轴上方承载了很重的东西,如果设小了就会发现这个轴动不了,设了非常大的p值之后它就可以动了。
以下介绍力量控制器和速度控制器的优缺点。
使用力控制器的弊端
- 关节运动到达限位时可能会发生反弹,需要自己设置减速
- 假如我们希望把运动机器人的速度设为0,我们只能通过joint_states的速度值来自己通过不断加减速(比如自己写一个pid调力算法)来使速度为0,而无法直接写速度值。
使用力控制器的优势
- 不需要调控制器的pid值,我们可以自己设置力的大小,不管p设置成多少,哪怕是0,关节还是会按照我们给的力的大小来运动。
- 加速度可控:只要力量设置合理,不会发生突然的加减速
使用速度控制器的弊端
直接给一个较大的速度会发生非常快的加减速,假如你有要求不能imu突然加速度过大的话,这会是一个问题。
问题2:运动x轴时发现上层的y轴关节会平移
不论我给xy轴的关节设置为 effort_controllers/JointEffortController 还是 effort_controllers/JointVelocityController ,发现一移动x轴,y轴也会发生一些位移。就是说我只给 /multi_sensor_platform/x_axis_controller/command 发速度/力,而y轴发速度/力 为0,发现除了x方向发生运动,y方向的轴也发生了肉眼可见的位移。
解决:后来把urdf的力量限制调小就好了。
原来我的urdf里设置的力限制是5000,即
<limit effort="5000" velocity="1" lower="-${y_limit}" upper="${y_limit}" />
把它改成50就好了。我猜测是因为我把下面大板子质量设的很小(mass=0.1
)而上面传感器部分太重,并且传感器在y轴正负方向上并不平衡(比如说y正方向比较重),一旦x轴运动,就会带动y轴也发生一些运动。
如果觉得文章有帮助,记得关注我谢谢哟~
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)