当前位置: 首页 > news >正文

LIO-SAM源码解析(四):imuPreintegration.cpp

1. 代码流程

2. 功能说明

这个cpp文件主要有两个类,一个叫IMUPreintegration类,一个叫TransformFusion类。

现在我们分开讲,先说IMUPreintegration类。

关于IMU原始数据,送入imuhandle中:

2.1. imuhandle

imu原始数据,会先被坐标系转换,通过调用头文件里的imuConverter函数,转换到一个“雷达中间系”中,其实和真正的雷达系差了一个平移。

转换后,会存入两个队列,一个imuQueOpt队列,一个imuQueImu队列。这两队列有什么区别和联系呢?这个主要在另一个回调函数odometryHandler会被处理,在那个地方我会讲。这里我们可以先理解为,imuQueImu是真正我们要用的数据,imuQueOpt是一个中间缓存的数据结构,用来优化imu的bias之类的东西。

在标志位doneFirstOpt为True的时候(注意这个标志位,这是一个很重要的变量,之后会再提到),每到一个imu数据,就用imuIntegratorImu_这个预积分器,把这一帧imu数据累积进去,然后预测当前时刻的状态:currentState = imuIntegratorImu_->predict(prevStateOdom, prevBiasOdom); 其中prevStateOdom就是之前系统所保持的状态。

把currentState,通过imu2Lidar,从“中间系”给平移到真正的雷达系,然后发布出去。发布的话题就叫odometry/imu_incremental,这也就是imageProjection.cpp的总结部分的第2点部分提到的“imu”里程计。

2.2. odomHandle

这部分订阅的是/mapping/odometry_incremental,这个话题是由mapOptmization.cpp发布的,可以把它理解为激光里程计。同理,也不要被incremental误导,觉得好像是两帧激光之间的变换,可不是这样的啊。它和imu里程计性质类似,就是相对世界坐标系的位姿。

2.2.1. 初始化系统

从imuQueOpt队列里,删掉当前这帧激光里程计时间上之前的数据,然后把雷达的pose变换到“中间系”,保存为prevPose。图优化部分,加入乱七八糟各种东西,priorVel,priorBias,把两个预积分器imuIntegratorImu_,imuIntegratorOpt_给reset一下。(之后简称imu积分器和opt积分器)

这两个预积分器opt积分器和imu积分器有什么区别呢?马上就要讲,在1.2.3部分。

2.2.2. 清理缓存

100帧激光里程计数据了,就把优化器给reset一下(用前面的先验协方差给reset一下)。注意,1.2.1和1.2.2的主要区别在于,1.2.1中的乱七八糟协方差数据,是用构造函数中写入的一大堆(我认为是经验值),而1.2.2这里的协方差,用的是optimizer.marginalCovariance这个轮子算出来的先验协方差。

2.2.3. 正式处理

假设数据如下分布:

之前imu数据 ——————第一帧开始——————第二帧开始————之后imu数据

把“第一帧开始”——“第二帧开始”这个之间的imu数据拿出来,送入opt积分器。这样得到二者之间的预积分,构建imu因子。

然后把Xkey-1 到Xkey之间,加入这个imu因子以及 激光里程计提供的pose因子,整体做一个优化。优化的结果就是bias,以及“第二帧开始”这个时刻的系统位姿。

把优化的结果(主要是bias),重置opt积分器和imu积分器。 然后把当前帧(上图的“第二帧开始”)之前的数据给删掉,用imu积分器,从“第二帧开始”这里开始往后积分。(我们需要明确一点,在这个处理过程中,imu队列也在持续的进数据,(即1.1的imuhandle中)),这里处理完,那么就置donefirst=True,这样1.1.3部分,就可以无缝衔接接着在这里的基础上对imu积分器继续积分。(可以看出,这点处理,Tixiaoshan还是做的比较牛的)

 回顾:在1.1.3部分,发布imu里程计,在这里我们可以的出结果,它并非是纯粹的imu里程计,因为时不时是要加入激光里程计的信息做因子来优化得到imu的bias等信息的。

2.3. TransformFusion类。

2.3.1 lidarOdometryHandler

这部分监听的是/mapping/odometry,(也就是激光雷达里程计)这个回调函数比较特殊,它并没有把雷达里程计的东西再像别的回调函数一样,时刻存到什么队列里去。而是就保存当前的雷达里程计的数据到lidarOdomAffine里面,把时间戳存到lidarOdomTime里面去。

    注意,这里/mapping/odometry和/mapping/odometry_incremental有什么区别呢?我认为本质上区别不大,前者是激光里程计部分直接优化得到的激光位姿,后者相当于激光的位姿经过旋转约束和z轴约束的限制以后,又和原始imu信息里面的角度做了一个加权以后的位姿。

2.3.2 imuOdometryHandler

这部分监听的是/imu/odometry_incremental(也就是上面我一直在说的imu里程计),把imu里程计放到imuodomQueue里面保存,然后把lidarOdomTime之前的数据扔掉,用imu里程计的两时刻差异,再加上lidarOdomAffine的基础进行发布。

实际上,/imu/odometry_incremental本身就是雷达里程计基础上imu数据上的发布,而在现在这里,也是雷达里程计在“imu里程计”上的一个“再次精修”。最后会发布两个内容,一个是odometry/imu,但是这个实际上是无人监听的,我觉得作者主要是发布tf变换,顺手给它发布了。当然我觉得用户可以监听这个数据,我觉得这个应该是频率上最高的一个里程计数据了。

另外还会发布一个path,用来rviz显示,名字叫lio-sam/imu/path。

3. 代码

#include "utility.h"#include <gtsam/geometry/Rot3.h>
#include <gtsam/geometry/Pose3.h>
#include <gtsam/slam/PriorFactor.h>
#include <gtsam/slam/BetweenFactor.h>
#include <gtsam/navigation/GPSFactor.h>
#include <gtsam/navigation/ImuFactor.h>
#include <gtsam/navigation/CombinedImuFactor.h>
#include <gtsam/nonlinear/NonlinearFactorGraph.h>
#include <gtsam/nonlinear/LevenbergMarquardtOptimizer.h>
#include <gtsam/nonlinear/Marginals.h>
#include <gtsam/nonlinear/Values.h>
#include <gtsam/inference/Symbol.h>#include <gtsam/nonlinear/ISAM2.h>
#include <gtsam_unstable/nonlinear/IncrementalFixedLagSmoother.h>using gtsam::symbol_shorthand::X; // Pose3 (x,y,z,r,p,y)
using gtsam::symbol_shorthand::V; // Vel   (xdot,ydot,zdot)
using gtsam::symbol_shorthand::B; // Bias  (ax,ay,az,gx,gy,gz)class TransformFusion : public ParamServer
{
public:std::mutex mtx;ros::Subscriber subImuOdometry;ros::Subscriber subLaserOdometry;ros::Publisher pubImuOdometry;ros::Publisher pubImuPath;Eigen::Affine3f lidarOdomAffine;Eigen::Affine3f imuOdomAffineFront;Eigen::Affine3f imuOdomAffineBack;tf::TransformListener tfListener;tf::StampedTransform lidar2Baselink;double lidarOdomTime = -1;deque<nav_msgs::Odometry> imuOdomQueue;/*** 构造函数*/TransformFusion(){// 如果lidar系与baselink系不同(激光系和载体系),需要外部提供二者之间的变换关系if(lidarFrame != baselinkFrame){try{// 等待3stfListener.waitForTransform(lidarFrame, baselinkFrame, ros::Time(0), ros::Duration(3.0));// lidar系到baselink系的变换tfListener.lookupTransform(lidarFrame, baselinkFrame, ros::Time(0), lidar2Baselink);}catch (tf::TransformException ex){ROS_ERROR("%s",ex.what());}}// 订阅激光里程计,来自mapOptimizationsubLaserOdometry = nh.subscribe<nav_msgs::Odometry>("lio_sam/mapping/odometry", 5, &TransformFusion::lidarOdometryHandler, this, ros::TransportHints().tcpNoDelay());// 订阅imu里程计,来自IMUPreintegrationsubImuOdometry   = nh.subscribe<nav_msgs::Odometry>(odomTopic+"_incremental",   2000, &TransformFusion::imuOdometryHandler,   this, ros::TransportHints().tcpNoDelay());// 发布imu里程计,用于rviz展示pubImuOdometry   = nh.advertise<nav_msgs::Odometry>(odomTopic, 2000);// 发布imu里程计轨迹pubImuPath       = nh.advertise<nav_msgs::Path>    ("lio_sam/imu/path", 1);}/*** 里程计对应变换矩阵*/Eigen::Affine3f odom2affine(nav_msgs::Odometry odom){double x, y, z, roll, pitch, yaw;x = odom.pose.pose.position.x;y = odom.pose.pose.position.y;z = odom.pose.pose.position.z;tf::Quaternion orientation;tf::quaternionMsgToTF(odom.pose.pose.orientation, orientation);tf::Matrix3x3(orientation).getRPY(roll, pitch, yaw);return pcl::getTransformation(x, y, z, roll, pitch, yaw);}/*** 订阅激光里程计,来自mapOptimization*/void lidarOdometryHandler(const nav_msgs::Odometry::ConstPtr& odomMsg){std::lock_guard<std::mutex> lock(mtx);// 激光里程计对应变换矩阵lidarOdomAffine = odom2affine(*odomMsg);// 激光里程计时间戳lidarOdomTime = odomMsg->header.stamp.toSec();}/*** 订阅imu里程计,来自IMUPreintegration* 1、以最近一帧激光里程计位姿为基础,计算该时刻与当前时刻间imu里程计增量位姿变换,相乘得到当前时刻imu里程计位姿* 2、发布当前时刻里程计位姿,用于rviz展示;发布imu里程计路径,注:只是最近一帧激光里程计时刻与当前时刻之间的一段*/void imuOdometryHandler(const nav_msgs::Odometry::ConstPtr& odomMsg){// 发布tf,map与odom系设为同一个系static tf::TransformBroadcaster tfMap2Odom;static tf::Transform map_to_odom = tf::Transform(tf::createQuaternionFromRPY(0, 0, 0), tf::Vector3(0, 0, 0));tfMap2Odom.sendTransform(tf::StampedTransform(map_to_odom, odomMsg->header.stamp, mapFrame, odometryFrame));std::lock_guard<std::mutex> lock(mtx);// 添加imu里程计到队列imuOdomQueue.push_back(*odomMsg);// 从imu里程计队列中删除当前(最近的一帧)激光里程计时刻之前的数据if (lidarOdomTime == -1)return;while (!imuOdomQueue.empty()){if (imuOdomQueue.front().header.stamp.toSec() <= lidarOdomTime)imuOdomQueue.pop_front();elsebreak;}// 最近的一帧激光里程计时刻对应imu里程计位姿Eigen::Affine3f imuOdomAffineFront = odom2affine(imuOdomQueue.front());// 当前时刻imu里程计位姿Eigen::Affine3f imuOdomAffineBack = odom2affine(imuOdomQueue.back());// imu里程计增量位姿变换Eigen::Affine3f imuOdomAffineIncre = imuOdomAffineFront.inverse() * imuOdomAffineBack;// 最近的一帧激光里程计位姿 * imu里程计增量位姿变换 = 当前时刻imu里程计位姿Eigen::Affine3f imuOdomAffineLast = lidarOdomAffine * imuOdomAffineIncre;float x, y, z, roll, pitch, yaw;pcl::getTranslationAndEulerAngles(imuOdomAffineLast, x, y, z, roll, pitch, yaw);// 发布当前时刻里程计位姿nav_msgs::Odometry laserOdometry = imuOdomQueue.back();laserOdometry.pose.pose.position.x = x;laserOdometry.pose.pose.position.y = y;laserOdometry.pose.pose.position.z = z;laserOdometry.pose.pose.orientation = tf::createQuaternionMsgFromRollPitchYaw(roll, pitch, yaw);pubImuOdometry.publish(laserOdometry);// 发布tf,当前时刻odom与baselink系变换关系static tf::TransformBroadcaster tfOdom2BaseLink;tf::Transform tCur;tf::poseMsgToTF(laserOdometry.pose.pose, tCur);if(lidarFrame != baselinkFrame)tCur = tCur * lidar2Baselink;tf::StampedTransform odom_2_baselink = tf::StampedTransform(tCur, odomMsg->header.stamp, odometryFrame, baselinkFrame);tfOdom2BaseLink.sendTransform(odom_2_baselink);// 发布imu里程计路径,注:只是最近一帧激光里程计时刻与当前时刻之间的一段static nav_msgs::Path imuPath;static double last_path_time = -1;double imuTime = imuOdomQueue.back().header.stamp.toSec();// 每隔0.1s添加一个if (imuTime - last_path_time > 0.1){last_path_time = imuTime;geometry_msgs::PoseStamped pose_stamped;pose_stamped.header.stamp = imuOdomQueue.back().header.stamp;pose_stamped.header.frame_id = odometryFrame;pose_stamped.pose = laserOdometry.pose.pose;imuPath.poses.push_back(pose_stamped);// 删除最近一帧激光里程计时刻之前的imu里程计while(!imuPath.poses.empty() && imuPath.poses.front().header.stamp.toSec() < lidarOdomTime - 1.0)imuPath.poses.erase(imuPath.poses.begin());if (pubImuPath.getNumSubscribers() != 0){imuPath.header.stamp = imuOdomQueue.back().header.stamp;imuPath.header.frame_id = odometryFrame;pubImuPath.publish(imuPath);}}}
};class IMUPreintegration : public ParamServer
{
public:std::mutex mtx;// 订阅与发布ros::Subscriber subImu;ros::Subscriber subOdometry;ros::Publisher pubImuOdometry;bool systemInitialized = false;// 噪声协方差gtsam::noiseModel::Diagonal::shared_ptr priorPoseNoise;gtsam::noiseModel::Diagonal::shared_ptr priorVelNoise;gtsam::noiseModel::Diagonal::shared_ptr priorBiasNoise;gtsam::noiseModel::Diagonal::shared_ptr correctionNoise;gtsam::noiseModel::Diagonal::shared_ptr correctionNoise2;gtsam::Vector noiseModelBetweenBias;// imu预积分器gtsam::PreintegratedImuMeasurements *imuIntegratorOpt_;gtsam::PreintegratedImuMeasurements *imuIntegratorImu_;// imu数据队列std::deque<sensor_msgs::Imu> imuQueOpt;std::deque<sensor_msgs::Imu> imuQueImu;// imu因子图优化过程中的状态变量gtsam::Pose3 prevPose_;gtsam::Vector3 prevVel_;gtsam::NavState prevState_;gtsam::imuBias::ConstantBias prevBias_;// imu状态gtsam::NavState prevStateOdom;gtsam::imuBias::ConstantBias prevBiasOdom;bool doneFirstOpt = false;double lastImuT_imu = -1;double lastImuT_opt = -1;// ISAM2优化器gtsam::ISAM2 optimizer;gtsam::NonlinearFactorGraph graphFactors;gtsam::Values graphValues;const double delta_t = 0;int key = 1;// imu-lidar位姿变换gtsam::Pose3 imu2Lidar = gtsam::Pose3(gtsam::Rot3(1, 0, 0, 0), gtsam::Point3(-extTrans.x(), -extTrans.y(), -extTrans.z()));gtsam::Pose3 lidar2Imu = gtsam::Pose3(gtsam::Rot3(1, 0, 0, 0), gtsam::Point3(extTrans.x(), extTrans.y(), extTrans.z()));/*** 构造函数*/IMUPreintegration(){// 订阅imu原始数据,用下面因子图优化的结果,施加两帧之间的imu预计分量,预测每一时刻(imu频率)的imu里程计subImu      = nh.subscribe<sensor_msgs::Imu>  (imuTopic,                   2000, &IMUPreintegration::imuHandler,      this, ros::TransportHints().tcpNoDelay());// 订阅激光里程计,来自mapOptimization,用两帧之间的imu预计分量构建因子图,优化当前帧位姿(这个位姿仅用于更新每时刻的imu里程计,以及下一次因子图优化)subOdometry = nh.subscribe<nav_msgs::Odometry>("lio_sam/mapping/odometry_incremental", 5,    &IMUPreintegration::odometryHandler, this, ros::TransportHints().tcpNoDelay());// 发布imu里程计pubImuOdometry = nh.advertise<nav_msgs::Odometry> (odomTopic+"_incremental", 2000);// imu预积分的噪声协方差boost::shared_ptr<gtsam::PreintegrationParams> p = gtsam::PreintegrationParams::MakeSharedU(imuGravity);p->accelerometerCovariance  = gtsam::Matrix33::Identity(3,3) * pow(imuAccNoise, 2); // acc white noise in continuousp->gyroscopeCovariance      = gtsam::Matrix33::Identity(3,3) * pow(imuGyrNoise, 2); // gyro white noise in continuousp->integrationCovariance    = gtsam::Matrix33::Identity(3,3) * pow(1e-4, 2); // error committed in integrating position from velocitiesgtsam::imuBias::ConstantBias prior_imu_bias((gtsam::Vector(6) << 0, 0, 0, 0, 0, 0).finished());; // assume zero initial bias// 噪声先验priorPoseNoise  = gtsam::noiseModel::Diagonal::Sigmas((gtsam::Vector(6) << 1e-2, 1e-2, 1e-2, 1e-2, 1e-2, 1e-2).finished()); // rad,rad,rad,m, m, mpriorVelNoise   = gtsam::noiseModel::Isotropic::Sigma(3, 1e4); // m/spriorBiasNoise  = gtsam::noiseModel::Isotropic::Sigma(6, 1e-3); // 1e-2 ~ 1e-3 seems to be good// 激光里程计scan-to-map优化过程中发生退化,则选择一个较大的协方差correctionNoise = gtsam::noiseModel::Diagonal::Sigmas((gtsam::Vector(6) << 0.05, 0.05, 0.05, 0.1, 0.1, 0.1).finished()); // rad,rad,rad,m, m, mcorrectionNoise2 = gtsam::noiseModel::Diagonal::Sigmas((gtsam::Vector(6) << 1, 1, 1, 1, 1, 1).finished()); // rad,rad,rad,m, m, mnoiseModelBetweenBias = (gtsam::Vector(6) << imuAccBiasN, imuAccBiasN, imuAccBiasN, imuGyrBiasN, imuGyrBiasN, imuGyrBiasN).finished();// imu预积分器,用于预测每一时刻(imu频率)的imu里程计(转到lidar系了,与激光里程计同一个系)imuIntegratorImu_ = new gtsam::PreintegratedImuMeasurements(p, prior_imu_bias); // setting up the IMU integration for IMU message thread// imu预积分器,用于因子图优化imuIntegratorOpt_ = new gtsam::PreintegratedImuMeasurements(p, prior_imu_bias); // setting up the IMU integration for optimization        }/*** 重置ISAM2优化器*/void resetOptimization(){gtsam::ISAM2Params optParameters;optParameters.relinearizeThreshold = 0.1;optParameters.relinearizeSkip = 1;optimizer = gtsam::ISAM2(optParameters);gtsam::NonlinearFactorGraph newGraphFactors;graphFactors = newGraphFactors;gtsam::Values NewGraphValues;graphValues = NewGraphValues;}/*** 重置参数*/void resetParams(){lastImuT_imu = -1;doneFirstOpt = false;systemInitialized = false;}/*** 订阅激光里程计,来自mapOptimization* 1、每隔100帧激光里程计,重置ISAM2优化器,添加里程计、速度、偏置先验因子,执行优化* 2、计算前一帧激光里程计与当前帧激光里程计之间的imu预积分量,用前一帧状态施加预积分量得到当前帧初始状态估计,添加来自mapOptimization的当前帧位姿,进行因子图优化,更新当前帧状态* 3、优化之后,执行重传播;优化更新了imu的偏置,用最新的偏置重新计算当前激光里程计时刻之后的imu预积分,这个预积分用于计算每时刻位姿*/void odometryHandler(const nav_msgs::Odometry::ConstPtr& odomMsg){std::lock_guard<std::mutex> lock(mtx);// 当前帧激光里程计时间戳double currentCorrectionTime = ROS_TIME(odomMsg);// 确保imu优化队列中有imu数据进行预积分if (imuQueOpt.empty())return;// 当前帧激光位姿,来自scan-to-map匹配、因子图优化后的位姿float p_x = odomMsg->pose.pose.position.x;float p_y = odomMsg->pose.pose.position.y;float p_z = odomMsg->pose.pose.position.z;float r_x = odomMsg->pose.pose.orientation.x;float r_y = odomMsg->pose.pose.orientation.y;float r_z = odomMsg->pose.pose.orientation.z;float r_w = odomMsg->pose.pose.orientation.w;bool degenerate = (int)odomMsg->pose.covariance[0] == 1 ? true : false;gtsam::Pose3 lidarPose = gtsam::Pose3(gtsam::Rot3::Quaternion(r_w, r_x, r_y, r_z), gtsam::Point3(p_x, p_y, p_z));// 0. 系统初始化,第一帧if (systemInitialized == false){// 重置ISAM2优化器resetOptimization();// 从imu优化队列中删除当前帧激光里程计时刻之前的imu数据while (!imuQueOpt.empty()){if (ROS_TIME(&imuQueOpt.front()) < currentCorrectionTime - delta_t){lastImuT_opt = ROS_TIME(&imuQueOpt.front());imuQueOpt.pop_front();}elsebreak;}// 添加里程计位姿先验因子prevPose_ = lidarPose.compose(lidar2Imu);gtsam::PriorFactor<gtsam::Pose3> priorPose(X(0), prevPose_, priorPoseNoise);graphFactors.add(priorPose);// 添加速度先验因子prevVel_ = gtsam::Vector3(0, 0, 0);gtsam::PriorFactor<gtsam::Vector3> priorVel(V(0), prevVel_, priorVelNoise);graphFactors.add(priorVel);// 添加imu偏置先验因子prevBias_ = gtsam::imuBias::ConstantBias();gtsam::PriorFactor<gtsam::imuBias::ConstantBias> priorBias(B(0), prevBias_, priorBiasNoise);graphFactors.add(priorBias);// 变量节点赋初值graphValues.insert(X(0), prevPose_);graphValues.insert(V(0), prevVel_);graphValues.insert(B(0), prevBias_);// 优化一次optimizer.update(graphFactors, graphValues);graphFactors.resize(0);graphValues.clear();// 重置优化之后的偏置imuIntegratorImu_->resetIntegrationAndSetBias(prevBias_);imuIntegratorOpt_->resetIntegrationAndSetBias(prevBias_);key = 1;systemInitialized = true;return;}// 每隔100帧激光里程计,重置ISAM2优化器,保证优化效率if (key == 100){// 前一帧的位姿、速度、偏置噪声模型gtsam::noiseModel::Gaussian::shared_ptr updatedPoseNoise = gtsam::noiseModel::Gaussian::Covariance(optimizer.marginalCovariance(X(key-1)));gtsam::noiseModel::Gaussian::shared_ptr updatedVelNoise  = gtsam::noiseModel::Gaussian::Covariance(optimizer.marginalCovariance(V(key-1)));gtsam::noiseModel::Gaussian::shared_ptr updatedBiasNoise = gtsam::noiseModel::Gaussian::Covariance(optimizer.marginalCovariance(B(key-1)));// 重置ISAM2优化器resetOptimization();// 添加位姿先验因子,用前一帧的值初始化gtsam::PriorFactor<gtsam::Pose3> priorPose(X(0), prevPose_, updatedPoseNoise);graphFactors.add(priorPose);// 添加速度先验因子,用前一帧的值初始化gtsam::PriorFactor<gtsam::Vector3> priorVel(V(0), prevVel_, updatedVelNoise);graphFactors.add(priorVel);// 添加偏置先验因子,用前一帧的值初始化gtsam::PriorFactor<gtsam::imuBias::ConstantBias> priorBias(B(0), prevBias_, updatedBiasNoise);graphFactors.add(priorBias);// 变量节点赋初值,用前一帧的值初始化graphValues.insert(X(0), prevPose_);graphValues.insert(V(0), prevVel_);graphValues.insert(B(0), prevBias_);// 优化一次optimizer.update(graphFactors, graphValues);graphFactors.resize(0);graphValues.clear();key = 1;}// 1. 计算前一帧与当前帧之间的imu预积分量,用前一帧状态施加预积分量得到当前帧初始状态估计,添加来自mapOptimization的当前帧位姿,进行因子图优化,更新当前帧状态while (!imuQueOpt.empty()){// 提取前一帧与当前帧之间的imu数据,计算预积分sensor_msgs::Imu *thisImu = &imuQueOpt.front();double imuTime = ROS_TIME(thisImu);if (imuTime < currentCorrectionTime - delta_t){// 两帧imu数据时间间隔double dt = (lastImuT_opt < 0) ? (1.0 / 500.0) : (imuTime - lastImuT_opt);// imu预积分数据输入:加速度、角速度、dtimuIntegratorOpt_->integrateMeasurement(gtsam::Vector3(thisImu->linear_acceleration.x, thisImu->linear_acceleration.y, thisImu->linear_acceleration.z),gtsam::Vector3(thisImu->angular_velocity.x,    thisImu->angular_velocity.y,    thisImu->angular_velocity.z), dt);lastImuT_opt = imuTime;// 从队列中删除已经处理的imu数据imuQueOpt.pop_front();}elsebreak;}// 添加imu预积分因子const gtsam::PreintegratedImuMeasurements& preint_imu = dynamic_cast<const gtsam::PreintegratedImuMeasurements&>(*imuIntegratorOpt_);// 参数:前一帧位姿,前一帧速度,当前帧位姿,当前帧速度,前一帧偏置,预计分量gtsam::ImuFactor imu_factor(X(key - 1), V(key - 1), X(key), V(key), B(key - 1), preint_imu);graphFactors.add(imu_factor);// 添加imu偏置因子,前一帧偏置,当前帧偏置,观测值,噪声协方差;deltaTij()是积分段的时间graphFactors.add(gtsam::BetweenFactor<gtsam::imuBias::ConstantBias>(B(key - 1), B(key), gtsam::imuBias::ConstantBias(),gtsam::noiseModel::Diagonal::Sigmas(sqrt(imuIntegratorOpt_->deltaTij()) * noiseModelBetweenBias)));// 添加位姿因子gtsam::Pose3 curPose = lidarPose.compose(lidar2Imu);gtsam::PriorFactor<gtsam::Pose3> pose_factor(X(key), curPose, degenerate ? correctionNoise2 : correctionNoise);graphFactors.add(pose_factor);// 用前一帧的状态、偏置,施加imu预计分量,得到当前帧的状态gtsam::NavState propState_ = imuIntegratorOpt_->predict(prevState_, prevBias_);// 变量节点赋初值graphValues.insert(X(key), propState_.pose());graphValues.insert(V(key), propState_.v());graphValues.insert(B(key), prevBias_);// 优化optimizer.update(graphFactors, graphValues);optimizer.update();graphFactors.resize(0);graphValues.clear();// 优化结果gtsam::Values result = optimizer.calculateEstimate();// 更新当前帧位姿、速度prevPose_  = result.at<gtsam::Pose3>(X(key));prevVel_   = result.at<gtsam::Vector3>(V(key));// 更新当前帧状态prevState_ = gtsam::NavState(prevPose_, prevVel_);// 更新当前帧imu偏置prevBias_  = result.at<gtsam::imuBias::ConstantBias>(B(key));// 重置预积分器,设置新的偏置,这样下一帧激光里程计进来的时候,预积分量就是两帧之间的增量imuIntegratorOpt_->resetIntegrationAndSetBias(prevBias_);// imu因子图优化结果,速度或者偏置过大,认为失败if (failureDetection(prevVel_, prevBias_)){// 重置参数resetParams();return;}// 2. 优化之后,执行重传播;优化更新了imu的偏置,用最新的偏置重新计算当前激光里程计时刻之后的imu预积分,这个预积分用于计算每时刻位姿prevStateOdom = prevState_;prevBiasOdom  = prevBias_;// 从imu队列中删除当前激光里程计时刻之前的imu数据double lastImuQT = -1;while (!imuQueImu.empty() && ROS_TIME(&imuQueImu.front()) < currentCorrectionTime - delta_t){lastImuQT = ROS_TIME(&imuQueImu.front());imuQueImu.pop_front();}// 对剩余的imu数据计算预积分if (!imuQueImu.empty()){// 重置预积分器和最新的偏置imuIntegratorImu_->resetIntegrationAndSetBias(prevBiasOdom);// 计算预积分for (int i = 0; i < (int)imuQueImu.size(); ++i){sensor_msgs::Imu *thisImu = &imuQueImu[i];double imuTime = ROS_TIME(thisImu);double dt = (lastImuQT < 0) ? (1.0 / 500.0) :(imuTime - lastImuQT);imuIntegratorImu_->integrateMeasurement(gtsam::Vector3(thisImu->linear_acceleration.x, thisImu->linear_acceleration.y, thisImu->linear_acceleration.z),gtsam::Vector3(thisImu->angular_velocity.x,    thisImu->angular_velocity.y,    thisImu->angular_velocity.z), dt);lastImuQT = imuTime;}}++key;doneFirstOpt = true;}/*** imu因子图优化结果,速度或者偏置过大,认为失败*/bool failureDetection(const gtsam::Vector3& velCur, const gtsam::imuBias::ConstantBias& biasCur){Eigen::Vector3f vel(velCur.x(), velCur.y(), velCur.z());if (vel.norm() > 30){ROS_WARN("Large velocity, reset IMU-preintegration!");return true;}Eigen::Vector3f ba(biasCur.accelerometer().x(), biasCur.accelerometer().y(), biasCur.accelerometer().z());Eigen::Vector3f bg(biasCur.gyroscope().x(), biasCur.gyroscope().y(), biasCur.gyroscope().z());if (ba.norm() > 1.0 || bg.norm() > 1.0){ROS_WARN("Large bias, reset IMU-preintegration!");return true;}return false;}/*** 订阅imu原始数据* 1、用上一帧激光里程计时刻对应的状态、偏置,施加从该时刻开始到当前时刻的imu预计分量,得到当前时刻的状态,也就是imu里程计* 2、imu里程计位姿转到lidar系,发布里程计*/void imuHandler(const sensor_msgs::Imu::ConstPtr& imu_raw){std::lock_guard<std::mutex> lock(mtx);// imu原始测量数据转换到lidar系,加速度、角速度、RPYsensor_msgs::Imu thisImu = imuConverter(*imu_raw);// 添加当前帧imu数据到队列imuQueOpt.push_back(thisImu);imuQueImu.push_back(thisImu);// 要求上一次imu因子图优化执行成功,确保更新了上一帧(激光里程计帧)的状态、偏置,预积分重新计算了if (doneFirstOpt == false)return;double imuTime = ROS_TIME(&thisImu);double dt = (lastImuT_imu < 0) ? (1.0 / 500.0) : (imuTime - lastImuT_imu);lastImuT_imu = imuTime;// imu预积分器添加一帧imu数据,注:这个预积分器的起始时刻是上一帧激光里程计时刻imuIntegratorImu_->integrateMeasurement(gtsam::Vector3(thisImu.linear_acceleration.x, thisImu.linear_acceleration.y, thisImu.linear_acceleration.z),gtsam::Vector3(thisImu.angular_velocity.x,    thisImu.angular_velocity.y,    thisImu.angular_velocity.z), dt);// 用上一帧激光里程计时刻对应的状态、偏置,施加从该时刻开始到当前时刻的imu预计分量,得到当前时刻的状态gtsam::NavState currentState = imuIntegratorImu_->predict(prevStateOdom, prevBiasOdom);// 发布imu里程计(转到lidar系,与激光里程计同一个系)nav_msgs::Odometry odometry;odometry.header.stamp = thisImu.header.stamp;odometry.header.frame_id = odometryFrame;odometry.child_frame_id = "odom_imu";// 变换到lidar系gtsam::Pose3 imuPose = gtsam::Pose3(currentState.quaternion(), currentState.position());gtsam::Pose3 lidarPose = imuPose.compose(imu2Lidar);odometry.pose.pose.position.x = lidarPose.translation().x();odometry.pose.pose.position.y = lidarPose.translation().y();odometry.pose.pose.position.z = lidarPose.translation().z();odometry.pose.pose.orientation.x = lidarPose.rotation().toQuaternion().x();odometry.pose.pose.orientation.y = lidarPose.rotation().toQuaternion().y();odometry.pose.pose.orientation.z = lidarPose.rotation().toQuaternion().z();odometry.pose.pose.orientation.w = lidarPose.rotation().toQuaternion().w();odometry.twist.twist.linear.x = currentState.velocity().x();odometry.twist.twist.linear.y = currentState.velocity().y();odometry.twist.twist.linear.z = currentState.velocity().z();odometry.twist.twist.angular.x = thisImu.angular_velocity.x + prevBiasOdom.gyroscope().x();odometry.twist.twist.angular.y = thisImu.angular_velocity.y + prevBiasOdom.gyroscope().y();odometry.twist.twist.angular.z = thisImu.angular_velocity.z + prevBiasOdom.gyroscope().z();pubImuOdometry.publish(odometry);}
};int main(int argc, char** argv)
{ros::init(argc, argv, "roboat_loam");IMUPreintegration ImuP;TransformFusion TF;ROS_INFO("\033[1;32m----> IMU Preintegration Started.\033[0m");ros::MultiThreadedSpinner spinner(4);spinner.spin();return 0;
}

参考文献

LIOSAM代码架构 - 知乎

SLAM学习笔记(二十)LIO-SAM流程及代码详解(最全)_zkk9527的博客-CSDN博客_lio-sam 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-3834019.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

【面试普通人VS高手系列】Spring Boot的约定优于配置,你的理解是什么?

对于Spring Boot约定优于配置这个问题,看看普通人和高手是如何回答的?普通人的回答: 嗯, 在Spring Boot里面,通过约定优于配置这个思想,可以让我们少写很多的配置, 然后就只需要关注业务代码的编写就行。嗯! 高手的回答: 我从4个点方面来回答。 1.首先, 约定优于配置…...

JS节点操作(2)- 创建节点,添加节点,删除节点,复制节点

节点操作 1. 创建节点 document.createElement() 2. 添加节点 2.1 node.appendChild(child) 添加到子元素数组的末尾 <body><ul><li>Im here</li></ul><script>var ul document.querySelector(ul);// 创建节点var li document.creat…...

每日一道javascript面试题(二)

题目 console.log(a, globalName);//undefined undefined,它们的类型也是undefined var a; var globalName "Javascript"; function Hello(){if(typeof globalName undefined){var globalName "ES6";console.log("hello ",globalName);//hell…...

2020-06-18 CVPR2020 VL论文讨论(1) 笔记

目录CC JJY S[1] Normalized and Geometry-Aware Self-Attention Network for Image Captioning[2] Cops-Ref: A new Dataset and Task on Compositional Referring Expression Comprehension[3] Multi-task Collaborative Network for Joint Referring Expression Comprehensi…...

Spring MVC统一异常处理的3种方式(附带实例)

在 Spring MVC 应用的开发中&#xff0c;不管是对底层数据库操作&#xff0c;还是业务层或控制层操作&#xff0c;都会不可避免地遇到各种可预知的、不可预知的异常需要处理。 如果每个过程都单独处理异常&#xff0c;那么系统的代码耦合度高&#xff0c;工作量大且不好统一&a…...

[bfs最短路] aw188. 武士风度的牛(bfs最短路+模板题)

文章目录1. 题目来源2. 题目解析1. 题目来源 链接&#xff1a;188. 武士风度的牛 2. 题目解析 经典的 bfs 找二维图形找最短路问题。唯一不同的就是方向数组&#xff0c;这个是 马走日 型遍历。 时间复杂度&#xff1a;O(nm)O(nm)O(nm) 空间复杂度&#xff1a;O(nm)O(nm)O(…...

jQuery实现打字机效果

文章目录第一种 无删除效果第二种 加入删除效果第三种 加入颜色样式&#xff0c;删除元素第四种 改变颜色&#xff0c;不用删除子元素第五种 使用css将元素隐藏第六种 颜色打字机 &#xff0c;加入删除效果第一种 无删除效果 //第一种 打字机效果无删除效果var arr 这里填写字…...

scikit-learn中的机器学习算法封装

k&#xff2e;&#xff2e;算法的封装 对于上文中的kNN的算法,将他封装成了一个函数. import numpy as np from math import sqrt from collections import Counterdef kNN_classify(k, X_train, y_train, x):assert 1 < k < X_train.shape[0], "k must be valid…...

iOS开发打字机效果

iOS开发打字机效果效果展示下载链接效果展示 实现了一个打字机效果&#xff0c;可以切分文字后逐渐跳出&#xff0c;能自动居中和自动换行。 下载链接 链接: https://download.csdn.net/download/qq_29137557/12474766...

html5 打字机效果,使用JavaScript制作打字机文本效果

我们在看电影时经常能够看到一些炫酷的打字机效果&#xff0c;用于显示一些地名或剧情简介。我们在网页中也能够实现类似的效果&#xff0c;目前网上已经有很多打字机效果的插件&#xff0c;如轻量级响应式jQuery打字机特效插件和逼真的js打字机效果插件等。那么&#xff0c;实…...

Linux 文本处理命令 - less

less命令&#xff1a;查看文件内容 less 命令的作用和 more 十分类似&#xff0c;都用来浏览文本文件中的内容&#xff0c;不同之处在于&#xff0c;使用 more 命令浏览文件内容时&#xff0c;只能不断向后翻看&#xff0c;而使用 less 命令浏览&#xff0c;既可以向后翻看&…...

FreeRtos的软件定时器的使用

头文件#include "freertos/timers.h" 总体过程&#xff1a;申请→启动→定时 0.初始化/注册&#xff1a; Delay_Turnoff_timer_init(); Delay_Turnoff_timer_init();函数内容&#xff1a; /*-------------------------------------------------------------------…...

【Unity】带有字符淡入效果的TextMeshPro打字机效果组件

【Unity】带有字符淡入效果的TextMeshPro打字机效果组件 在TextMeshPro中&#xff0c;可以通过 TMP_Text.maxVisibleCharacters 属性控制可见字符的个数&#xff0c;实现简单的打字机效果。如果要为打字机效果增加字符淡入效果&#xff0c;可以通过调整字符Mesh的顶点颜色来实…...

[项目实战,源码完整]手把手教你怎么封装组件,React 重写学成在线 III

[项目实战&#xff0c;源码完整]手把手教你怎么封装组件&#xff0c;React 重写学成在线 III前情回顾进行业务分析内容实现subHeader 的实现实现基础结构什么是 props尝试渲染设计数据类型修改实现方法&#xff0c;重新渲染 sub header使用 useState 去实现选中高亮精品推荐和课…...

打字机效果 html+css+js

效果&#xff08;最后有源码&#xff09;&#xff1a; 实现&#xff1a; 1. 定义标签&#xff0c;文本将写在span标签里&#xff0c;文本先在js的数组存着&#xff1a; <h1><span class"text" ></span></h1>2. 定义text基本样式&#xff1a…...

[附源码]Python计算机毕业设计Django教学辅助系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…...

105. 从前序与中序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树。 例如&#xff0c;给出 前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树&#xff1a; 3/ \9 20/ \15 7/*** Definition for a binary tree node.*…...

【方法篇·壹】css开发技巧-全局样式设置和局部样式

目录 前言&#xff1a; 1.全局样式和局部样式设置 2.提升效率重要方法 3.提升效率重要方法-集中处理UI样式 4.提升效率重要方法-学会复制 5. 提升质量方法-flex、百分比、rem布局 6.解决疑难杂症方法-::v-deep和加类名 7.提升质量方法&#xff1a;巧用flex实现元素对…...

从源码角度分析Mybatis级联映射的实现原理

Mybatis是一个半自动化ORM框架&#xff0c;可以将数据库中的记录转换为java实体对象&#xff0c;但是java实体属性通常采用驼峰命名法&#xff0c;而数据库字段习惯采用下划线分隔命名法&#xff0c;因此需要用户指定java实体属性与数据库表字段之间的映射关系。 mybatis的Mapp…...

天空卫士监控行为显示叉_天空卫士发布统一内容安全解决方案,助力企业数据安全...

CTI论坛(ctiforum)11月13日消息(记者 李文杰):移动互联网时代&#xff0c;人类现实世界与信息世界已经交融在一起&#xff0c;高速扩展的信息世界里--信息安全至关重要。但在信息安全事件频出的今天&#xff0c;信息安全技术毫无疑问滞后于信息世界的发展&#xff01;面对无孔不…...

【RocketMq源码】七、消息队列和索引文件恢复

1&#xff09;RocketMQ的存储文件包括消息文件&#xff08;Commitlog&#xff09;、消息消费队列文件&#xff08;ConsumerQueue&#xff09;、 Hash索引文件&#xff08;IndexFile&#xff09;、监测点文件&#xff08;checkPoint&#xff09;、abort&#xff08;关闭异常文件…...

正确理解线程WAITING状态

正确理解线程WAITING状态 今天来学习下&#xff0c;Java的线程状态&#xff0c;重点讨论下thread.state.WAITING。讨论下线程如何进入此状态&#xff0c;以及它们之间的区别。最后&#xff0c;我们进一步了解java.util.concurrent.locks.LockSupport&#xff0c;它提供了几种用…...

MGR多主配置

配置参数 vi /mysql/data/3306/my.cnf #节点都加 注释掉&#xff1a;bind_address 改掉loose-group_replication_local_address 和 server-id log_bin/mysql/log/3306/binlog/mysqldb-binlog log_bin_index/mysql/log/3306/binlog/mysqldb-binlog.in…...

kernel pwn 环境搭建

以 CISCN2017 - babydriver 为例讲解一下 kernel pwn 环境搭建。写的可能有问题&#xff0c;后续会补充。 建议结合视频讲解 首先下载附件里面有 3 个文件&#xff0c;分别为启动脚本&#xff0c;内核镜像和文件系统。 编译 busybox kernel 题一般采用的是轻量化的 busybox…...

解决方案Invalid Hadoop Runtime specified; please click ‘Configure Hadoop install directory‘

在Eclipse中新建Map/Reduce项目时&#xff0c;会报Invalid Hadoop Runtime specified; please click ‘Configure Hadoop install directory’ or fill in library location input field的错误&#xff0c;原因是找不到hadoop安装运行环境&#xff1a; 解决方法 将你linux或者…...

想实现前端酷炫的打字机效果吗

实现酷炫的打字机效果插件typed.js 前言&#xff1a; 最近在写前端项目的过程中&#xff0c;在逛别人的优质的个人博客的时候&#xff0c;发现一个好玩有趣的东西。看下图&#xff0c;类似在打字的效果&#xff0c;然后又在思考的感觉&#xff0c;感觉整个网页都充满了思想。…...

【软考 系统架构设计师】案例分析① 解题技巧

>>回到总目录<< 为了不辜负已经订阅了专栏的同学们的信任,所以本专栏不会有任何的优惠活动。 另外,当订阅人数每次达到 2 n ( n > 2 ) 2^n(n>2) 2...

TypeScript中类的使用详解

一、类的概述 在早期的JavaScript开发中&#xff08;ES5&#xff09;需要通过函数和原型链来实现类和继承。 从ES6开始&#xff0c;引入了class关键字&#xff0c;可以更加方便的定义和使用类。 TypeScript是JavaScript的超集&#xff0c;也支持使用class关键字&#xff0c;…...

syncnized锁重入

分享链接&#xff1a;synchronized锁重入_给自己一个前行的动力-CSDN博客 笔记&#xff1a;在继承环境中子类可调用父类的同步方法。 在继承关系中&#xff0c;同步是不可继承的。...

VUECLI3 axios安装配置

1、npm安装 $ npm install axios 2、在 src--main.js里添加 import axios from axios//全局声明 app.config.globalProperties.$axiosaxios3、使用 this.$axios.post(url, {data:data }).then(res > {console.log(res);}).catch(error > {console.log(error:, erro…...

Android Gradle插件开发-发布fat-jar

Android Gradle插件开发-发布与集成 这篇讲一下如何将第三方库一起打包发布 有些情形需要将项目依赖的jar包也合并到自己项目的jar包内&#xff0c;出来的这个jar我们称它为fat-jar。我所使用的方法需要用到shadow插件 shadow插件文档&#xff1a;https://imperceptiblethou…...

JSP核心技术的进阶(指令、标签、对象域)+JSTL+EL

JSP核心技术的进阶&#xff08;指令、标签、对象域&#xff09;JSTLEL 一、什么是JSP 1.JSP全称是Java Server Pages&#xff0c;它和servle技术一样&#xff0c;都是SUN公司定义的一种用于开发动态web资源的技术。JSP/Servlet规范。JSP实际上就是Servlet 2.JSP这门技术的最大…...

中国人工智能学会公布首批会士名单,共计53名产业领军人物当选

本文讲的是中国人工智能学会公布首批会士名单&#xff0c;共计53名产业领军人物当选&#xff0c;近日&#xff0c;中国智能科学技术领域唯一的国家级学会——中国人工智能学会公布了首批会士名单。其中&#xff0c;包括了22位院士在内的53位人工智能领域的卓越科技工作者和人工…...

dubbo原理

目录 dubbo原理 1、RPC原理 2、netty通信原理 3、dubbo原理 1、dubbo原理 -框架设计 2、dubbo原理 -启动解析、加载配置信息 3、dubbo原理 -服务暴露 4、dubbo原理 -服务引用 5、dubbo原理 -服务调用 dubbo原理 1、RPC原理 一次完整的RPC调用流程&#xff08;同步调…...

Ngrinder3.5.5-p1二次开发增加RT百分位

参考原文性能测试工具 nGrinder 项目剖析及二次开发 - 灰信网&#xff08;软件开发博客聚合&#xff09; 1、原文中需要调整的地方 ngrinder-core模块下build.gradle依赖添加jar包 implementation (group: "org.apache.commons", name: "commons-math3",…...

无线网络性能测试 软件,无线性能测试平台及方法

无线性能测试平台及方法360随身Wi-Fi可做手机挂件测试平台&#xff1a;客户端&#xff1a;Thinkpad X200笔记本 外置450M无线网卡服务器端&#xff1a;Thinkpad T400笔记本 360随身Wi-Fi测试软件&#xff1a;NetIQ Chariot v5.4&#xff1b;Endpoint6.0。测试方法&#xff1a…...

JavaScript实现的打字机效果

html&#xff1a; <!DOCTYPE html> <html lang"ch-ZN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdev...

用例分析教程

UML用例图是正在开发的新软件程序的系统/软件需求的主要形式。用例图的目的是可视化系统应该做什么&#xff08;什么&#xff09;&#xff1b;在这个阶段&#xff0c;它不考虑如何&#xff08;如何&#xff09;去做。 一旦指定了用例&#xff0c;就可以用文本和可视化的表示&a…...

本科毕业论文论文框架,可参考

大致结构&#xff0c;供参考&#xff0c;正文总页数应不少于30页。 注意系统的创新点 采用面向对象开发方法&#xff1a;&#xff08;除了致谢中可以出现第一人称“我”&#xff0c;其他正文中一律是本人、本系统&#xff09;。论文整体要以文字为主&#xff0c;图片、表格、代…...

P95、P99.9百分位数值——服务响应时间的重要衡量指标

前段时间&#xff0c;在对系统进行改版后&#xff0c;经常会有用户投诉说页面响应较慢&#xff0c;我们看了看监控数据&#xff0c;发现从接口响应时间的平均值来看在500ms左右&#xff0c;也算符合要求&#xff0c;不至于像用户说的那么慢&#xff0c;岁很费解&#xff0c;后来…...

什么是枚举?有什么作用?有什么好处?

来自: 百度问答 其实枚举就是在一个类里定义几个静态变量&#xff0c;每个变量都是这个类的实例。比如说&#xff0c;类Human有两个静态变量&#xff1a;Man,Woman&#xff0c;每一个变量都是Human类的实例。用的时候就直接写Human.Man&#xff0c;Human.Woman&#xff0c;用的…...

AI生命科学绘图(4):质粒图谱的绘制

学习来源 &#xff1a;B站生信师兄 内容&#xff1a;质粒图谱绘制 质粒绘制思路 1.绘制俩个正圆轮廓&#xff0c;修改描边颜色和粗细 选择椭圆工具&#xff1a;按住shift绘制一个正圆&#xff0c;然后Alt拖动复制 拖动使得俩个圆重合 2.使用剪刀工具&#xff0c;修剪掉不需要…...

HR最喜欢在简历中看到什么?一些“潜规则”知道吧...

首先说几个hr筛选、淘汰简历的“潜规则”吧&#xff1a; 1、在几分钟之内&#xff0c;连续发出2份以上相同的简历&#xff1a;谨慎有余&#xff0c;不自信的表现&#xff0c;若无特别&#xff0c;不作考虑。 2、在最近一段时期限内连续发出一份相同的简历&#xff1a;看重这份…...

hexo中文字实现打字机效果

文字的打字机效果是不是感觉蛮炫呢&#xff0c;其实是用typed.js这个插件实现的哦~ 下载typed.js With NPM npm install typed.js With Yarn yarn add typed.js With Bower bower install typed.js 详细内容戳 &#x1f449; typed.js官网 typed.js的使用 使用非常简单&am…...

AP计算机宾夕法尼亚学生卢钟灵儿肺腑经验以资借鉴

AP计算机 AP微积分 A Level计算机 IGCSE计算机 支持远程现场互动教学 通过上林振营老师的AP计算机课&#xff0c;我对编程有了更大的信心。在上课之前&#xff0c;我只是在学校学过Python编程&#xff0c;虽然是系统的学习&#xff0c;但是教材有很多地方编写的很晦涩…...

【使用 BERT 的问答系统】第 7 章 :BERT 模型的未来

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…...

计算机表格计算公式加法,加法公式excel,excel表格如何用公式计算加减乘除混合运算?...

用EXCEL怎样做加法表EXCEX加法&#xff1a;1、简单的&#xff1a;选中格 选中单元格 选中单元格 。。。&#xff1b;2、加和公式&#xff1a;sum(选中单元格)&#xff1b;3、宏编更复杂点的加法公式Function xx()。。。End Function如果你要在B10单元格里求A1、A2、A3、A4、A5、…...

JS打字机效果

<!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"><title>JS打字机效果</title><meta name"description&…...

终端控制字符

我们见过很多终端&#xff0c;比如windows下的cmd窗口&#xff0c;linux的shell&#xff0c;telnet。 终端的核心功能是人机交互&#xff08;用户输入信息或控制字符&#xff0c;终端显示信息&#xff0c;包括控制字体颜色&#xff0c;光标位置&#xff0c;删除字符等&#xf…...

学习指南!docker查看日志文件命令

缓存雪崩 我们首先看下这个正常的缓存流程是怎样的&#xff1f;如下图所示&#xff1a; 可以看到&#xff0c;首先这个用户访问这个某东&#xff0c;然后这个某东去访问这个 Redis&#xff0c;如果 Redis 有该访问数据&#xff0c;就会直接返回查缓存拿到的数据&#xff1b;如…...

阿里云服务器配置教程,超超详细~!

1、注册阿里云账号 电脑浏览器打开&#xff0c;点击直达&#xff1a;注册阿里云-链接直达 手机打开不能注册&#xff0c;电脑浏览器打开&#xff0c;用支付宝登陆就可以、填一下身份信息 2、注册完成&#xff0c;打开这个网址&#xff0c; 阿里云-云服务器-购买专属链接 点…...

项目复习:基于TCP的文件服务器

ser.c(服务器): #include "./fun.h"int main(int argc,const char * argv[]) {//1.判断入参if(argc!3){fprintf(stderr,"入参为空&#xff0c;请检查\n");return -1;}//端口号转整型int portatoi(argv[2]);//变量声明struct sockaddr_in sin;int sinLensi…...

RPC基础之负载均衡算法一文全搞懂

文章目录前言一、轮询法二、随机法三、地址哈希法四、权重法五、最小连接数法六、拓展结语前言 在微服务的技术体系中&#xff0c;服务消费者从配置中心获取到服务的地址后&#xff0c;需要选择其中的一台服务器发起RPC调用。但是服务消费者依据什么去选择&#xff1f;怎么去选…...

大数乘方运算-C语言

C语言计算乘方 c语言中计算乘方一般使用pow函数就行了&#xff0c;但是有时候我们计算的乘方的结果超出了double或者int能表示的范围&#xff0c;这个时候就不能使用简单的pow函数进行运算&#xff0c;那么怎么办呢&#xff1f;&#xff1f;&#xff1f;下面就是我的一种思路&a…...

c语言循环队列的销毁,C语言循环队列

参考自维基百科&#xff1a;含测试代码&#xff0c;详细注释&#xff1a;#include #include #include /*循环队列 C语言实现*2011-04-28*liliming123sina.com*/#ifndef QElementType#define QElementType int#endif#ifndef MAX_SIZE#define MAX_SIZE 500#endiftypedef struct{Q…...

密码学算法之 SM2国密算法

一、SM2 国密算法介绍&#xff1a; """ SM2 国密非对称加密算法,属于椭圆曲线密码体制&#xff08;ECC&#xff09; Author:John 基于椭圆曲线的离散对数难题&#xff0c;目前 SM2 256 bit 加密算法是相当安全的&#xff0c;相当于 RSA 2048 bit 及以上的安全性…...

《Unity Shader入门精要》读书笔记第二章——shader调试

这个系列主要是通过阅读《Unity Shader入门精要》之后的一些感想&#xff0c;给读者一些启发。 联系邮箱&#xff1a;glasiriusgmail.com ShaderLab的调试并不方便&#xff0c;在Unity中可以打一个PC包&#xff0c;通过VS的图形调试工具进行断点。 在ShaderLab代码的编写上&a…...

JavaScript零基础入门 10:正则表达式

&#x1f345; Java学习路线配套文章&#xff1a;Java学习路线总结&#xff0c;搬砖工逆袭Java架构师&#xff08;全网最强&#xff09; &#x1f345; 基础推荐&#xff1a;Java基础教程系列 &#x1f345; 实战推荐&#xff1a;Spring Boot基础教程 &#x1f345; 简介&#…...

textarea取值赋值

笔记 最近发现HTML的表单和赋值需要记录一下&#xff0c;jquery的取值和复制有几种方式&#xff0c;常用的有val&#xff08;&#xff09;、text&#xff08;&#xff09;&#xff0c;其他表单标签可以用哪个都是可以&#xff0c;但在textarea这个标签需要认真选择&#xff0c…...

【RTS】杜金房大神FreeSwitch分享笔记

技术万变不离其宗不管如何实现原理都是一样的。杜金房大神 RTS 高可用 一台机器上俩fs,公用同一个ip用户连接的是一个ip,不知道切了fs。两台主备数据同步...

软考系统架构设计师 - 报考必知(考试经验分享)

1 报名 软考官方网站:https://www.ruankao.org.cn/ 报名时间:系统架构师每年下半年考一次,报名时间大多数都是7月中下旬开始。 注意:别错过报名时间!一年只有一次机会。 报名后,就是缴费啦,200多块钱。 2 考试安排 报名后就能看到考试时间,11月7号考试,11月3号打印…...

软考系统架构设计师如何备考?

系统架构设计属于项目的高级分析、规划、管理人员。 系统架构师&#xff08;SystemArchitecture&#xff09;应能够根据系统需求规格格说明书&#xff0c;结合应用领域和技术发展的实际情况&#xff0c;考虑有关约束条件&#xff0c;设计正确、合理的软件架构&#xff0c;确保…...

「预览」从PDF中生成子PDF文件

...

张成子空间

...

IDEA文件多层文件夹以xx.xx.xx的形式创建怎么展开成子文件夹

点击项目右上角的齿轮将Compact Middle packages 前面的√ 取消即可展开子文件夹...

51单片机STC89C52控制LED闪烁(将延时程序写成子函数有形参)

/*-----------------------包含头文件区域-------------------------*/ #include<reg52.h> //单片机头文件 /*-----------------------端口/引脚定义区域----------------------*/ sbit LEDP2^0; //位定义P2.0引脚名为LED /*-----------------------函数声明区域---…...

父类指针转换成子类指针

有如下定义&#xff1a; class A {}; class B : public A{}; A* pA new B; 下列代码无法完成转换的是&#xff08; &#xff09; A) B* pB static_cast<B*>(pA); B) B* pB reinterpret_cast<B*>(pA); C) B* pB dynamic_cast<B*>(pA); D) B* pB (B*)…...

wangEditor封装成子组件 (有下序)

<template><div id"only"><div ref"editor"></div><div ref"editorContent"></div><textarea style"display: none" id"txtIntro"></textarea><!-- <el-button cli...

Java Map拆分成子Map

package com.visy.util;import com.google.common.collect.Lists; import com.google.common.collect.Maps;import java.util.*;/*** author visy.wang* date 2022/1/26 9:39*/ public class MapUtil {/*** Map拆分 (指定分组大小)* param map Map* param chunkSize 每个分组的…...

PHP sql IN查询改成子查询

一、场景二、代码一、场景 php in 查询&#xff0c;数据太多时&#xff0c;内存溢出。sql in 查询&#xff0c;也有最大数据限制。 二、代码 public function test() {$orderList "select * from order where status 1";$orderIds array_column($orderList, id…...

Java分割数组成子数组

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshow我有一个 2000多长度的数组&#xff0c;我要分割成40个50长度的子…...

郈成子

郈成子为鲁聘于晋&#xff0c;过卫&#xff0c;右宰谷臣止而觞之&#xff0c;陈乐而不乐&#xff0c;酒酣而送之以壁&#xff0c;顾反&#xff0c;过而弗辞&#xff0c;其仆曰&#xff1a;"向者右宰谷臣之觞吾子也甚欢&#xff0c;今侯渫过而弗辞。"郈成子曰&#xf…...

vue 封装dialog_element-dialog封装成子组件

移除{{Edit}}import UserEditfrom "./UserEdit-dialog.vue";import updatefrom ‘./Update.vue‘exportdefault{methods: {deleteRow(index, rows) {rows.splice(index,1);}},data() {return{Edit:"编辑",pagesize:5, //每页的数据条数currentPage: 1, //默…...

java中父类强制转换成子类的错觉

引言&#xff1a;父类引用指向子类对象在java中十分常见&#xff0c;比如&#xff1a; Object objectnew a();//a是一个类名 但是有时候我们看见子类引用指向了父类对象&#xff0c;就是上边的反过来&#xff0c;比如 图片中圈1标识的代码&#xff0c;反正就是怎么看都别扭&a…...

在父页面用Iframe加载子页面时,将父页面的title替换成子页面title

报告管理 转载于:https://www.cnblogs.com/maomojun/p/9667320.html...

java父类强转成子类

java将父类转换成子类&#xff0c;是为了拓展更宽泛的使用&#xff0c;子类可以转换成父类&#xff0c;赋予其功能&#xff0c;试想在实际项目中&#xff0c;用一个对象接到所有参数&#xff0c;它既是父类&#xff0c;在将他赋值给一个子类&#xff0c;那么这个子类便用有了自…...

C# 里氏转换(父类转换成子类)( is as )

里氏转换&#xff1a; 1、子类可以赋值给父类 2、如果父类中装的是子类对象&#xff0c;则可以将这个父类转换为对应的子类对象 ---->关键字 1、is&#xff1a;返回bool类型&#xff0c;指示是否可以做这个转换 2、as&#xff1a;如果转换成功&#xff0c;则返回对象&#x…...

类型转换异常,父类不能强转换成子类

我们回到java角度上来&#xff0c; 总结一下&#xff1a; 1父对象new 父类(); 2子对象new 子类(); 3父对象new 子类(); 4{ 父对象new 子类(); 子对象(子类)父对象; } 上述四个都是正确的。 /***********************************************************************…...

java用Json将父类转成子类

将父类对象用 JSONObject.toJSONString(father)转成String&#xff0c; 再用JSONObject.parseObject 转成子类对象 Son son2 JSONObject.parseObject(JSONObject.toJSONString(father),Son.class); 不一定是要父类子类的关系&#xff0c;只要有相同属性的都可以转&#xff1…...

C++ static_cast相同父类的子类之间强制转换(子类A的指针转换成子类B)(Ray Tracing the next week 中BVH部分遇到的问题)

万恶之源&#xff1a; hittable_list world static_cast<hittable_list>(make_shared<bvh_node>(world, 0, 1));本文只讨论手段是否能通过编译&#xff0c;是否应该这样做、有无必要这样做 不是讨论的重点 目录1、static_cast能够实现父类指针和子类指针相互转换…...

Java 中父类一定可以强转成子类吗??

1 父类类型变量指向子类对象&#xff0c;不用强转&#xff1a; 如&#xff1a; Object a new A(); public class SocketTest {public static void main(String[]args)throws Exception{Object anew A();} } class A {}2 父类类型的变量可以强转成子类类型的&#xff0c;但是…...

父类转换成子类, 或者是类之间属性拷贝

问题很怪&#xff0c; 其实本不应该这么做的&#xff0c; 将父类转换成子类本就是不安全的行为。 但哪有事事顺心的&#xff0c; 真遇到了还是得解决。 /*** 父类*/ class Foo {private String name; } /*** 子类*/ class Son extends Foo {private Integer age; }我想到的两…...

java 用户自定义的父类转换成子类的方法

在工作中&#xff0c;一般是实体类对应的数据库表&#xff0c;另外再定义一个Model继承实体类&#xff0c;在model里往往添加一些辅助的属性。我们从数据库查出的数据放在实体类里&#xff0c;但是展现数据时需要用到model类&#xff0c;这时就需要把实体类转换成Model类。父类…...

java 父类转换成子类的方法

/* 父类转换成子类的特点: 1:父类转换成子类不能自动完成 2:父类转换成子类的前提是父类的真身是这个子类 3:如果这个父类的真身是子类B,不能强制转换成子类A,只能转换成B. */ class Teacher2{ String name “王鹏”; public void Teach(){ System.out.println(name“在教课”…...

java 父类强制转换为子类_[java]Java中父类强制转换成子类的原则

Java中父类强制转换成子类的原则&#xff1a;父类型的引用指向的是哪个子类的实例&#xff0c;就能转换成哪个子类的引用。例&#xff1a;public class Test {public static void main(String[] args) {Person person new Boy();Boy boy (Boy) person;boy.eat();}}class Pers…...

java父类可以强转为子类吗_java父类可以强制转化成子类吗?

转自&#xff1a;http://blog.csdn.net/ld422586546/article/details/9707997Java中父类强制转换成子类的原则&#xff1a;父类型的引用指向的是哪个子类的实例&#xff0c;就能转换成哪个子类的引用。例&#xff1a;public class Test {public static void main(String[] args…...

C#里氏转换,子类赋值父类,父类强制转换成子类的理解

C#里氏转换&#xff0c;子类赋值父类&#xff0c;父类强制转换成子类的理解 最近在学习C#&#xff0c;在父类和子类的学习上有不理解的地方。 Father f new Son(); 这样的一个实例化程序中&#xff0c;内存时怎么样处理的&#xff0c;为什么父类不能访问子类的内容&#xff0…...

拆分订单php,订单拆分成子订单问题求教

1.现在我有一个订单,已经处理成了这样一个数组:[detail[[goods1],[goods2]...],total[]...]2.我的商品详情都在detail里面.其中有三个字段分别是store_id,send_way,goods_price3.拆单规则:先根据store_id拆成一个子订单,如果其中send_way不同,则又拆出来成为一个子订单,如果其中…...

Kotlin高仿微信-第58篇-开通VIP

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…...

iOS rtmp 摄像头/录屏直播以及观看

之前讲过如何在centos上使用nginx搭建rtmp服务器&#xff08;链接&#xff09;&#xff0c;本文介绍一下iOS 端如何通过rtmp录屏直播以及观看&#xff0c;完整的工程代码地址&#xff08;https://github.com/zxm006/Rtmp_iOS&#xff09;&#xff0c;本文也主要是介绍此工程的各…...

使用live555 直播来自v4l2的摄像头数据

使用live555 直播来自v4l2的摄像头数据&#xff0c;在我的这个工程中&#xff0c;基本思路是&#xff1a;使用V4L2采集摄像头数据&#xff0c;然后使用x264库对摄像头数据进行编码&#xff0c;编成H264数据格式&#xff0c;然后把数据写入到命名管道中。最后使用live555 从管道…...

不安全的加密算法

不安全的加密算法 【SKIPJACK\RC4\RSA】(1024位以下&#xff09; des、md2、md4、md5 属于经过验证、安全的、公开的加密算法 RSA DSA ECDSA 加入盐值的SHA256 推荐使用的数字签名算法有&#xff1a; DSA ECDSA...

计算机开不了机反复重启,电脑一直反复重启,就是开不了机,怎么处理

无法开机的情况比较多&#xff0c;总体来讲大概有几种硬件原因导致系统无法开机1、电脑电源故障&#xff0c;导致无法正常为主机供电。通常表现为主机电源不亮2、内存条原因出现此类故障一般是因为内存条与主板内存插槽接触不良造成&#xff0c;还有就是内存损坏或主板内存槽有…...

电子计算机显示屏不亮了,电脑能开机显示器不亮最详细的处理方法

电脑是我们生活中经常使用的物品&#xff0c;但近日却有用户反映说自己的电脑出现了能开机但显示器不亮的问题&#xff0c;不知道怎么解决。没关系&#xff0c;下面小编为大家整理了电脑能开机显示器不亮最详细的处理方法&#xff0c;一起往下看吧。解决方法如下&#xff1a;1、…...

css如何设置不可点击?

可以通过设置元素的pointer-events属性设置为none&#xff0c;来实现元素不可点击。 此方法是通过设置元素的鼠标事件失效来实现元素不可点击。 pointer-events: none; CSS pointer-events 属性定义元素是否对指针事件做出反应。 属性值描述auto默认值。元素对指针事件做出反…...

计算机不识别硬盘怎么解决,电脑不认硬盘的原因 怎么解决电脑读不到硬盘

硬盘在电脑中是非常重要的配件&#xff0c;如果说硬盘出现一些故障&#xff0c;那么电脑运行会成为问题&#xff0c;若是电脑不认硬盘&#xff0c;也是故障问题的表现&#xff0c;那么电脑不认硬盘的原因是什么呢以及怎么解决电脑读不到硬盘的问题&#xff0c;接下来看看小编为…...

参考 | 升级 Win11 移动热点开不了或者开了连不上

讲道理, 就很离谱 一开始我升级了 Win11 后, 突然发现 移动热点 开不了了, 就是那种, 开了之后, 手机/ipad 能检测到电脑移动热点的信号, 但是会出现这两种情况: 死活连不上连上了, 在移动端显示 无互联网连接 解决办法 打开 移动热点 打开 控制控制面板 -> 网络和Inter…...

25 Redis的缓存中的数据和数据库中的不一致问题

25 Redis的缓存中的数据和数据库中的不一致问题前言一、缓存和数据库的数据不一致是如何发生的&#xff1f;二、解决Redis 和数据库数据不一致的方法总结前言 Redis 缓存经常会遇到有 4 个方面&#xff1a; 缓存中的数据和数据库中的不一致&#xff1b;缓存雪崩&#xff1b;缓…...

[深度学习] loss不下降的解决方法

链接&#xff1a;https://blog.ailemon.me/2019/02/26/solution-to-loss-doesnt-drop-in-nn-train/ 当我们训练一个神经网络模型的时候&#xff0c;我们经常会遇到这样的一个头疼的问题&#xff0c;那就是&#xff0c;神经网络模型的loss值不下降&#xff0c;以致我们无法训练&…...

解决@NotBlank不生效的问题

在项目开发中&#xff0c;发现一个类中包含有另外一个类&#xff0c;这种包含关系的类上的NotBlank校验不生效&#xff0c;后来发现需要在内部的类的域上加上Valid注解&#xff0c;如下&#xff1a; /*** 标签体系ID*/NotBlank(message "00000002")Length(max 20,…...

模型训练时loss不收敛、不下降原因和解决办法

一、模型不收敛 主要有以下几个原因&#xff1a; 1、learning rate设大了会带来跑飞&#xff08;loss突然一直很大&#xff09;的问题 这个是新手最常见的情况——为啥网络跑着跑着看着要收敛了结果突然飞了呢&#xff1f;可能性最大的原因是你用了relu作为激活函数的同…...

计算机主机电源灯不亮,电脑主机开不了机、电源灯不亮解决方法与技巧

不管是在工作中还是我们日常生活中&#xff0c;电脑几乎已经是不可缺少的工具了&#xff0c;它可以作为办公用品&#xff0c;也可以作为娱乐工具&#xff0c;满足了我们的很多需求。而且随着现在科技的发展&#xff0c;电脑功能也越来越多样化&#xff0c;但是我们始终避免不了…...

怎么建一个新的微信群?微信小技巧

怎么建一个新的微信群&#xff1f;在使用微信的过程中&#xff0c;离不开和各种微信好友的沟通交流&#xff0c;有很多微信用户会选择创建微信群聊和好友联系&#xff0c;或者有些用户为了保留一些信息&#xff0c;会创建一个只有自己一个人的微信群。今天小编就来教大家几种创…...

建了个微信群,方便大家交流技术知识和经验

技术交流群 本人程序员&#xff0c;做游戏开发12年了&#xff0c;发现身边很多人经常会问一些技术问题&#xff0c;建个群专门帮大家解答游戏开发的问题&#xff0c;传授点个人总结的经验&#xff0c;有时间的话会在群内不定期发布资料教小白如何零基础入门。 欢迎大家加入分享…...

建了个微信群,方便大家交流 技术知识和经验

本人程序员&#xff0c;做游戏开发12年了&#xff0c;发现身边很多人经常会问一些技术问题&#xff0c;建个群专门帮大家解答游戏开发的问题&#xff0c;传授点个人总结的经验&#xff0c;有时间的话会在群内不定期发布资料教小白如何零基础入门。 欢迎大家加入分享自己 在工作…...

如果把14亿中国人都拉到一个微信群,会发生什么?手机爆炸只是小事!

“最近&#xff0c;知乎上有一个非常热门的问题&#xff1a;“把 14 亿中国人民都拉到一个微信群里在技术上能实现吗&#xff1f;” 先说结论&#xff1a;也许可以实现&#xff0c;但你会什么都看不见。 根据 2017 年《微信数据报告》的公开数据 [参考 1] &#xff1a;2017 年…...

lldb常用指令

//读取寄存器的值 pregister read/格式 pregister read/x//修改寄存器的值 pregister write 寄存器名称 数值 pregister write rax 0//读取内存中的值 px/数量-格式-字节大小 内存地址 px/3xw 0x0000010//修改内存中的值 pmemory write 内存地址 数值 pmemory write 0x0000010 …...

linux安装lldb

centos系统的可以用 sudo yum install lldbUbuntu系统的我不知道 会不会是 sudo apt-get update sudo apt-get install lldb呢 试过的朋友告诉我一声&#xff0c;谢谢...

【lldb】lldb调试时,无法查看变量,查看即crash

解决方法&#xff1a; 编译参数增加选项&#xff1a;-gdwarf-2 参考&#xff1a; android - gdb process crashes when viewing variables in Eclipse - Stack Overflowhttps://stackoverflow.com/questions/23717079/gdb-process-crashes-when-viewing-variables-in-eclips…...

lldb硬件断点android,Andorid Studio NDK开发-LLDB调试

LLDB是一个高效的c/c的调试器&#xff0c;是与LLVM编译器一起使用&#xff0c;提供了丰富的流程控制和数据检测,有效的帮忙我们调试程序。LLDB也已经取代GDB成为XCode的默认调试器&#xff0c;Android Studio中也可以使用LLDB调试NDK程序&#xff0c;在Android Studio也中可以L…...

lldb动态处理

llbd 调试器可用命令总览参考链接地址&#xff1a;lldb可用命令 下面列出几个常用的做示范&#xff1a;Help 他会列举出所有的命令。如果你忘记了一个命令是做什么的&#xff0c;或者是想知道更多的话&#xff0c;你可以通过 help <command>来了解更多细节&#xff0c…...

LLDB(六):常用命令举例

目录创建符号断点关于 Xcode 底部的调试区域在使用 expression 命令执行方法时&#xff0c;需要将发送的消息强制转换为该方法的返回值类型关于 p 和 po 的输出格式通过 expression 命令读取、设置、操作寄存器的值expression 命令只能在当前线程中执行表达式&#xff0c;expre…...

运行环境c语言gdb和lldb,使用LLDB调试程序

简述LLDB是XCode下默认的调试工具&#xff0c;苹果向来都会把界面做得很好&#xff0c;XCode中的lldb也不例外&#xff1a;无缝集成&#xff0c;方便简单。 嗯&#xff0c;casa是命令行控&#xff0c;也不喜欢简单玩法&#xff0c;所以这篇文章要讲的是用命令行LLDB来调试C程序…...

Rust LLDB 调试入门指北

本文介绍工具 LLDB 的初步使用 Rust 会使用 DWARF 格式在 binary 中嵌入调试信息&#xff0c;所以可以使用一些通用的调试工具&#xff0c;比如 GDB 和 LLDB。Rust 提供了 rust-gdb 和 rust-lldb 两个命令用于调试&#xff0c;其相比原生的 gdb 和 lldb 添加了一些方便调试的脚…...

LLDB(五):DerekSelander-LLDB 的安装与使用

目录DerekSelander-LLDB 简介DerekSelander-LLDB 命令详解__generate_scriptbiofcopyzdclassddddpdumpenviapiblogincludeinfojtoolkeychainlbrlookuplsofmsloverlaydbgpframeworkpmodulesbtsclasssearchsectionsnoopiesystobjectivecxrefyoinkDerekSelander-LLDB 简介 什么是 …...

iOS调试之LLDB命令

前言 在iOSAPP开发中&#xff0c;我们的代码经常需要调试跟踪&#xff0c;最常用的是LLDB Debugger程序调试器&#xff0c;LLDB Debugger (LLDB) 是一个开源、底层调试器(low level debugger)&#xff0c;具有REPL (Read-Eval-Print Loop&#xff0c;交互式解释器)、C和Python插…...

LLDB用法

文章目录一、LLDB 简介二、编译C/C源码三、启动LLDB设置断点到main函数开始进入调试查看帮助文档显示函数反汇编显示源码执行到下一步继续执行显示堆栈局部变量显示表达式的值设置内存地址的值读取内存地址的值显示所有寄存器终止当前进程一、LLDB 简介 LLDB是MacOS上默认的C、…...

lldb android studio,Android Studio22-NDK-LLDB调试

Android Studio2.2更好的支持NDK开发&#xff0c;并可以像开发java一样的DEBUG程序&#xff0c;不需要添加gradle-experimental插件&#xff0c;就可调试代码&#xff01;一&#xff0c;下载 NDK 和构建工具要编译和调试本地代码(native code)&#xff0c;你需要下面的组件&…...

LLDB常用命令

LLDB的Xcode默认的调试器&#xff0c;它与LLVM编译器一起&#xff0c;带给我们更丰富的流程控制和数据检测的调试功能。平时用Xcode运行程序&#xff0c;实际走的都是LLDB。熟练使用LLDB&#xff0c;可以让你debug事半功倍 LLDB基础知识 LLDB控制台 Xcode中内嵌了LLDB控制台&am…...

android lldb断点,lldb简单断点调试

开胃小菜--简单的断点调试在xcode中打开一个app&#xff0c;在想要break的行号上单击&#xff0c;即可生成一个深色的箭头标识--断点。如下图&#xff0c;在viewDidLoad:中设置了断点。运行app&#xff0c;等待。。。就可以看到xcode在断点处进入调试模式&#xff0c;现在让我们…...

巧克力最甜美的味道

【食材】 高粉250克、巧克力粉15克、牛奶200克、糖35克、酵母3克、盐3克、黄油15克 烘焙巧克力豆10克、巧克力甘纳许适量、坚果适量 【做法】 1、做一份可以拉出薄膜的巧克力面团&#xff0c;整形的时候里面加上烘焙巧克力豆&#xff0c;一发至2倍大小。 2、排气后分六份卷…...

冰皮蛋糕卷

1.准备制作蛋糕的材料&#xff0c;蛋清分离在两个無水無油的容器裏面 2.蛋黄裏面加入牛奶&#xff0c;玉米油撹拌均匀&#xff0c;至乳化狀態 3.面粉過篩加入撹拌至無千粉即可&#xff0c;不可過度撹拌 4.蛋清裏面加入鹽&#xff0c;柠檬汁&#xff0c;分次和入細砂糖&…...

如何做巧克力瑞士卷蛋糕!详细做法步骤看过来

这个自制版本值得花几个小时准备、烘烤和冷藏。不仅因为它的巧克力味浓郁&#xff0c;而且因为它可以定制添加您最喜欢的坚果、薯片&#xff0c;甚至是新鲜水果。 什么是瑞士卷蛋糕&#xff1f; 瑞士卷蛋糕是通过将海绵蛋糕卷在某种馅料上制成的。 在这里&#xff0c;我使用的是…...

LinkedIn最新报告: 区块链成职位需求增长最快领域, 这些地区对区块链人才渴求度最高……...

来源 | LinkedIn责编 | Aholiab出品 | 区块链大本营&#xff08;blockchain_camp&#xff09;最近&#xff0c;LinkedIn发布了一份过去5年来&#xff0c;亚洲地区需求增长最快的技能的调查报告。报告中&#xff0c;区块链毫无意外名列其中&#xff0c;在区块链增长最快的国家和…...

巧克力城堡,Vincent Guerlais的特别巧克力产品

巧克力城堡&#xff0c;Vincent Guerlais的特别巧克力产品~ 巧克力的神奇之处在于&#xff0c;吃一口&#xff0c;心情都变得很好了。 上海西点培训介绍&#xff0c;如果你想见识一下像黄金时代、餐厅一般种类丰富的甜点店&#xff0c;一定不要忘记去外省寻找真正手工制造的店铺…...

用java实现坏巧克力问题,【原料】关于巧克力在使用中出现的问题详解

巧克力运用起来是可以很灵活的&#xff0c;且用途也很广泛&#xff0c;可以融化、调温&#xff0c;用于配方、灌模、雕刻、涂抹、裱花、浸渍、做淋酱等等。但意外状况也时常会发生哦&#xff0c;下面就来看一下不同问题的解决方法吧&#xff01;一、典型问题巧克力的实质其实就…...

Ree7 Tile Toolkit for Windows Phone 7

http://wp7tiletoolkit.codeplex.com/ 转载于:https://www.cnblogs.com/Hack-ok/archive/2012/12/24/2831578.html...

tee 和 ree分别是什么意思?

TEE 是 Trusted Execution Environment 的缩写&#xff0c;即 可信执行环境。通常用来进行数字版权管理&#xff08;DRM : Digital Rights Management &#xff09;、移动支付和敏感数据保护。 TEE 的实现是基于 ARM TrustZone。 REE&#xff08;Rich Execution Environment&a…...

OP-TEE driver(二):REE侧调用OP-TEE驱动的工作流程

前面我们对整个OPTEE驱动的工作逻辑有了个了解&#xff0c;这里来站在REE侧调用OP-TEE的过程。 在Linux用户空间对文件系统中的文件执行打开、关闭、读写以及ioctl操作时&#xff0c;最终都会穿透到Linux内核空间执行具体的操作。 而从**用户空间陷入到内核空间是通过系统调用…...

解决微信小程序真机测试出现errno:600001错误

问题描述 本帖子只适用于在微信开发者工具里面可以连接到后端&#xff0c;能访问数据&#xff0c;但是在移动端真机调试时却接不到后端。如果在微信开发者工具的模拟器里也没法访问数据则不属于本贴的解决范围 小程序真机调试报错问题&#xff1a;VM1096: Unhandled promise …...

展锐7731E Android8.0 REE 32位指纹代码移植

展锐7731E Android8.0 REE 32位平台无法兼容多家指纹一&#xff0c;移植REE 时&#xff0c;在kernel prboe SPI 通讯读取chip ID 时会概率性读取失败。导致的问题就是不能在kernel 里面读取id 来继续加载驱动或者卸载驱动并释放资源&#xff0c;从而达到兼容其他家的指纹目的。…...

【打灰机1.0】纯c++实现的小游戏,思路全在注释里(萌新作品,dalao勿喷)

我们不叫接箱子了&#xff0c;我们叫打灰机~ ——————————————————————————————— 最近脑子突然 一抽 转过来弯了&#xff0c;把360一卸&#xff0c;换成了火绒。然后&#xff0c;电脑速度嗖 嗖嗖的&#xff0c;小游戏弄的看不清…还好&#xff0c…...

[ATF]-TEE/REE系统切换时ATF的寄存器的保存和恢复

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈ATF点滴 1、设置运行时栈SP2、寄存器的保存和恢复的实现3、寄存器的保存和恢复的使用场景1、设置运行时栈SP bl3…...

小白运维linux命令总结,linux常用运维命令总结

一、系统监控1、free命令ree 命令能够显示系统中物理上的空闲和已用内存&#xff0c;还有交换内存&#xff0c;同时&#xff0c;也能显示被内核使用的缓冲和缓存语法&#xff1a;free [param]param可以为&#xff1a;-b&#xff1a;以Byte为单位显示内存使用情况&#xff1b;-k…...

微信小游戏MagnetGame开发(一)准备

前言&#xff1a;本人属于满脑子都是奇怪想法的人&#xff0c;整天想着有一天世界会因为自己有一点点不同&#xff0c;所以平日都思索着怎么做一款创新的产品。本科的时候想着做游戏&#xff0c;就接触了一点Unity 3D&#xff0c;但是好的游戏剧本确实是很难。暑假闲来无事&…...

linux --t ree 命令以树形结构显示文件目录结构

以下内容转载自 https://blog.csdn.net/qq_28602957/article/details/52511529 tree命令可以以树形结构显示文件目录结构&#xff0c;它非常适合于我们给别人介绍我们的文件目录的组成框架&#xff0c;同时该命令使用适当的参数也可以将命令结果输出到文本文件中。 注&#x…...

OPTEE OS v1.1 REE FS文件系统分析

TEE文件系统中的文件拆分成一个meta文件和多个block文件存储在非安全端&#xff0c;文件结果如下 /* * We split a TEE file into multiple blocks and store them * on REE filesystem. A TEE file is represented by a REE file * called meta and a number of REE files…...

ree

werere...

ree都做了点啥

ree都做了点啥 Ruby Enterprise Edition Features Guide1. Overview of Ruby Enterprise Edition (REE)Ruby Enterprise Edition (REE) is a server-oriented distribution of the official Ruby interpreter, and includes various additional enhancements:A copy-on-write f…...

OPTEE OS V3.3 REE FS 文件系统分析

相关代码涉及主要涉及3个c文件&#xff0c;我们从底层开始 1. tee_ree_fs.c文件中 static const struct tee_fs_htree_storage ree_fs_storage_ops { .block_size BLOCK_SIZE, .rpc_read_init ree_fs_rpc_read_init, .rpc_read_final tee_fs_rpc_read_final,…...

OPTEE学习笔记 - REE与TEE通信

本文以REE驱动的加载为例&#xff0c;描述REE侧驱动与TEE侧驱动通信的过程 驱动的加载和初始化可以参考https://blog.csdn.net/shuaifengyun/article/details/72934531。已经做出较为详细的说明&#xff0c;这里对于其中一些更细节的内容做出一些记录&#xff0c;仅供学习参考…...

optee返回REE的几种方式

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】TEE从入门到精通-[目录] 👈👈👈 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,optee3.16,TF-A 2.6,linux kernel 5.14 引流关键词: optee、AT…...

android ree与tee,Android Fingerprint完全解析(一) :Fingerprint整体框架

1 TEE概述TEE: 可信执行环境(TEE&#xff0c;Trusted Execution Environment) 是Global Platform(GP)提出的概念&#xff0c;是和REE(Rich Execution Environment)相对应的&#xff0c;是ARM的一种模式。 我们一般也称TEE和REE为Secure World和Normal World。Android都跑在Norm…...

中国稀土元素(REE)市场趋势报告、技术动态创新及市场预测

【出版商】贝哲斯咨询 【免费目录下载】稀土元素是17种特殊的元素的统称&#xff0c;它的得名是因为瑞典科学家在提取稀土元素时应用了稀土化合物&#xff0c;所以得名稀土元素。 稀土元素&#xff08;REE&#xff09;市场的企业竞争态势 该报告涉及的主要国际市场参与者有Ch…...

微信小程序网易云音乐播放界面

微信小程序网易云效果图HTMLJSCSS效果图 HTML <view class"box"><!-- 毛玻璃 --><view class"bgImage"><image src"{{img}}" /></view><view class"top"><view class"topcen" wx:i…...

ree2

什么是React&#xff1f; React是一个JavaScript库 - 最受欢迎的库之一&#xff0c;在GitHub上有超过100,000颗星。 React不是一个框架&#xff08;与Angular不同&#xff0c;它更加自以为是&#xff09;。 React是一个由Facebook创建的开源项目 React用于在前端构建用户界面…...

REE和TEE的schedule

n年前&#xff0c;基于ARM的trust-zone技术&#xff0c;需要实现Security OS。当年Lianro的OP-TEE还不成熟&#xff0c;所以评估了当时可见的一些OS&#xff0c;确认是否适合做为Security OS。此篇文档是当年基于Trust-zone知识&#xff0c;拍脑袋写出来的REE和TEE的关系。当年…...

ps光处理教程

在网上收录了一些自己认为有帮助的教程 Photoshop给曝光不足的人像优化调亮处理 http://www.missyuan.com/thread-557032-1-1.html...

IDEA language level 介绍

IDEA 中 language level 介绍 转自https://www.cnblogs.com/signheart/p/4d2058ae687f9a29680c070de85f7fbe.html 感谢这位兄台的博客。...

IntelliJ IDEA 如何重命名变量、文件、文件夹。--(说高级点就是【重构】)

IntelliJ IDEA使用教程 &#xff08;总目录篇&#xff09; 我表示&#xff0c;我在刚刚使用这个编辑器的时候&#xff0c;还真不知道怎么去重命名一个变量&#xff0c;重命名一个文件&#xff0c;或者一个文件夹。 理论上讲&#xff0c;你要是改动一个地方&#xff0c;那么&a…...

孤独的单身罗汉——单例模式

单例模式 来了来了&#xff0c;他来了。大家好&#xff0c;我是老王。今天给大家带来的是23种设计模式的第一种——单例模式。前天写的第一篇文章设计模式的七大原则&#xff0c;是我第一次写文章&#xff0c;目前看了浏览量&#xff0c;让我信心大增。文章有什么讲述方式不对…...

【C语言】指针(基础篇)

文章目录基本概念什么是指针使用指针的优点指针的简单使用指针的定义格式、类型间接运算符实例指针步长的概念"本身"空间的大小步长实例空指针、野指针思维导图&#xff1a;基本概念 什么是指针 简单来说&#xff0c;指针就是一种保存变量地址的变量。 使用指针的优…...

接口和抽象类具体有什么区别?

今天看到用jdk1.8时&#xff0c;当接口使用default关键字时&#xff0c;可以把方法实例化的神奇现象。 所以就又复习了一下接口与抽象类的区别。 《《 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制&#xff0c;正是由于这两种机制的存在&#xff…...

c#中在函数后紧跟=,几个意思,差点懵逼到没有朋友!

以下是一段新建.net core web中的代码&#xff1a; 1 namespace TempCoreApp2 {3 public class Program4 {5 public static void Main(string[] args)6 {7 CreateWebHostBuilder(args).Build().Run();8 }9 10 public sta…...

const 和 volatile为什么能同时定义一个变量

< c primer plus > 书上的一段话&#xff0c;请前辈不吝执教&#xff0c;const 和 volatile怎么能同时定义一个变量呢&#xff0c;不明白。谢谢。 一个值可以同时是vonst和volatile。例如&#xff0c;硬件时钟一般设定为不能由程序改变&#xff0c;这一点使他成为const…...

本色:写的是我,说的是你

我们有责任持续努力让自己变得更好&#xff0c;但我的确相信我们各有各的命运。——巴勃罗卡萨尔斯《白鸟之歌》 在打击情敌争取情人上&#xff0c;钢琴是件绝对的利器。 把曾经恋过的对象转换成友谊&#xff0c;是有意义的&#xff0c;最糟糕的结局就是大家反目成仇。 一旦…...

getcoo php_php实现restful api有什么框架使用方便?

YII或者YII2.除了这两个&#xff0c;没有之一。为什么&#xff1f;因为我看见laravel还是什么的竟然用if-else来做Restfull。关于实现RestFullAPI。看这里&#xff1a;https://github.com/evan108108/RESTFullYii这个是全部RESTFULL的,完全满足楼主的要求。看看它的这个扩展关于…...

程序员真的是背锅侠吗?

上半年绩效考核终于接近尾声&#xff0c;我也有机会静下心来回顾过去半年的经历。 来 FB 工作虽然已半年多&#xff0c;但我骨子里依然是从毕业起就耳濡目染的那一套价值体系&#xff0c;任何在 FB 所经历的公司文化或者工程文化上的差异&#xff0c;都会带给我强烈的体验冲击…...

兄台息怒,关于arguments,您的想法和大神是一样一样的----闲聊JS中的apply和call...

JavaScript提供了apply和call两种调用方式来确定函数体中this的指向&#xff0c;表现出来的特征就是&#xff1a;对象可以借用其他对象的方法。之前的几篇博客回顾了一些Web控件的一些开发方法&#xff0c;我们聊了如何实现一个自定义的组合框&#xff0c;也聊了一个相对复杂一…...

兄台息怒,关于arguments,您的想法和大神是一样一样的----闲聊JS中的apply和call

JavaScript提供了apply和call两种调用方式来确定函数体中this的指向&#xff0c;表现出来的特征就是&#xff1a;对象可以借用其他对象的方法。 之前的几篇博客回顾了一些Web控件的一些开发方法&#xff0c;我们聊了如何实现一个自定义的组合框&#xff0c;也聊了一个相对复杂一…...

为什么自己理不清java_事理越辩越明,那么就来详细说说为什么我不喜欢Java*语言*...

写在前面&#xff1a;这篇文章是在谈Java“语言”&#xff0c;文章里面也会再强调一下的。支持.NET的朋友也不用认为Java平台就此没落了&#xff0c;搞Java也没必要用Java平台的其他优势来反驳。咱吵架也要专业点&#xff0c;不是么。最近我对Java语言唱衰似乎凶狠了一点&#…...

这位兄台,Android蓝牙了解一下?

Android 蓝牙及蓝牙通讯 一、蓝牙介绍&#xff1a; ####&#xff08;一&#xff09;、Bluetooth的由来及现状 蓝牙一词源于公元十世纪丹麦国王HaraldBlatand名字中的Blatand。Blatand的英文之意就是Blue tooth。这是因为这位让丹麦人引以为傲的国王酷爱吃蓝莓以至于牙龈都被染成…...

什么才是软件开发中最佳实践呢?

“描述一个事物&#xff0c;唯有一个名词定义它的概念&#xff0c;唯有一个动词揭露它的行为&#xff0c;唯有一个形容词表现它的特征。要做的&#xff0c;就是用心去寻找那个名词、那个动词、那个形容词……”—— 福楼拜 (Gustave Flaubert)我想讲个故事。很久很久以前&#…...

计算机中哪个字母代表1024m,电脑中经常用到的1G,1MB,1KB,1pbs等分别是什么意思?它们之间的关系是什么?...

电脑中经常用到的1G,1MB,1KB&#xff0c;1pbs等分别是什么意思&#xff1f;它们之间的关系是什么&#xff1f;來源:互聯網 2011-12-21 23:44:38 評論我也来凑凑热闹吧&#xff0c;我看是&#xff1a;1G1024M及1G1000M都没错。看在那里作标准&#xff0c;我们从电脑城里买回的…...

Mysql高级部分学习笔记(四)——锁理论

一、MVCC 1. 概念 多版本并发控制:读取数据时通过一种类似快照的方式将数据保存下来&#xff0c;这样读锁就和写锁不冲突了&#xff0c;不同的事务session会看到自己特定版本的数据&#xff0c;版本链。 不同存储引擎的MVCC. 不同存储引擎的MVCC实现是不同的,典型的有 乐观…...

数仓建模—数据质量

数据质量 今天我们看一下数据质量,其实我们在学习数仓的时候提到过如何评价一个数仓的好坏,我们一般是从稳定性、数据质量、及时性 这三个角度去衡量,当然关于这个怎么去量化我们前面提到过,数仓最终是为了支撑决策,决策的前提要保证数据的准确性也就是我们的数据质量,也…...

餐饮服务质量调查打分

任务描述&#xff1a; 有40个学生来给自助餐厅的食品和服务质量打分 分数划分为1&#xff5e;10这10个等级&#xff08;1表示最低分&#xff0c;10表示最高分&#xff09;&#xff0c;试统计调查结果&#xff0c;并用*打印出统计结果直方图。 请注意左边题目中对测试集格式的…...

Aspen Plus教程-孙兰义-例7.1-质量分数求解摩尔回收率

例7.1-简捷法设计精馏塔 质量分数求解摩尔回收率 进料量12500kg/h&#xff0c;乙苯质量分数0.5843&#xff0c;苯乙烯质量分数0.415&#xff0c;焦油质量分数0.0007&#xff0c;塔顶产品中乙苯含量不低于0.99&#xff0c;塔底产品中苯乙烯含量不低于0.997。计算塔顶乙苯的摩尔…...

CO2已知质量分数求摩尔分数求解计算,MEA吸收CO2

# -*- coding: utf-8 -*- """ Created on Wed Jan 13 14:20:38 2021author: xujifa """ from sympy import * import numpy as np 待求解方程&#xff1a;61.08x/(61.08x18.02*(1-x-0.15*x)) 0.3 61.08x/(61.08x18.02*(1-x-0.15*x))-0.3 0 其中…...

转换质量分数与摩尔分数

# 摩尔分数与质量分数转换# 1 引自Barracuda 引自Barracuda help 2 引自MFiX YH2XH2/MWH2⋅MWMIXY_{H_2}X_{H_2}/MW_{H_2} \cdot MW_{MIX} YH2​​XH2​​/MWH2​​⋅MWMIX​ YH2Y_{H_2}YH2​​为氢气摩尔分数 XH2X_{H_2}XH2​​为氢气质量分数 MWMIXMW_{MIX}MWMIX​为混合物…...

哈理工计算机分数线2020,2021哈尔滨理工大学研究生分数线一览表(含2019-2020历年复试)...

考研选择院校和专业时&#xff0c;2021哈尔滨理工大学研究生分数线是2022届考研非常重要的参考数据&#xff0c;体现了报考院校和专业的难易程度&#xff0c;为了方便大家查询&#xff0c;大学帮已经为大家整理好了2016-2021历年哈尔滨理工大学研究生复试分数线一览表&#xff…...

计算机基础知识得分公式,全国计算机等级考试一级MS Office是怎样算分数的

全国计算机等级考试一级MS Office是怎样算分数的以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;全国计算机等级考试一级MS Office是怎样算分数的上机评分的方法&#xff1a;他是按考生结果档…...

2020-基于质量的多模态生物识别系统自适应分数融合方法

2020&#xff0c;Applied Intelligence&#xff0c;Quality based adaptive score fusion approach for multimodal biometric system 3.2基于质量的自适应分数融合 提出一种基于可靠性因子α的自适应分数水平融合方法&#xff0c;该方法根据输入特征的质量对每个模态赋予不同…...

经典图像质量评价指标原理

有参评价指标 (1)均方误差&#xff08;MSE&#xff09;和峰值信噪比&#xff08;PSNR&#xff09; 均方误差&#xff08;Mean Squared Error, MSE&#xff09;通过取两幅图像的均方差来计算“平均误差”&#xff0c;是一种较方便简单的图像质量评价方法&#xff0c;可以评价数据…...

自己的灵魂-纪伯伦

自己的灵魂-纪伯伦 我曾七次鄙视自己的灵魂: 第一次,当它本可进取时&#xff0c;却故作谦卑&#xff1b; 第二次,当它空虚时&#xff0c;用爱欲来填充&#xff1b; 第三次,在困难和容易之间&#xff0c;它选择了容易&#xff1b; 第四次,它犯了错&#xff0c;却借由别人也会犯…...

自由而无用的灵魂

巧者劳而知者忧&#xff0c;无能者无所求&#xff0c;饱食而敖游&#xff0c;泛若不系之舟&#xff0c;虚而敖游者也。——《庄子》 让自由成为自己的选择&#xff0c;让无用只是他人的看法。真的对自己无用吗&#xff1f;未必&#xff0c;自由便是其用。真的对他人无用吗&…...

我曾经七次鄙视自己的灵魂

我曾经七次鄙视自己的灵魂 第一次&#xff0c;当它本可进取时&#xff0c;却故作谦卑&#xff1b; 第二次&#xff0c;当它在空虚时&#xff0c;用爱欲来填充&#xff1b; 第三次&#xff0c;在困难和容易之间&#xff0c;它选择了容易&#xff1b; 第四次&#xff0c;它犯…...

一个自由的灵魂和一个互联网世界

一个自由的灵魂和一个互联网世界 现在的互联网世界是丰富多彩的&#xff0c;也是很容易访问的&#xff0c;但这一切我们不应该忘记一位突出贡献者Jon Postel,一篇博士论文改名了域名输入的方法。 Jon Postel在互联网的基础性工作方面做了突出的贡献&#xff0c;比如通信协议&a…...

真正的自由是节制欲望自律简朴地去生活

卢梭说&#xff1a;“人生而自由&#xff0c;却无往不在枷锁中。”自由无价&#xff0c;但人总是不免困于世俗、困于心、困于情&#xff0c;有执着和偏见&#xff0c;更有痛苦、徘徊与挣扎。每个人都在寻找自由的出口&#xff0c;期望抵达心灵的港湾。生命的最高境界在于精神之…...

我曾七次鄙视自己的灵魂——纪伯伦

我曾七次鄙视自己的灵魂 第一次&#xff0c;当它本可进取时&#xff0c;却故作谦卑&#xff1b; 第二次&#xff0c;当它空虚时&#xff0c;用爱欲来填充&#xff1b; 第三次&#xff0c;在困难和容易之间&#xff0c;它选择了容易&#xff1b; 第四次&#xff0c;它犯了错…...