Mavros: 操纵杆遥操作

创建于 2014-08-25  ·  72评论  ·  资料来源: mavlink/mavros

在界。 在 RC 覆盖部分需要一些帮助。

extras feature request

最有用的评论

@vooon现在做测试。 我的轴图是不同的,这很容易改变,但我看到有些通道颠倒了。 您还应该向反向通道添加一个参数,而不必进入控制模式并执行诸如z=-yaw

注意:就我而言,我的轴图是:

axes_map = {
    'roll': 3,
    'pitch': 2,
    'yaw': 0,
    'throttle': 1
}

在 vel 控制模式下:

twist.twist.linear = Vector3(x=-roll, y=pitch, z=throttle)
twist.twist.angular = Vector3(z=-yaw)

所有72条评论

我认为最好不是插件,而是使用 rc_io 插件的脚本节点。

这会包括设定点的东西吗?

我不太习惯你看到的脚本,我真的更喜欢插件。 但是我可以将它作为插件发送给您,然后您可以根据需要将其转换为脚本。

只是我不想要已经存在(并且有效)的重复代码。

我认为这个节点应该订阅操纵杆主题并生成 rc 覆盖消息(或设置点)。
请给我发送什么数据我应该发送到 rc/setpoint 并且我编写脚本(通道映射等)。

好的,我会立即这样做

@vooon现在给你发了邮件 ;)

好的,我明天去看看。

当然:+1:谢谢!

如果需要,我可以添加一个类似的节点。 @TSC21

@tonybaltovski请寄给我。 我认为这是一个有用的例子,但也许它必须是额外的。

@tonybaltovski我已经开始了一个插件,我把它发送给@vooon,这样它就可以适应他想要的方式。 它几乎准备好进行设定点控制,但是 RC 覆盖部分我把它留给了@vooon。

这件事是什么状态? 我真的很想参与其中,以便也测试设定点:)

明天吧...

@TSC21这只是概念证明,但它应该可以工作。

我会试试的,谢谢! :) 但我的首要任务是使用操纵杆测试设定点。 如果您可以添加位置和速度控制的可能性,我将不胜感激。

对于速度,将cmd_vel作为TwistStamped发送给setpoint_velocity订阅;

位置控制很简单:它发送position作为PoseStamped而不是cmd_vel但这必须是一个特殊情况 - 它必须对发送的先前位置值进行求和可以增加或减少位置(因此xyz的值不限于 -1..1;限制的是添加到最后一个值;所以如果操纵杆总是发送+1 ,在每次迭代中它总和+1 -> 我唯一的疑问是在这种情况下我们是否必须限制速率,所以迭代不会快速提升一些值)。
这个由setpoint_position订阅。

更新:关于/joy主题:我无法使用mavteleop脚本从我的游戏杆中检索任何数据。 但是使用universal_teleop启动我可以。 所以剧本上肯定少了点什么。

你运行joy_node?

rosrun joy joy_node

2014-08-27 18:17 GMT+04:00 TSC21 [email protected]

更新:关于 /joy 主题:我无法从中检索任何数据
我的操纵杆使用 mavteleop 脚本。 但是使用universal_teleop
发射我可以。 所以剧本上肯定少了点什么。


直接回复此邮件或在 GitHub 上查看
https://github.com/vooon/mavros/issues/133#issuecomment -53578566。

不! 是的,它现在有效。 忘记了joy_node 。 不能包含在要启动的脚本中吗?

好的,现在关于覆盖本身:回显/mavros/rc/override没有得到任何数据,因为你忘记了前缀/在这里:

override_pub = rospy.Publisher(args.mavros_ns + "/rc/override", OverrideRCIn, queue_size=10)

需要更正或者我做一个公关。
但是 FCU 上仍然没有 RC 覆盖,因为电机甚至不会改变速度。 将继续检查发生了什么。

@vooon RC 覆盖它不起作用。 该脚本正在发布到/rc/override ,由rc_io.cpp订阅。 回显/mavros/rc/override使我的通道值发生变化,但 FCU 端没有任何反应(没有电机旋转变化)。

我的优先事项不是 RC 覆盖,即使我想设置它。 但我似乎无法找到问题所在。 同时,您能否实现设定点速度和位置控制? (基于我对这种控件的规格所做的上述评论)
谢谢!

我对 RC 覆盖有同样的问题。 FCU 不使用它。

@tonybaltovski你能试着调试一下原因吗? 我忙于其他一些关于 POSCTL 的事情。

当我使用 APM 测试覆盖时,我发现,如果覆盖消息来自 system_id != SYSID_MYGCS(默认值:255),它会静默删除。

所以我将其更改为 1(mavros 默认值)并且它可以工作。 或者我们可以更改 mavros system_id。

那么有什么问题呢? system_idcomp_id ? PX4 需要什么?

也许 PX4 不处理 RC 覆盖消息,我找不到MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE消息的处理程序。

也许 PX4 不处理 RC 覆盖消息,我找不到MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE消息的处理程序。

是的,似乎没有。 太糟糕了,我想我们可以要求实施,但我更愿意让设定点工作。 你能帮忙@vooon吗?
提前致谢!

@vooon我明天会在我的 APM 上再试一次,然后让你知道。

我明天试试。

非常感谢@vooon!

@TSC21我快完成了,但是位置控制很脏。 需要重做以进行恒定时间积分。

谢谢@vooon! :D 当你们都做完后请警告我! 我很乐意测试这个!

您已经可以测试除-pos (可能还有-vel )之外的所有模式。

@vooon现在做测试。 我的轴图是不同的,这很容易改变,但我看到有些通道颠倒了。 您还应该向反向通道添加一个参数,而不必进入控制模式并执行诸如z=-yaw

注意:就我而言,我的轴图是:

axes_map = {
    'roll': 3,
    'pitch': 2,
    'yaw': 0,
    'throttle': 1
}

在 vel 控制模式下:

twist.twist.linear = Vector3(x=-roll, y=pitch, z=throttle)
twist.twist.angular = Vector3(z=-yaw)

使用~axes_scale/<name>参数来反转(将其设置为 -1.0)。

哦,好的,没有检查那个。 谢谢!

您可以在脚本启动时集成rosrun joy joy_node而不是将其添加到launch文件中吗?

@vooon另一件需要工作的事情:节点必须始终发送数据,即使它是 0.0,例如,即使我们不移动节点上的开关, cmd_vel必须始终发布操纵杆,导致OFFBOARD模式有 0.5 秒的超时时间,并且不断接收数据以保持该模式或反转到以前的模式!

我看到的是,当我们将通道设置为一个值时, cmd_vel只发送该值一次。 PX4 实现需要不断地接收数据,所以我认为可以做的是cmd_vel总是发送以前的通道值,除非它接收到一个新值。 该新值被存储并不断发送,直到设置了通道的新值(当然使用模拟摇杆)。

将此添加到您的 Joy 节点<param name="~autorepeat_rate" value="5" />启动文件中

感谢@tonybaltovski奏效! 但是我仍然无法使用启动文件更改参数。 这是我的启动文件的样子:

<launch>
    <!-- vim: ft=roslaunch -->
    <!-- example launch script for PX4 teleop -->

    <arg name="fcu_url" default="serial:///dev/ttyACM0:57600" />
    <arg name="gcs_url" default="" />
    <arg name="tgt_system" default="1" />
    <arg name="tgt_component" default="50" />

    <node pkg="mavros" type="mavros_node" name="mavros" required="true" clear_params="true" output="screen">
        <param name="fcu_url" value="$(arg fcu_url)" />
        <param name="gcs_url" value="$(arg gcs_url)" />
        <param name="target_system_id" value="$(arg tgt_system)" />
        <param name="target_component_id" value="$(arg tgt_component)" />

        <!-- px4 blacklist -->
        <rosparam command="load" file="$(find mavros)/launch/px4_blacklist.yaml" />

        <!-- enable heartbeat send and reduce timeout -->
        <param name="conn_heartbeat" value="5.0" />
        <param name="conn_timeout" value="10.0" />
        <!-- enable mavlink autostart on USB port -->
        <param name="startup_px4_usb_quirk" value="true" />

        <!-- joystick axis parameters -->

        <!-- joystick axis map -->
        <param name="~axes_map/roll" value="3" />
        <param name="~axes_map/pitch" value="2" />
        <param name="~axes_map/yaw" value="0" />
        <param name="~axes_map/throttle" value="1" />

        <!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="" />

    </node>

    <node pkg="joy" type="joy_node" name="joy" required="true">
        <param name="~/autorepeat_rate" value="50" />
    </node> 
</launch>

也许是因为这是一个mavros_extras脚本? 但是发行rosparam list /我得到:

/joy/autorepeat_rate
/mavros/axes_map/pitch
/mavros/axes_map/roll
/mavros/axes_map/throttle
/mavros/axes_map/yaw
/mavros/axes_scale/pitch
/mavros/axes_scale/roll
/mavros/axes_scale/throttle
/mavros/axes_scale/yaw

所以我不明白为什么它不改变参数。

顺便说一句@vooon ,它应该是axis而不是axes ;) 如果你愿意,我会做那个更正并做一个 PR。

更新:天哪,我的无知。 轴是轴的复数(所以没问题)

更新:如果我这样做rosparam get /mavros/axes_map/pitch我会得到2 ,所以我认为它可能是mavteleop

如果我这样做:

load_map(axes_map, '/mavros/axes_map/')
load_map(axes_scale, '/mavros/axes_scale/')
load_map(button_map, '/mavros/button_map/')

rosrun mavteleop

[ERROR] [WallTime: 1409327711.720875] bad callback: <function joy_cb at 0xa5ce9cc>
Traceback (most recent call last):
  File "/opt/ros/hydro/lib/python2.7/dist-packages/rospy/topics.py", line 682, in _invoke_callback
    cb(msg)
  File "/home/vision/vision_ros_ws/src/mavros/mavros_extras/scripts/mavteleop", line 187, in joy_cb
    pitch = get_axis(joy, 'pitch')
  File "/home/vision/vision_ros_ws/src/mavros/mavros_extras/scripts/mavteleop", line 92, in get_axis
    return j.axes[axes_map[n]] * axes_scale[n]
TypeError: can't multiply sequence by non-int of type 'float'

好的问题解决了! 这是我所做的:
在启动文件中,我有:

<!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="" />

这给出了序列乘法的先前错误。 变成:

<!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="1.0" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="1.0" />

通过更改mavteleop解决了订阅问题:

load_map(axes_map, '/mavros/axes_map/')
load_map(axes_scale, '/mavros/axes_scale/')
load_map(button_map, '/mavros/button_map/')

很快就会做PR。

PR 在 #143 中完成。

我对轴的复数形式感到困惑。

您将参数应用于错误的节点。 我简单地做了启动脚本。

您将参数应用于错误的节点。 我简单地做了启动脚本。

是的,现在我明白了! 谢谢! 然后就取消PR。

用法:

  1. 启动 FCU 连接: roslaunch mavros px4.launch
  2. 开始远程操作: roslaunch mavros_extras teleop.launch

或者使用<include file="...">为这两个文件创建您自己的启动。

用法:
启动 FCU 连接:roslaunch mavros px4.launch
启动远程操作:roslaunch mavros_extras teleop.launch

谢谢! 到时候试试!

现在工作正常:) 只需要更改 yaml 并完成(检查 289fa6c - 应该是roll bot poll )。 现在我将在 GCS HIL 上测试它,看看它是如何进行的。 position部分@vooon 必须做什么?

我正准备周末的航班,所以它在todo..

我正准备周末的航班,所以它在todo..

如果你指出 myabe 我可以试试

我会修正错字。
还需要从 FCU 参数中添加加载 RC 限制。

顺便说一下,刚刚注意到 PX4Firmware 有 500 个叉子!

顺便说一下,刚刚注意到 PX4Firmware 有 500 个叉子!

:D 鉴于使用 Pixhawk 和 PX4 衍生项目的庞大社区,这并不奇怪。

只是想对此发表评论。 我正要写点东西,就像我看到这个问题一样。 就像社区读懂了我的想法:D。 测试它,就像一个魅力。

@pmukherj能否请您概述一下如何在干净的系统上运行的简要步骤。 我将扩展、测试和适应以将其纳入 wiki。
谢谢。

@mhkabir我认为 wiki 中最好的地方 - 教程页面(目前不存在于 mavros 空间)。

@vooon我的意思是 PX4 wiki :) 我可以在自述文件中添加注释。

肯定的事! 我想确保我没有采取任何多余的步骤(可能不需要将固件升级到开发版本等)。 今天我要写点东西。

@mhkabir由于加拿大的恶劣天气,我今天无法飞行,但是在进行台架测试时,我注意到当发送非零 r,p,y 命令时(使用操纵杆),电机功率没有声音变化。 当我控制推力(通过 f710 操纵杆)时,我可以听到电机上下发出呜呜声。 当我摆动四旋翼飞行器的机身时,我可以听到电机发出呜呜声并尝试进行补偿。 但是,当我通过设定点/姿态命令向它发出较大的 ar,p,y 命令以定位目标时,听不到这种补偿。 是否有任何反馈消息作为 mavros 的一部分实现,用于确认正在执行的命令(可能是单个电机功率或其他什么?)。
我确实想在我记录它之前确保它有效,并且宁愿在长凳上证明它然后通过崩溃:P。

@pmukherj你能在 Gitter 或 Hangouts 上给我
有一条 LOCAL_POSITION_TARGET_NED 消息和 ATTITUDE_TARGET 消息,它们不在 mavros 中。 我将修补它作为我们想要为设置点插件进行的代码重构的一部分。 同样对于这些控制器目标流,您需要在 PX4 端显式地流式传输它们。
车外控制是实验性的,这个插件未经测试,所以我不确定哪里出了问题。 我需要更多数据。

对不起,对,我正忙着做一些 DAQ 飞行。
因此,ATTITUDE_TARGET 听起来正是我需要确保 pixhawk 尝试获得我发送的操纵杆命令所需要的。 我有一个 3DR,pixhawk,上面安装了一台更大的计算机(顺便说一句,px4 堆栈工作得非常好,只是缺少一些飞行模式)。

我可以调查一下,或者你有这个实现的叉子吗?

@pmukherj我正在考虑将态度和位置目标纳入我的可视化插件。 有一些 tf 问题,所以我正在解决这些问题。
您使用的是什么机载配套计算机?
关于目标,你真的不需要实现任何东西。 只需使用我们在 mavros 上的 UDP 网桥,并在您的开发计算机上修补一个连接到 QGC 的链接。 您可以在那里查看和绘制所有内容。

对不起! 新年搬家。
我正在使用各种计算机(odroids、TK1 等)进行测试。 我将尝试使用 UDP 网桥。
我猜我可以在 pixhawk 中使用任何遥测连接? 除了配套计算机之外,我还通过无线连接到遥测端口之一(这是 3DR pixhawk 的标准配置)。

是的。 验证设定点确实有效! 内部设定点正在接受它,并且控制器输出也是可见的。 现在进行飞行测试:)。 祝我好运。

@pmukherj您可以将伴侣连接到您的 TELEM2 端口,并通过 microSD 卡中的 extras.txt 启动它。
很好,设定点正在工作。 祝你的航班好运。
请检查: http :
在底部有空白代码行,您应该在其中添加用于更改为离线模式的 mavros 命令(如果他们愿意,可以作为人们的选项)

另外,您能否在此处添加飞行测试的顺序: http :

只需输入积分,我就会清理它。

@vooon操纵杆插件工作正常,但如果未找到轴之一或超出范围等,则会崩溃。

我们可以添加最小/最大限制。

请注意,这不是插件,节点。

真的 ;)
我想我会把它作为一个插件来做,因为脚本/python 看起来相当混乱 + 不可靠。

我不想要插件,因为它在重新发明轮子。 从 python 到 C++ 的最大重写。
但是当 mavteleop 在 desctop 上运行并控制 OBC 的 mavros 时,真的不需要。

@vooon你有没有想过解决这个问题的方法?

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Phadadev picture Phadadev  ·  4评论

tfoote picture tfoote  ·  5评论

TeixeiraRafael picture TeixeiraRafael  ·  4评论

trishantroy picture trishantroy  ·  10评论

mohand150 picture mohand150  ·  5评论