获取Parrot-Sphinx仿真环境中Bebop 2的飞行信息

本篇博客介绍了在使用Parrot-Sphinx进行Bebop 2的飞行仿真时,如何实时读取飞行信息。关于Parrot-Sphinx的安装和初步使用,参考:ROS + Parrot-Sphinx进行Bebop无人机仿真

测试环境:

  • Ubuntu 18.04
  • ROS Melodic

使用步骤:

  1. 启动firmwared服务
    打开一个终端,输入:

    $ sudo systemctl start firmwared.service
    

    并检查是否启动成功:

    $ fdc ping
    

    若启动成功,将会得到PONG的响应。

  2. 运行Sphinx
    打开一个终端,运行sphinx,如:

    $ cd ~/ROS/hai_ws/src/bebop2_toolbox/bebop2_sphinx/
    $ ls
    $ sphinx --datalog ./worlds/empty.world ./drones/bebop2_eth0.drone
    

    注意:为了使sphinx在运行时提供实时的数据记录,需要添加–datalog的选项,即:

    $ sphinx --datalog my.world my.drone
    

    上面执行的命令中,.world文件用的是sphinx默认的一个empty.world,而.drone文件进行了一些修改:

    <?xml version="1.0" encoding="UTF-8"?>
    <drone
      name="Bebop1"
      firmware="/home/hai/ROS/hai_ws/src/bebop2_toolbox/bebop2_sphinx/firmware/ardrone3-milos_pc.ext2_latest.zip"
      hardware="milosboard">
      <machine_params
        low_gpu="false"
        with_front_cam="false"
        with_hd_battery="false"
        with_flir="false"
        flir_pos="tilted"/>
      <pose>1 0 0.2 0 0 0</pose>
      <interface>eth1</interface>
      <!-- 'wlan0' may need to be replaced the actual wifi interface name -->
      <stolen_interface>eth0:eth0:192.168.42.1/24</stolen_interface>
    </drone>
    

    注意其中的name定义了运行该文件后在gazebo中生成的无人机的名称。

  3. 查看无人机的飞行数据
    打开一个终端,查看可见的ros topic:

    $ rostopic list 
    /rosout
    /rosout_agg
    

    发现没有无人机飞行相关的信息。在终端中继续运行:

    $ parrot-gz topic -l
    

    可以看到一个话题列表(以下仅含部分):

    $ parrot-gz topic -l
    /gazebo/default/Bebop1/body/ultrasound/scan
    /gazebo/default/Bebop1/body/vertical_camera/image
    /gazebo/default/Bebop1/body/wrench
    /gazebo/default/atmosphere
    /gazebo/default/model/info
    /gazebo/default/model/modify
    

    其中/gazebo/default/pose/info话题包含了仿真器中歌模型的实时位姿信息,可以对其进行查看:

    $ parrot-gz topic -e /gazebo/default/pose/info
    

    获得实时信息:

    time {
      sec: 566
      nsec: 820000000
    }
    pose {
      name: "Bebop1"
      id: 10
      position {
        x: 0.99899889677977471
        y: -4.2870200141800114e-05
        z: 0.0048740620753592936
      }
      orientation {
        x: 1.3384541576419549e-06
        y: -5.7508756664778854e-05
        z: 0.017040173236204895
        w: 0.9998548040525842
      }
    }
    pose {
      name: "Bebop1::body"
      id: 11
      position {
        x: 0
        y: 0
        z: 0.045
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    
  4. 查看更多的话题信息
    在终端中输入:

    $ parrot-gz topic -h
    

    可以获取一个简短的帮助文件信息,通过设置不同的选项对相关话题的信息进行查看,如可在终端中输入$ parrot-gz topic -z /gazebo/default/pose/info查看上述位姿信息的发送频率,约为60Hz左右。在终端中输入$ parrot-gz topic -i /gazebo/default/pose/info可以得到该话题的类型等信息:

    Type: gazebo.msgs.PosesStamped
    Publishers:
    	127.0.0.1:33917
    Subscribers:
    	127.0.0.1:46613
    
  5. 为了方便的通过ros topic来获取需要记录的飞行信息,可以将该/gazebo/default/pose/info信息转换为ros topic信息后再进行发出。主要代码如下:

    my_logger.pose_gazebo_sub = node->Subscribe("/gazebo/default/pose/info", &data_logger::read_pose, &my_logger);
    
    geometry_msgs::PoseStamped pose_temp;
    
    // Reading Follower pose from Gazebo
    void data_logger::read_pose(ConstPosesStampedPtr &msg)
    {
    	pose_temp.header.frame_id = "world";
    	// pose_temp.header.seq = 0;
    	const ::gazebo::msgs::Time &time_now = msg->time();
    	pose_temp.header.stamp.sec = time_now.sec();
    	pose_temp.header.stamp.nsec = time_now.nsec();
    
    	for (int i =0; i < msg->pose_size(); ++i)
        	{
    		const ::gazebo::msgs::Pose &pose_now = msg->pose(i);
    		if (pose_now.name() == "Bebop1")
    		{
    			const ::gazebo::msgs::Vector3d &position = pose_now.position();
    			const ::gazebo::msgs::Quaternion q = pose_now.orientation();
    
    			pose_temp.pose.position.x = position.x();
    			pose_temp.pose.position.y = position.y();
    			pose_temp.pose.position.z = position.z();
    			pose_temp.pose.orientation.w = q.w();
    			pose_temp.pose.orientation.x = q.x();
    			pose_temp.pose.orientation.y = q.y();
    			pose_temp.pose.orientation.z = q.z();
    
    			this->pose_pub.publish(pose_temp);
    		}
    	}
    }
    

注意!!!

  1. 使用parrot-gz命令查看仿真信息时,实际上使用的是gazebo-7命令。而在ROS Melodic中默认的版本是gazebo-9,因此上述第五步的转换中将会出现因为版本冲突造成的错误。

参考资料:https://forum.developer.parrot.com/t/how-to-get-drone-status-and-parameters/8697/10

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常抱歉,我的回答已经过时了。您是正确的,https://github.com/parrot-office/tesseract 这个项目已经不再维护了。如果您需要使用 Tesseract OCR 引擎,可以从以下渠道获取: 1. 从 Tesseract OCR 的官方代码库下载源代码,并自行编译为可执行文件。编译 Tesseract OCR 需要一定的编程和系统知识,如果您不熟悉这些内容,可能会比较困难。 2. 从第三方网站下载预编译的 Tesseract OCR 可执行文件。请注意,从第三方网站下载的文件可能存在安全风险,建议仔细核实文件来源和完整性。以下是一些可能有用的网站: - https://github.com/UB-Mannheim/tesseract/wiki - 该网站提供了 Windows 和 Linux 下的安装包和便携版。 - https://digi.bib.uni-mannheim.de/tesseract/ - 该网站提供了 Tesseract OCR 的 Windows 和 Linux 下的便携版,包括最新版本和旧版本。 - https://sourceforge.net/projects/tesseract-ocr-alt/files/ - 该网站提供了 Tesseract OCR 的一些旧版本可执行文件的下载。 请注意,使用 Tesseract OCR 引擎进行 OCR 识别时,需要使用相应的语言训练数据文件才能获得更好的识别效果。您可以从 Tesseract OCR 官网(https://github.com/tesseract-ocr/tessdata)下载所需的语言训练数据文件,将其放到 Tesseract OCR 引擎的 `tessdata` 目录下即可。例如,如果您需要识别文简体文字,可以下载 `chi_sim.traineddata` 文件,并将其放到 `tessdata` 目录下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值