编译PX4固件

2023-05-16

PX4编译

文章目录

  • PX4编译
    • 疑难杂症
      • bug1
      • bug2
      • catkin_build_isolated
    • 官方脚本
      • Step1
      • Step2 安装常用依赖
      • Step3 创建并运行脚本
      • Step4 补全代码子模块
      • Step5 验证仿真
    • 官方offboard 例程
      • offboard控制
      • 启动
        • Step1:启动gazebo模型
        • Step2:启动Mavros
        • Step3:启动offboard示例程序
        • 节点
      • 利用launch文件同时启动Mavros和gazebo
      • 更换模型
    • 速度控制
      • Topic1
      • Topic2
    • Apriltag 识别定位
      • launch文件修改
      • 位姿信息/tf或/tag_detections

疑难杂症

bug1

[gazebo-3] process has died [pid 19047, exit code 255]

在这里插入图片描述

gazebo崩溃,解决方式 :killall gzserver

bug2

OpenCV库没有添加链接

在这里插入图片描述

在CMakelists.txt末尾添加OpenCV库

在这里插入图片描述

catkin_build_isolated

单独编译各个包,如果遇到一个包有错,可以正常编译剩余的九个包。

source ./devel_isolated/setup.zsh

使用里面的包时,记得在新的终端进入catkin_ws要source环境变量:

source ./devel_isolated/setup.zsh

官方脚本

https://dev.px4.io/v1.9.0/en/setup/dev_env_linux_ubuntu.html

Step1

打开一个终端执行下面的命令,让当前用户从属dialout用户组,防止以后的权限问题。

sudo usermod -a -G dialout $USER

执行完这一之后,注销(关机),再重新登入(开机)

Step2 安装常用依赖

如果是一台没有安装ROS的新ubuntu18.04系统,可以直接使用脚本

在这里插入图片描述

这个脚本会帮你安装ROS,Gazebo, Mavros等工具

如果已经安装了desktop-full版本的ROS,则采用脚本

在这里插入图片描述

该脚本内容如下

#!/bin/bash

## Bash script for setting up a PX4 development environment on Ubuntu LTS (16.04).
## It can be used for installing simulators (only) or for installing the preconditions for Snapdragon Flight or Raspberry Pi.
##
## Installs:
## - Common dependencies and tools for all targets (including: Ninja build system, Qt Creator, pyulog)
## - FastRTPS and FastCDR
## - jMAVSim simulator dependencies
## - PX4/Firmware source (to ~/src/Firmware/)

# Preventing sudo timeout https://serverfault.com/a/833888
trap "exit" INT TERM; trap "kill 0" EXIT; sudo -v || exit $?; sleep 1; while true; do sleep 60; sudo -nv; done 2>/dev/null &

# Ubuntu Config
# 先卸载掉干扰串口和USB的一个Ubuntu自带的包,一般这个包用不上,以后如果要用可以再下载。
echo "We must first remove modemmanager"
sudo apt-get remove modemmanager -y


# Common dependencies
# 公共依赖下载
echo "Installing common dependencies"
# 更新源
sudo apt-get update -y
sudo apt-get install git zip qtcreator cmake build-essential genromfs ninja-build exiftool astyle -y
# make sure xxd is installed, dedicated xxd package since Ubuntu 18.04 but was squashed into vim-common before
which xxd || sudo apt install xxd -y || sudo apt-get install vim-common --no-install-recommends -y
# Required python packages
sudo apt-get install python-argparse python-empy python-toml python-numpy python-dev python-pip -y
sudo -H pip install --upgrade pip
sudo -H pip install pandas jinja2 pyserial pyyaml
# optional python tools
sudo -H pip install pyulog

# Install FastRTPS 1.7.1 and FastCDR-1.0.8
# 简单来说Fast RTPS就是ROS 2中用来订阅发布消息的组件
fastrtps_dir=$HOME/eProsima_FastRTPS-1.7.1-Linux
echo "Installing FastRTPS to: $fastrtps_dir"
if [ -d "$fastrtps_dir" ]
then
    echo " FastRTPS already installed."
else
    pushd .
    cd ~
    wget https://www.eprosima.com/index.php/component/ars/repository/eprosima-fast-rtps/eprosima-fast-rtps-1-7-1/eprosima_fastrtps-1-7-1-linux-tar-gz -O eprosima_fastrtps-1-7-1-linux.tar.gz
    tar -xzf eprosima_fastrtps-1-7-1-linux.tar.gz eProsima_FastRTPS-1.7.1-Linux/
    tar -xzf eprosima_fastrtps-1-7-1-linux.tar.gz requiredcomponents
    tar -xzf requiredcomponents/eProsima_FastCDR-1.0.8-Linux.tar.gz
    cpucores=$(( $(lscpu | grep Core.*per.*socket | awk -F: '{print $2}') * $(lscpu | grep Socket\(s\) | awk -F: '{print $2}') ))
    (cd eProsima_FastCDR-1.0.8-Linux && ./configure --libdir=/usr/lib && make -j$cpucores && sudo make install)
    (cd eProsima_FastRTPS-1.7.1-Linux && ./configure --libdir=/usr/lib && make -j$cpucores && sudo make install)
    rm -rf requiredcomponents eprosima_fastrtps-1-7-1-linux.tar.gz
    popd
fi

# jMAVSim simulator dependencies
# jMAVSim仿真依赖安装
echo "Installing jMAVSim simulator dependencies"
sudo apt-get install ant openjdk-8-jdk openjdk-8-jre -y

# Clone PX4/Firmware
# 下载PX4源码到 src/Firmware
clone_dir=~/src
echo "Cloning PX4 to: $clone_dir."
if [ -d "$clone_dir" ]
then
    echo " Firmware already cloned."
else
    mkdir -p $clone_dir
    cd $clone_dir
    git clone https://github.com/PX4/Firmware.git
fi

Step3 创建并运行脚本

进入Home

gedit ubuntu_sim_common_deps.sh //创建脚本,再将上述内容复制进去
source ubuntu_sim_common_deps.sh //等待

如果报错,缺少包,则缺什么补什么

Step4 补全代码子模块

接下来补全代码的子模块,防止编译的时候出一下意外的问题。

cd arc/Firmware
git submodule update --init --recursive

Step5 验证仿真

首先编译jmavsim仿真验证。

cd src/Firmware
make px4_sitl jmavsim

如果没有什么问题会显示出下面的界面
在这里插入图片描述

终端输入下面的命令,飞机会起飞

commander takeoff

现在可以Ctrl/Command + C关掉继续进行下面的操作
输入下面的命令然后进行gazebo仿真的编译

cd src/Firmware
make px4_sitl gazebo

如果没有问题,gazebo正常打开,出现了一个小飞机.

在这里插入图片描述

官方offboard 例程

offboard控制

打开官方

https://dev.px4.io/v1.9.0/zh/ros/mavros_offboard.htmlMAVROS

Offboard control example链接,然后在catkin_ws/src目录中,运行命令

catkin_create_pkg offboard_pkg roscpp std_msgs geometry_msgs mavros_msgs

然后定位到目录~/catkin_ws/src/offboard_pkg/src/,新建一个文件offboard_node.cpp

gedit offboard_node.cpp

将代码复制进去(官方示例):

/**
 * @file offb_node.cpp
 * @brief Offboard control example node, written with MAVROS version 0.19.x, PX4 Pro Flight
 * Stack and tested in Gazebo SITL
 */

#include <ros/ros.h>
#include <geometry_msgs/PoseStamped.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/SetMode.h>
#include <mavros_msgs/State.h>
//我们创建一个简单的回调函数来保存飞控的当前状态。我们可以用它检查连接状态,解锁状态以及外部控制标志。
mavros_msgs::State current_state;
void state_cb(const mavros_msgs::State::ConstPtr& msg){
    current_state = *msg;
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "offb_node");
    ros::NodeHandle nh;

    ros::Subscriber state_sub = nh.subscribe<mavros_msgs::State>
            ("mavros/state", 10, state_cb);
    ros::Publisher local_pos_pub = nh.advertise<geometry_msgs::PoseStamped>
            ("mavros/setpoint_position/local", 10);
    ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool>
            ("mavros/cmd/arming");
    ros::ServiceClient set_mode_client = nh.serviceClient<mavros_msgs::SetMode>
            ("mavros/set_mode");

    //the setpoint publishing rate MUST be faster than 2Hz
    ros::Rate rate(20.0);

    // wait for FCU connection
    while(ros::ok() && !current_state.connected){
        ros::spinOnce();
        rate.sleep();
    }

    geometry_msgs::PoseStamped pose;
    pose.pose.position.x = 0;
    pose.pose.position.y = 0;
    pose.pose.position.z = 2;

    //send a few setpoints before starting
    for(int i = 100; ros::ok() && i > 0; --i){
        local_pos_pub.publish(pose);
        ros::spinOnce();
        rate.sleep();
    }

    mavros_msgs::SetMode offb_set_mode;
    offb_set_mode.request.custom_mode = "OFFBOARD";

    mavros_msgs::CommandBool arm_cmd;
    arm_cmd.request.value = true;

    ros::Time last_request = ros::Time::now();

    while(ros::ok()){
        if( current_state.mode != "OFFBOARD" &&
            (ros::Time::now() - last_request > ros::Duration(5.0))){
            if( set_mode_client.call(offb_set_mode) &&
                offb_set_mode.response.mode_sent){
                ROS_INFO("Offboard enabled");
            }
            last_request = ros::Time::now();
        } else {
            if( !current_state.armed &&
                (ros::Time::now() - last_request > ros::Duration(5.0))){
                if( arming_client.call(arm_cmd) &&
                    arm_cmd.response.success){
                    ROS_INFO("Vehicle armed");
                }
                last_request = ros::Time::now();
            }
        }

        local_pos_pub.publish(pose);

        ros::spinOnce();
        rate.sleep();
    }
    return 0;
}

然后打开目录~/catkin_ws/src/offboard_pkg/下的CMakeLists.txt添加下面的两行:

add_executable(offboard_node src/offboard_node.cpp)
target_link_libraries(offboard_node ${catkin_LIBRARIES})

然后到目录~/catkin_ws下,运行命令

catkin_make

等待编译完成后,如果你要在gazebo中仿真,运行命令(启动PX4的gazebo仿真环境)四旋翼无人机名字:iris

启动

Step1:启动gazebo模型

下面三个命令三选一

make px4_sitl gazebo_iris//四旋翼
make px4_sitl gazebo_iris_opt_flow//带双目摄像头的无人机
make px4_sitl_default gazebo // 效果和第一条代码一样

无人机模型可以更换,模型存放于目录/home/fangcheng/src/Firmware/Tools/sitl_gazebo/models

只需将gazebo_iris换成相应的模型即可:模型列表

https://dev.px4.io/v1.9.0/zh/simulation/gazebo.html

Step2:启动Mavros

然后在终端下运行命令启动Mavros:(官网也有) 目的是启动PX4Mavros之间的连接。/home/fangcheng/src/Firmware/launch/px4.launch

roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"

Step3:启动offboard示例程序

然后运行命令,启动示例程序

rosrun offboard_pkg offboard_node

然后进入gazebo中进行观察。

节点

在这里插入图片描述

在这里插入图片描述

查看消息的具体格式

在这里插入图片描述

PoseStamped
Header header
Pose pose
uint32 seq
time stamp
string frame-id
Point position
Quaternion quaternion
float64 x
float64 y
float64 z
float64 x
float64 y
float64 z
float64 w

在这里插入图片描述

bool类型只有两个值:true or false

在这里插入图片描述

Nodes Only

在这里插入图片描述

利用launch文件同时启动Mavros和gazebo

打开一个终端依次输入

source ~/src/Firmware/Tools/setup_gazebo.bash ~/src/Firmware/ ~/src/Firmware/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/src/Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/src/Firmware/Tools/sitl_gazebo

但每打开一个新的终端都这样做很麻烦,可以将以上代码添加到.zshrc末尾

gedit .zshrc
source ~/.zshrc

以后打开新的终端直接运行下面的launch即可

再运行固件库中写好的launch文件,存放于/home/fangcheng/src/Firmware/launch/mavros_posix_sitl.launch

此命令同时启动了mavros和gazebo

roslaunch px4 mavros_posix_sitl.launch 

更换模型

在~/src/Firmware/Tools/sitl_gazebo/models中存放了许多模型,默认的模型为iris,常用的还有https://dev.px4.io/v1.9.0/zh/simulation/gazebo.html

其中iris_stereo_camera为带双目摄像头的模型,以此模型为例演示如何修改启动的模型

首先确认要更换的模型存在于~/src/Firmware/Tools/sitl_gazebo/models

打开/home/fangcheng/src/Firmware/launch/mavros_posix_sitl.launch文件,将第16行更改为

<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/iris_stereo_camera/iris_stereo_camera.sdf"/>

保存后再运行

roslaunch px4 mavros_posix_sitl.launch 

查看话题,可以发现多了很多双目相关的话题

在这里插入图片描述

更换为单目摄像机 iris_fpv_cam,方法同上。但默认的摄像头不在下方,要改为下置摄像头,则需要改模型参数

将iris_fpv_cam.sdf中的0 0 0 0 0 0改成0 0 0 0 1.57 0

在这里插入图片描述

to
在这里插入图片描述

采集的图像话题为

在这里插入图片描述

可以使用 rqt_image_view来查看

速度控制

Topic1

mavros/setpoint_raw/local

在这里插入图片描述

选择坐标系为FRAME_BODY_NED表示使用机身坐标系

当设置yaw_rate=pos.velocity.x或pos.velocity.y可以画圆。

Topic2

mavros/setpoint_velocity/cmd_vel_unstamped

在这里插入图片描述

在这里插入图片描述

相对本地gazebo坐标系,而非机身坐标系。

Apriltag 识别定位

CSDN:

https://blog.csdn.net/weixin_41139709/article/details/81385274?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.channel_param

Tutorials:

http://wiki.ros.org/apriltag_ros/Tutorials/Detection%20in%20a%20video%20stream

launch文件修改

位姿信息/tf或/tag_detections

在这里插入图片描述

在这里插入图片描述

平移向量

相机后方,z为负,前方z为正;

相机左边,x为负,右边x为正;

相机上方,y为负,下方y为正。

/tag_detections  tag相對於相機的坐標
相機與飛機的相對位姿爲(0,0,0,0,0,0)
/mavros/local_position/pose 飛機相對於世界的坐標
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译PX4固件 的相关文章

  • pixhawk px4 spi设备驱动

    此篇blog是以nuttx官网介绍为出发点 xff0c 先分析如何初始化的 xff0c 再分析如何读取传感器数据的 xff0c 最后对比了字符型设备操作和spi驱动的实现方式的差别 如有错误还请指正 6 字符型设备 所有的结构体和API都在
  • 用matlab处理px4日志的转换方法

    px4 v1 8 2的版本可以选择用sdlog2模块记录日志 xff0c 通过QGC地面站下载的日志格式为 ulg xff0c 将下载成功的 ulg扩展名改为 bin xff0c 然后用MP地面站 数据闪存日志 创建matlab文件 xff
  • PX4与TX2通信

    PX4与TX2通信以及相关数据的获取 目录 1 PX4硬件接口 2 TELEM1 2接口线序 3 PX4与TX2通信 PX4 IO口定义 xff1a PX4硬件 xff1a 4 通信测试 5 RTPS 43 ROS Jetson TX2终端
  • px4自定义mavlink收不到消息的问题

    px4版本1 12稳定版 最近在做px4二次开发相关工作 按照网上的一些教程自定义了一个mavlink消息用来控制无人机 按照教程里面的单独开了一个xml来定义消息 最后生成的消息在px4端通过流传输的方式自己写的客户端可以收到消息 但是客
  • 【2020-8-9】APM,PX4,GAZEBO,MAVLINK,MAVROS,ROS之间的关系以及科研设备选型

    0 概述 无人机自主飞行平台可以分为四个部分 xff1a 动力平台 xff0c 飞行控制器 xff0c 机载电脑和模拟平台 动力平台 xff1a 负责执行飞行任务 xff0c 包括螺旋桨 电机 机架等 xff0c 用于科研的一般都是F380
  • PX4代码学习系列博客(5)——在px4中添加自己的模块

    怎么在px4中添加自己的模块 在 px4固件目录结构和代码风格 这一节 xff0c 曾经说过NuttX是一个实时的嵌入式系统 xff0c 上面可以像windows那样运行程序 那既然是应用程序 xff0c 那我们应该也能写一些可以在Nutt
  • PX4进入系统控制台以及运行程序

    这里提供进入控制台两种办法 1 运行 Tools mavlink shell py dev ttyACM0 是我进入Px4系统控制台的命令 xff0c 进入之后应该是这样 Pixhawk src Firmware Tools mavlink
  • PX4 ---- Mixer

    文章目录 Mixer 混合控制 作用输入输出装载混控文件MAVROS代码解析总结示例MAINAUX Mixer 混合控制 作用 经过位置控制和姿态控制后 xff0c 控制量通过 actuator controls发布 xff0c 其中 co
  • PX4 -- EKF2

    文章目录 EKF2参数高度估计Range Finder滤波 单变量更新单变量更新对多变量的影响 EKF2 参数 EKF2 中有一类 GATE 参数 当测量值在 VAR GATE 范围内才会更新值 高度估计 四种高度控制方法 xff1a 气压
  • PX4模块设计之一:SITL & HITL模拟框架

    PX4模块设计之一 xff1a SITL amp HITL模拟框架 1 模拟框架1 1 SITL模拟框架1 2 HITL模拟框架 2 模拟器类型3 MAVLink API4 总结 基于PX4开源软件框架简明简介的框架设计 xff0c 逐步分
  • PX4模块设计之十三:WorkQueue设计

    PX4模块设计之十三 xff1a WorkQueue设计 1 WorkQueue启动2 WorkQueue接口2 1 基本接口2 2 辅助接口2 3 WorkQueue任务函数2 3 1 Flat Build2 3 2 Protected
  • PX4模块设计之十七:ModuleBase模块

    PX4模块设计之十七 xff1a ModuleBase模块 1 ModuleBase模块介绍2 ModuleBase类介绍3 ModuleBase类功能介绍3 1 模块入口3 2 模块启动3 3 模块停止3 4 状态查询3 5 任务回调3
  • PX4模块设计之十八:Logger模块

    PX4模块设计之十八 xff1a Logger模块 1 Logger模块简介2 模块入口函数2 1 主入口logger main2 2 自定义子命令Logger custom command2 3 日志主题uORB注册 3 重要实现函数3
  • PX4模块设计之三十:Hysteresis类

    PX4模块设计之三十 xff1a Hysteresis类 1 Hysteresis类简介2 Hysteresis类成员变量介绍3 Hysteresis类迟滞逻辑4 Hysteresis类重要方法4 1 Hysteresis bool ini
  • PX4模块设计之三十三:Sensors模块

    PX4模块设计之三十三 xff1a Sensors模块 1 Sensors模块简介2 模块入口函数2 1 主入口sensors main2 2 自定义子命令custom command2 3 模块状态print status 重载 3 Se
  • PX4模块设计之四十六:dataman模块

    PX4模块设计之四十六 xff1a dataman模块 1 dataman模块简介2 模块入口函数dataman main3 dataman模块重要函数3 1 start3 2 stop3 3 status3 4 task main 4 A
  • Px4源码框架结构图

    此篇blog的目的是对px4工程有一个整体认识 xff0c 对各个信号的流向有个了解 xff0c 以及控制算法采用的控制框架 PX4自动驾驶仪软件 可分为三大部分 xff1a 实时操作系统 中间件和飞行控制栈 1 NuttX实时操作系统 提
  • px4无人机常识介绍(固件,px4等)

    专业名词解释 aircraft 任何可以飞或者可以携带物品还是搭载旅客的飞行器统称为飞机 航空器 uav 无人驾驶飞机 vehicle 飞行器 airplane plane aero plane 有机翼和一个或多个引擎的飞行器统称为飞机 D
  • PX4软件在环仿真注意点

    注 xff1a 最新内容参考PX4 user guide 点击此处 PX4下载指定版本代码和刷固件的三种方式 点击此处 PX4sitl固件编译方法 点击此处 PX4开发指南 点击此处 PX4无人机仿真 Gazebo 点击此处 px4仿真 知
  • PX4之常用函数解读

    PX4Firmware 经常有人将Pixhawk PX4 APM还有ArduPilot弄混 这里首先还是简要说明一下 xff1a Pixhawk是飞控硬件平台 xff0c PX4和ArduPilot都是开源的可以烧写到Pixhawk飞控中的

随机推荐

  • select()

    select 简述 xff1a 确定一个或多个套接口的状态 xff0c 如需要则等待 include lt winsock h gt int PASCAL FAR select int nfds fd set FAR readfds fd
  • C#工控上位机开发

    对于电源软件开发者来说 xff0c 上位机的开发难度是远远小于下位机的 xff0c 之前几个月我一直在研究电力电子技术和下位机的控制算法 xff0c 也有了一点点的收获 xff0c 但说实话还是差的太远了 xff0c 而且人力物力资源非常稀
  • 虚拟机运行gazebo卡

    操作系统 xff1a ubuntu18 04 链接 B站链接 xff1a Autolabor初级教程 ROS机器人入门 问题 虚拟机gazebo卡的话 xff0c 可以试试在虚拟机设置里打开3d加速 xff0c 在每次启动gazebo前命令
  • 谨以此文献给才毕业一两年的朋友

    谨以此文献给才毕业一两年的朋友 选自同事信件 谨以此文献给才毕业一两年的朋友我们终于进入了这个社会 从此结束了被学校老师看管的生涯 xff0c 结束了做父母乖宝贝的日子 xff0c 也结束从父母兄长那里拿钱的幸福时光 我们从家里搬了出来 x
  • winform怎样设置comboBox默认值

    combox是开发winform常用的组件之一 xff0c 如何添加他的默认值呢 xff01 方法 步骤 新建一个windows窗体应用程序 xff0c 这里项目命名为test01 在默认打开的Form1中 xff0c 在左边的工具箱拖拉两
  • Internal server error 500 问题解决思路

    我们系统在一次升级之后 xff0c 生产环境大量出现Internal server error 500错误 xff0c 具体场景 xff1a 在APP上使用拍照功能后 xff0c APP通过Http协议上传压缩后的照片到服务端 xff0c
  • c# List集合类常用操作:二、增加

    所有操作基于以下类 class Employees public int Id get set public string Name get set public string City get set public DateTime Bi
  • 485通讯协议_终于有人把RS485通讯协议应用及缺点分析清楚了,看完收获多多

    RS 485是工业控制环境中常用的通信协议 xff0c 具有抗干扰能力强 传输距离长的特点 RS 485通信协议是对RS 232协议的改进 协议层不变 xff0c 但只有物理层得到了改进 xff0c 从而保留了串行通信协议应用简单的特点 R
  • 常用串口调试工具比较(详细)

    目前有许多免费的串口调试工具 xff0c 比较常用的有 xff1a 1 友善串口调试助手 xff08 v2 6 5 xff09 优点 xff1a 1 xff09 使用方便 xff0c 不丢包 xff1b 2 xff09 串口自动识别 xff
  • 请问在Delphi中用什么方式打开窗体能让它一直在最前面,而且还可以对其它窗体进行操作?

    将要打开的窗口FormStyle属性设置为 fsStayOnTop xff0c 然后再用show方法打开窗口
  • 微软Surface Pro 4/5平板如何重装Win10系统?教程分享

    重装Win10系统很多用户都会 xff0c 但是如果是平板 xff0c 那么操作起来和电脑可能会有不同 xff0c 毕竟平板需要触屏的支持 xff0c 今天我们要讲的是微软Surface Pro 4 5如何重装Win10系统 xff0c 主
  • C#发送16进制串口数据

    个困扰两天的问题 xff1a 需要通过串 向设备发送的数据 xff1a 0A010 7e 08 00 11 00 00 7e 76 7f 我先将每个16进制字符转换成10进制 xff0c 再将其转换成ASCII码对应的字符 lt summa
  • C# WinForm遍历窗体控件的3种方法

    这篇文章主要介绍了C WinForm遍历窗体控件的3种方法 xff0c 帮助大家更好的理解和使用c xff0c 感兴趣的朋友可以了解下 目录 1 循环遍历2 递归遍历3 使用反射 1 循环遍历 1 2 3 4 5 6 7 8 private
  • gazebo_ros:未找到命令

    操作系统 xff1a ubuntu18 04 链接 B站链接 xff1a Autolabor初级教程 ROS机器人入门 问题 gazebo ros xff1a 未找到命令 解决办法 sudo apt install ros span cla
  • 【深入学习51单片机】一、基于8051的RTOS内核任务切换堆栈过程剖析

    我一直在写裸机 xff0c 写的多了自然会对rtos产生浓厚兴趣 xff0c 最有意思的莫过于任务切换了 xff0c 可以在多个死循环里面跳转 xff0c 很神奇的样子 本文学习参考程序是网上一个基于8051的简易os xff0c 从哪里下
  • 如何使用网络调试助手调试UDP

    最近的一个项目需要使用UDP xff0c 在网上下载了一个网络调试助手的小工具进行调试 xff0c 非常方便 xff0c 在这里简单的向大家介绍一下它的使用方法 xff0c 仅供参考 xff0c 其他类似的调试工具都差不多 工具 原料 网络
  • Delphi 回调函数及例子

    Delphi回调函数 1 回调函数的概述 回调函数是这样一种机制 xff1a 调用者在初始化一个对象 xff08 这里的对象是泛指 xff0c 包括OOP中的对象 全局函数等 xff09 时 xff0c 将一些参数传递给对象 xff0c 同
  • 解决Window10连接共享目录 登录失败:未知的用户名或错误密码 的解决方法

    关于未知的用户名或错误密码 win10共享这个很多人还不知道 xff0c 今天菲菲来为大家解答以上的问题 xff0c 现在让我们一起来看看吧 xff01 1 按 Win 43 R 运行 执行 窗口 xff0c 输入 gpedit msc 命
  • 教您电脑电源短接哪两根线风扇转

    如果哦我们没有接电脑主板 xff0c 如何让电脑电源风扇转动 我们只有通过电脑电源线的短接来解决这个问题 xff0c 但是电脑电源线哪两跟线使风扇转动呢 一起跟小编来看看吧 电脑电源短接哪两根线风扇转 xff1a 1 电脑电源本身是一个供电
  • 编译PX4固件

    PX4编译 文章目录 PX4编译疑难杂症bug1bug2catkin build isolated 官方脚本Step1Step2 安装常用依赖Step3 创建并运行脚本Step4 补全代码子模块Step5 验证仿真 官方offboard 例