Mavros: 是否有类似/ mavros / setpoint_velocity / cmd_vel的主题,但使用了车身框架?

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

你好,
我正在执行基于视觉的控制,并且摄像头朝下放在无人机上。
因此,位置估计是在身体框架中进行的。
我发现主题/ mavros / setpoint_velocity / cmd_vel可用于更改无人机的速度,但似乎在NED框架中。

是否有类似/ mavros / setpoint_velocity / cmd_vel的主题,但使用了车身框架?

还是我需要将速度设定值从车身框架转换为NED框架才能实现?

我试图找到可以使用的东西,然后找到了这段代码。 https://github.com/weiweikong/px4_velocity_control_keyboard/blob/master/src/px4_velocity_control_node.cpp

vs_body_axis.twist.linear.x = vs.twist.linear.x * cos(uavYawENU) + vs.twist.linear.y * sin(uavYawENU);
vs_body_axis.twist.linear.y = vs.twist.linear.x * sin(uavYawENU) - vs.twist.linear.y * cos(uavYawENU);

看来这是我能找到的最佳解决方案。
我不确定偏航角是仅来自IMU还是来自IMU和磁力的融合。
您对此有任何意见或想法吗?

MAVROS版本和平台

马夫罗斯:0.17.3
ROS:靛蓝
Ubuntu的:14.04

自动驾驶仪的类型和版本

APM:直升机V3.4-dev(FE724032)

节点日志

bshang2 @ mechatronics-990 :〜/ simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
...登录到/home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/roslaunch-mechatronics-990-28079.log
检查日志目录中的磁盘使用情况。 可能还要等一下。
按Ctrl-C中断
完成检查日志文件磁盘使用情况。 用量小于1GB。

启动roslaunch服务器http:// mechatronics-990 :45006 /

概括

清除参数

  • /大夫/

参数

  • / mavros / cmd / use_comp_id_system_control:否
  • / mavros / conn / heartbeat_rate:1.0
  • / mavros / conn / system_time_rate:0.0
  • / mavros / conn /超时:10.0
  • / mavros / conn / timesync_rate:0.0
  • / mavros / fcu_url: tcp://127.0.0.1 :5760
  • / mavros / gcs_url: udp://127.0.0.1@1 ...
  • / mavros / global_position / frame_id:fcu
  • / mavros / global_position / rot_covariance:99999.0
  • / mavros / global_position / tf / child_frame_id:fcu_utm
  • / mavros / global_position / tf / frame_id:local_origin
  • / mavros / global_position / tf / send:False
  • / mavros /图片/ frame_id:px4flow
  • / mavros / imu / angular_velocity_stdev:0.000349065850399
  • / mavros / imu / frame_id:fcu
  • / mavros / imu / linear_acceleration_stdev:0.0003
  • / mavros / imu / magnetic_stdev:0.0
  • /mavros/imu/orientation_stdev:1.0
  • / mavros / localposition / frame_id:fcu
  • / mavros / local_position / tf / child_frame_id:base_link
  • / mavros / localposition / tf / frame_id:世界
  • / mavros / local_position / tf / send:True
  • / mavros /任务/ pull_after_gcs:是
  • / mavros / mocap / use_pose:是
  • / mavros / mocap / use_tf:错误
  • / mavros / plugin_blacklist:['actuator_contro ...
  • / mavros / plugin_whitelist:[]
  • / mavros / px4flow / frame_id:px4flow
  • / mavros / px4flow / ranger_fov:0.0
  • / mavros / px4flow / ranger_max_range:5.0
  • / mavros / px4flow / ranger_min_range:0.3
  • / mavros / safety_area / p1 / x:1.0
  • /马夫罗斯/安全区/ p1 / y:1.0
  • / mavros / safety_area / p1 / z:1.0
  • / mavros /安全区/ p2 / x:-1.0
  • / mavros /安全区/ p2 / y:-1.0
  • / mavros /安全区/ p2 / z:-1.0
  • / mavros / setpoint_accel / send_force:错误
  • / mavros / setpoint_attitude / reversethrottle:错误
  • / mavros / setpoint_attitude / tf / child_frame_id:态度
  • / mavros / setpoint_attitude / tf / frame_id:local_origin
  • / mavros / setpoint_attitude / tf / listen:错误
  • / mavros / setpoint_attitude / tf / rate_limit:10.0
  • / mavros / setpoint_position / tf / child_frame_id:设定点
  • / mavros / setpoint_position / tf / frame_id:local_origin
  • / mavros / setpoint_position / tf / listen:错误
  • / mavros / setpoint_position / tf / rate_limit:50.0
  • / mavros / startup_px4_usb_quirk:错误
  • / mavros / sys / disable_diag:错误
  • / mavros / sys /最小电压:10.0
  • / mavros / target_component_id:1
  • / mavros / target_system_id:1
  • / mavros / tdr_radio / low_rssi:40
  • / mavros / time / time_ref_source:fcu
  • / mavros /时间/ timesync_avg_alpha:0.6
  • / mavros /振动/ frame_id:振动
  • / mavros / vision_pose / tf / child_frame_id:视觉
  • / mavros / vision_pose / tf / frame_id:local_origin
  • / mavros / vision_pose / tf / Listen:错误
  • / mavros / vision_pose / tf / rate_limit:10.0
  • / mavros / vision_speed / listen_twist:错误
  • / robot_description:
  • / rosdistro:靛蓝
  • / rosversion:1.11.21
  • / tf_prefix:
  • / use_sim_time:正确

节点
/
凉亭(gazebo_ros / gzserver)
gazebo_gui(gazebo_ros / gzclient)
mavros(mavros / mavros_node)
spawn_erlecopter(凉亭/ ros / spawn_model)

自动启动新主人
process [master]:以pid [28094]开始
ROS_MASTER_URI = http:// localhost :11311

将/ run_id设置为ca9213bc-89bf-11e7-b657-1803733b65bb
process [rosout-1]:以pid [28107]开头
启动核心服务[/ rosout]
process [mavros-2]:从pid开始[28126]
process [spawn_erlecopter-3]:从pid开始[28133]
process [gazebo-4]:从pid开始[28134]
进程[gazebo_gui-5]:以pid [28151]开始
spawn_model脚本已启动
[gazebo-4]进程已终止[pid 28134,退出代码255,cmd / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / gzserver -u -e ode / home / bshang2 / simulation / ros_catkin_ws / src /ardupilot_sitl_gazebo_plugin/ardupilot_sitl_gazebo_plugin/worlds/mark_world/mark.world __name:=凉亭__log:= / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-1803733b65bb / gazebo-4.log]。
日志文件:/home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo-4 .log[INFO] [WallTime:1503684250.172508] [0.000000]从ros参数加载模型xml[INFO] [WallTime:1503684250.176886] [0.000000]等待服务/ gazebo / spawn_urdf_model[gazebo_gui-5]进程已死亡[pid 28151,退出代码255,cmd / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / gzclient __name:= gazebo_gui __log:= / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-1803733b65bb / gazebo_gui-5.log]。日志文件:/home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo_gui-5 .log
退出时^ C [spawn_erlecopter-3]杀死
[mavros-2]在出口处被杀死
追溯(最近一次通话):
在第301行中输入文件“ / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model”
sm.callSpawnService()
在callSpawnService中的第267行,文件“ / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model”
initial_pose,self.reference_frame,self.gazebo_namespace)
在spawn_urdf_model_client中的第28行,文件“ /home/bshang2/simulation/ros_catkin_ws/src/gazebo_ros_pkgs/gazebo_ros/src/gazebo_ros/gazebo_interface.py”
rospy.wait_for_service(凉亭名称空间+'/ spawn_urdf_model')
在wait_for_service的第159行中,文件“ /opt/ros/indigo/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py”
引发ROSInterruptException(“ rospy shutdown”)
rospy.exceptions.ROSInterruptException:rospy关闭
退出时^ C [rosout-1]杀死
^ C [master]退出时被杀死
正在关闭处理监视器...
...关闭处理监控器完成
完毕
bshang2 @ mechatronics-990 :〜/ simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
...登录到/home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/roslaunch-mechatronics-990-28603.log
检查日志目录中的磁盘使用情况。 可能还要等一下。
按Ctrl-C中断
完成检查日志文件磁盘使用情况。 用量小于1GB。

启动roslaunch服务器http:// mechatronics-990 :41224 /

概括

清除参数

  • /大夫/

参数

  • / mavros / cmd / use_comp_id_system_control:否
  • / mavros / conn / heartbeat_rate:1.0
  • / mavros / conn / system_time_rate:0.0
  • / mavros / conn /超时:10.0
  • / mavros / conn / timesync_rate:0.0
  • / mavros / fcu_url: tcp://127.0.0.1 :5760
  • / mavros / gcs_url: udp://127.0.0.1@1 ...
  • / mavros / global_position / frame_id:fcu
  • / mavros / global_position / rot_covariance:99999.0
  • / mavros / global_position / tf / child_frame_id:fcu_utm
  • / mavros / global_position / tf / frame_id:local_origin
  • / mavros / global_position / tf / send:False
  • / mavros /图片/ frame_id:px4flow
  • / mavros / imu / angular_velocity_stdev:0.000349065850399
  • / mavros / imu / frame_id:fcu
  • / mavros / imu / linear_acceleration_stdev:0.0003
  • / mavros / imu / magnetic_stdev:0.0
  • /mavros/imu/orientation_stdev:1.0
  • / mavros / localposition / frame_id:fcu
  • / mavros / local_position / tf / child_frame_id:base_link
  • / mavros / localposition / tf / frame_id:世界
  • / mavros / local_position / tf / send:True
  • / mavros /任务/ pull_after_gcs:是
  • / mavros / mocap / use_pose:是
  • / mavros / mocap / use_tf:错误
  • / mavros / plugin_blacklist:['actuator_contro ...
  • / mavros / plugin_whitelist:[]
  • / mavros / px4flow / frame_id:px4flow
  • / mavros / px4flow / ranger_fov:0.0
  • / mavros / px4flow / ranger_max_range:5.0
  • / mavros / px4flow / ranger_min_range:0.3
  • / mavros / safety_area / p1 / x:1.0
  • /马夫罗斯/安全区/ p1 / y:1.0
  • / mavros / safety_area / p1 / z:1.0
  • / mavros /安全区/ p2 / x:-1.0
  • / mavros /安全区/ p2 / y:-1.0
  • / mavros /安全区/ p2 / z:-1.0
  • / mavros / setpoint_accel / send_force:错误
  • / mavros / setpoint_attitude / reversethrottle:错误
  • / mavros / setpoint_attitude / tf / child_frame_id:态度
  • / mavros / setpoint_attitude / tf / frame_id:local_origin
  • / mavros / setpoint_attitude / tf / listen:错误
  • / mavros / setpoint_attitude / tf / rate_limit:10.0
  • / mavros / setpoint_position / tf / child_frame_id:设定点
  • / mavros / setpoint_position / tf / frame_id:local_origin
  • / mavros / setpoint_position / tf / listen:错误
  • / mavros / setpoint_position / tf / rate_limit:50.0
  • / mavros / startup_px4_usb_quirk:错误
  • / mavros / sys / disable_diag:错误
  • / mavros / sys /最小电压:10.0
  • / mavros / target_component_id:1
  • / mavros / target_system_id:1
  • / mavros / tdr_radio / low_rssi:40
  • / mavros / time / time_ref_source:fcu
  • / mavros /时间/ timesync_avg_alpha:0.6
  • / mavros /振动/ frame_id:振动
  • / mavros / vision_pose / tf / child_frame_id:视觉
  • / mavros / vision_pose / tf / frame_id:local_origin
  • / mavros / vision_pose / tf / Listen:错误
  • / mavros / vision_pose / tf / rate_limit:10.0
  • / mavros / vision_speed / listen_twist:错误
  • / robot_description:
  • / rosdistro:靛蓝
  • / rosversion:1.11.21
  • / tf_prefix:
  • / use_sim_time:正确

节点
/
凉亭(gazebo_ros / gzserver)
gazebo_gui(gazebo_ros / gzclient)
mavros(mavros / mavros_node)
spawn_erlecopter(凉亭/ ros / spawn_model)

自动启动新主人
process [master]:从pid开始[28618]
ROS_MASTER_URI = http:// localhost :11311

将/ run_id设置为e483c856-89bf-11e7-bb61-1803733b65bb
process [rosout-1]:以pid [28631]开头
启动核心服务[/ rosout]
process [mavros-2]:从pid开始[28656]
process [spawn_erlecopter-3]:从pid开始[28657]
process [gazebo-4]:从pid开始[28674]
进程[gazebo_gui-5]:以pid [28678]开始
spawn_model脚本已启动
[INFO] [WallTime:1503684293.653120] [0.000000]从ros参数加载模型xml
[INFO] [WallTime:1503684293.657344] [0.000000]等待服务/ gazebo / spawn_urdf_model
[INFO] [WallTime:1503684294.260952] [0.047500]呼叫服务/ gazebo / spawn_urdf_model
[INFO] [WallTime:1503684294.855628] [0.445000] Spawn状态:SpawnModel:成功生成模型
[spawn_erlecopter-3]进程已顺利完成
日志文件:/home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/spawn_erlecopter-3*.log

诊断程序

bshang2 @ mechatronics-990 :〜/ simulation / ardupilot / ArduCopter $ rostopic echo -n1 / diagnostics
标头:
序列:6456
邮票:
秒:6817
毫秒:500000000
frame_id:''
地位:


  • 等级:0
    名称:mavros:FCU连接
    讯息:已连线
    硬件ID
    值:



    • 密钥:收到的数据包:

      价值:24635



    • 密钥:丢包:

      值:0



    • 关键:缓冲区溢出:

      值:0



    • 键:解析错误:

      值:0



    • 键:Rx序列号:

      价值:58



    • 键:Tx序列号:

      价值:190



    • 键:Rx总字节数:

      价值:19770100



    • 密钥:Tx总字节数:

      价值:169295



    • 键:接收速度:

      值:inf



    • 键:Tx速度:

      值:inf


  • 等级:0
    名称:mavros:GCS桥
    讯息:已连线
    硬件ID
    值:



    • 密钥:收到的数据包:

      价值:3059



    • 密钥:丢包:

      值:0



    • 关键:缓冲区溢出:

      值:0



    • 键:解析错误:

      值:0



    • 键:Rx序列号:

      价值:243



    • 键:Tx序列号:

      值:0



    • 键:Rx总字节数:

      价值:51809



    • 密钥:Tx总字节数:

      价值:19769923



    • 键:接收速度:

      值:inf



    • 键:Tx速度:

      值:inf


  • 等级:0
    名称:mavros:GPS
    讯息:3D修复
    硬件ID
    值:



    • 按键:可见卫星

      价值:10



    • 键:修复类型

      价值:3



    • 键:EPH(米)

      价值:1.21



    • 键:EPV(米)

      价值:2.00


  • 等级:0
    名称:mavros:心跳
    讯息:正常
    硬件ID
    值:



    • 关键:自启动以来的心跳

      价值:6817



    • 键:频率(Hz)

      价值:0.952381



    • 键:车辆类型

      值:四旋翼



    • 键:自动驾驶仪类型

      值:ArduPilotMega



    • 键:模式

      值:GUIDED



    • 按键:系统状态

      值:有效


  • 等级:0
    名称:mavros:系统
    讯息:正常
    硬件ID
    值:



    • 按键:传感器存在

      值:0x0061FD2F



    • 按键:启用传感器

      值:0x0061FD2F



    • 关键:传感器健康

      值:0x0061FD2F



    • 关键:3D陀螺仪传感器

      值:可以



    • 按键:Sensor 3D Accel

      值:可以



    • 关键:传感器3D Mag

      值:可以



    • 关键:传感器绝对压力

      值:可以



    • 钥匙:传感器GPS

      值:可以



    • 按键:传感器激光位置

      值:可以



    • 关键:传感器角速度控制

      值:可以



    • 关键:传感器姿态刺

      值:可以



    • 键:传感器偏航位置

      值:可以



    • 按键:传感器Z / Alt控制

      值:可以



    • 按键:传感器X / Y位置控制

      值:可以



    • 键:传感器电机输出

      值:可以



    • 按键:传感器RC接收器

      值:可以



    • 关键:AHRS健康

      值:可以



    • 关键:地形健康

      值:可以



    • 键:CPU负载(%)

      值:0.0



    • 关键:掉落率(%)

      值:0.0



    • 关键:错误通讯

      值:0



    • 关键:错误计数#1

      值:0



    • 关键:错误计数#2

      值:0



    • 关键:错误计数#3

      值:0



    • 关键:错误计数#4

      值:0


  • 1级
    名称:mavros:电池
    信息:低电压
    硬件ID
    值:



    • 按键:电压

      价值:0.00



    • 关键:当前

      值:0.0



    • 关键:剩余

价值:100.0

支票编号

bshang2 @ mechatronics-990 :〜/ simulation / ardupilot / ArduCopter $ rosrun mavros checkid
好的。 我收到了1:1的消息。


从1个地址接收了1231条消息
sys:comp消息列表
1:1 0、1、2、136、152、150、24、27、29、30、32、33、162、163、164、165、42、173、178、62、193、74、35、36 ,241、116

question

最有用的评论

对于setpoint_velocity ,我将添加一个修复程序,该修复程序允许在LOCAL_NEDBODY_NED ,因为当前默认为LOCAL_NED (https:/ /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81)。 同时,您可以使用setpoint_raw并将coordinate_frameFRAME_BODY_NEDMAV_FRAME::BODY_NED (两者都可以)。

所有14条评论

嘿,

您可以使用setpoint_raw。

http://wiki.ros.org/mavros#mavros.2BAC8 -Plugins.setpoint_raw

在目标设定点上,可以更改坐标系。

http://docs.ros.org/api/mavros_msgs/html/msg/PositionTarget.html

对于setpoint_velocity ,我将添加一个修复程序,该修复程序允许在LOCAL_NEDBODY_NED ,因为当前默认为LOCAL_NED (https:/ /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81)。 同时,您可以使用setpoint_raw并将coordinate_frameFRAME_BODY_NEDMAV_FRAME::BODY_NED (两者都可以)。

感谢@AlexisTM@ TSC21您的回复很有帮助。 我稍后会再尝试。

@ TSC21 @AlexisTM感谢您的帮助! 我现在可以控制身体框架的速度。 录制了视频: https :

rostopic pub /mavros/setpoint_raw/local mavros_msgs/PositionTarget '{header: {stamp: now, frame_id: "world"}, coordinate_frame: 8, type_mask: 3527, velocity: {x: 0.1, y: 0, z: 0}}' -r 10

@cnpcshangbo必

@cnpcshangbo ,谢谢你的视频。
我发布此信息是为了帮助其他人消除我的困惑。
即使帧掩码为FRAME_BODY_NED = 8ROS命令仍应位于ENU中。 mavros会注意ENU-> NED转换。
实际上,从视频来看,该行为是:

  • x = 0.1 --->右边
  • y = 0.1 --->转发
    显然它仍在ENU中。 但是,这种混乱使我花了一个星期拉头发...

嗨黄,
感谢您的澄清。
很抱歉听到您花了这么长时间。
您的努力会帮助其他人。
谢谢

Hoang Minh Chung [email protected]于2018年8月17日周五上午11:09设置:

@cnpcshangbo https://github.com/cnpcshangbo ,谢谢你的视频。
我发布此信息是为了帮助其他人消除我的困惑。
即使帧掩码是“ FRAME_BODY_NED = 8”, ROS命令应该仍然在ENU中。 ENU-> NED转换将通过
大夫。
实际上,从视频来看,该行为是:

  • x = 0.1 --->右边
  • y = 0.1 --->转发
    显然它仍在ENU中。 但是,这种混乱使我花了一个星期
    拔头发...

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/mavlink/mavros/issues/792#issuecomment-413745084或静音
线程
https://github.com/notifications/unsubscribe-auth/AEm3NdefOViosyJKxQlf2h0ZweC8lO6uks5uRjP9gaJpZM4PDCb2

在地图框@Nuno中,不是应该将BODY向前x y,向左y,将x向东,将y向北?

我是否正确,我们实际上在这里有3个约定:
1)NED:PX4车载评估和控制
2)ENU:mavros命令消息的标准输入格式
3)NWU:ROS中的典型坐标系

不。ROS中没有NWU。
http://www.ros.org/reps/rep-0103.html

@AlexisTM的北或东不应该用于指定身体约定,而应指定诸如前,左等方向。

好的。 但是,如果我没记错的话,我认为我们还有3个约定?
1)NED:板载控制
2)正确向前:mavros如何理解原始(速度)设定值
3)前向左:ROS约定

@hmchung我们在地图框中使用速度设定值,它是ENU(ROS约定)

请注意,应该只有两个约定! Pixhawk和ENU上的NED:您在ROS上所做的任何事情。

前向左(FLU)是车身框架的ROS约定。 东北向上(ENU)是本地/单词框架的ROS约定。

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