AirSim ROS 封装包(airsim_ros_pkgs)完全指南:从环境搭建、ROS API 到 PD 位置控制
自动驾驶人工智能深度学习强化学习计算机视觉科研【免费下载链接】AirSimOpen source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI Research项目地址https://gitcode.com/gh_mirrors/ai/AirSim点击查看免费下载AirSim 官方在ros/src/airsim_ros_pkgs目录下提供了一个基于 AirSim C 客户端库的 ROS 封装包它让 ROS 1Kinetic / Melodic / Noetic程序可以像操作真实无人机一样订阅 AirSim 中的里程计、传感器与图像数据并发布速度指令、调用起飞/降落/重置等服务从而无缝衔接基于 ROS 的自主飞行算法。本文以仓库中的官方文档 docs/airsim_ros_pkgs.md 为主体结合 airsim_ros_pkgs 包 的源码、launch 文件与消息定义完整讲解环境搭建、编译运行、两个 ROS 节点的完整 API 与 PD 位置控制器原理读完你就能在自己的机器上跑通 AirSim ROS 的仿真闭环。说明ros/src/airsim_ros_pkgs/README.md仅是跳转占位页本仓库中该文档的完整正文位于 docs/airsim_ros_pkgs.md下文内容即以其为骨架展开。一、包结构总览两个节点与三类接口从仓库目录看该包是一个标准的 catkin 包package.xml名称为airsim_ros_pkgsMIT 许可其功能可概括为一个 ROS 封装节点airsim_node封装 AirSim 的MultirotorRpcLibClient/CarRpcLibClient见 airsim_ros_wrapper.h负责把 AirSim 中的状态、传感器、图像、LIDAR 数据发布到 ROS 话题并把 ROS 话题上的控制指令下发到 AirSim。一个简单的 PD 位置控制器节点pd_position_controller_simple_node监听里程计与 GPS 原点通过服务接收位置目标输出速度指令VelCmd驱动airsim_node。消息与服务定义9 个自定义 msgmsg 目录与 7 个自定义 srvsrv 目录在 CMakeLists.txt 中通过add_message_files/add_service_files注册。从源码 airsim_node.cpp 可以看到入口逻辑读取私有参数host_ip默认localhost构造AirsimROSWrapper然后按需启动图像与 LIDAR 的异步回调队列 spinner最后ros::spin()。二、环境准备支持平台与依赖安装官方文档明确说明以下步骤面向Linux如果 AirSim 运行在 Windows 上可以在WSL1/WSL2中运行 ROS 封装详见后文“Windows10 WSL 方案”如果不方便在宿主机安装 ROS还可以用 Docker见“Docker 方案”。前提GCC 版本 8用gcc --version检查。如果默认 GCC 低于 8需要安装并显式指定sudo apt-get install gcc-8 g-8 gcc-8 --version # 验证安装按 Ubuntu 版本安装 ROS 及依赖包核心依赖是 tf2 sensor/geometry 与 mavros 系列Ubuntu 16.04 ROS Kineticsudo apt-get install ros-kinetic-tf2-sensor-msgs ros-kinetic-tf2-geometry-msgs ros-kinetic-mavros*Ubuntu 18.04 ROS Melodicsudo apt-get install ros-melodic-tf2-sensor-msgs ros-melodic-tf2-geometry-msgs ros-melodic-mavros*Ubuntu 20.04 ROS Noeticsudo apt-get install ros-noetic-tf2-sensor-msgs ros-noetic-tf2-geometry-msgs ros-noetic-mavros*安装 catkin_tools编译工作区用sudo apt-get install python-catkin-tools # 或 pip 安装 pip install catkin_tools # Ubuntu 20.04 上推荐从源码安装 pip install githttps://github.com/catkin/catkin_tools.git#eggcatkin_tools从 package.xml 的依赖声明看该包还依赖cv_bridge、image_transport、geographic_msgs、nav_msgs、sensor_msgs、geometry_msgs、std_srvs、tf2*、mavros_msgs以及运行时依赖joy手柄控制这些会在 catkin 编译时自动校验。三、编译先编 AirSim再编 ROS 工作区第一步编译 AirSim 本体封装包直接以源码方式链接 AirSim 的AirLib、MavLinkCom与rpclib见 CMakeLists.txt 中的add_subdirectorygit clone https://github.com/Microsoft/AirSim.git cd AirSim ./setup.sh ./build.sh第二步把 ROS 环境变量写入~/.bashrc把melodic换成你实际的 ROS 版本名echo source /opt/ros/melodic/setup.bash ~/.bashrc source ~/.bashrc第三步进入ros目录编译工作区cd ros catkin build # 或 catkin_make注意如果默认 GCC 不是 8 或更高版本编译会失败此时需显式指定 gcc-8/g-8catkin build -DCMAKE_C_COMPILERgcc-8 -DCMAKE_CXX_COMPILERg-8编译产物为两个可执行节点airsim_node与pd_position_controller_simple_node以及共享库airsim_ros、pd_position_controller_simple、airsim_settings_parser这些都在 CMakeLists.txt 中通过add_executable/add_library/install声明。四、运行启动封装节点与 RViz确保 AirSim 仿真环境Unreal/Unity 端已启动后运行source devel/setup.bash roslaunch airsim_ros_pkgs airsim_node.launch roslaunch airsim_ros_pkgs rviz.launchairsim_node.launchlaunch/airsim_node.launch启动airsim_node并 include 了 static_transforms.launch后者用tf的static_transform_publisher发布world_ned - world_enu的静态变换旋转参数1.57 0 3.14频率 100Hz。rviz.launchlaunch/rviz.launch以包内预置的 rviz/default.rviz 配置启动 RViz便于可视化 TF、里程计与点云。常见问题如果roslaunch airsim_ros_pkgs airsim_node.launch报错先执行catkin clean再重新编译。airsim_node.launch支持的关键启动参数参数默认值说明outputlog节点输出方式log或screenpublish_clockfalse是否发布 ROS/clock话题is_vulkantruelaunch 中硬编码为false是否为 Vulkan 渲染hostlocalhostAirSim 服务端 IP映射为节点参数host_iplaunch 内还设置了三个核心定时器参数见下表并可通过host参数向节点传递host_ip供 airsim_node.cpp 读取以连接远程 AirSim 实例。五、airsim_node 封装节点完整 ROS API封装节点围绕“发布感知数据 接收控制指令 提供服务”三组接口展开。所有带VEHICLE_NAME的话题名实际会替换为 AirSim settings.json 中配置的车辆名例如drone_1。5.1 发布者Publishers话题消息类型内容说明/airsim_node/origin_geo_pointairsim_ros_pkgs/GPSYaw全局 NED 坐标系对应的 GPS 坐标来自 AirSim settings.json 的OriginGeopoint键源码中由airsim_client_-getHomeGeoPoint()获取airsim_ros_wrapper.cpp/airsim_node/VEHICLE_NAME/global_gpssensor_msgs/NavSatFix无人机在 AirSim 中的当前 GPS 坐标/airsim_node/VEHICLE_NAME/odom_local_nednav_msgs/Odometry相对于起飞点的 NED 坐标系里程计话题名与坐标系类型可配置见参数表/airsim_node/VEHICLE_NAME/CAMERA_NAME/IMAGE_TYPE/camera_infosensor_msgs/CameraInfo相机内参信息/airsim_node/VEHICLE_NAME/CAMERA_NAME/IMAGE_TYPEsensor_msgs/Image图像RGB 或 float 类型取决于 settings.json 中请求的图像类型/tftf2_msgs/TFMessageTF 变换树/airsim_node/VEHICLE_NAME/altimeter/SENSOR_NAMEairsim_ros_pkgs/Altimeter高度计读数altitude、pressure、qnh/airsim_node/VEHICLE_NAME/imu/SENSOR_NAMEsensor_msgs/ImuIMU 数据/airsim_node/VEHICLE_NAME/magnetometer/SENSOR_NAMEsensor_msgs/MagneticField磁力计/罗盘磁场矢量/airsim_node/VEHICLE_NAME/distance/SENSOR_NAMEsensor_msgs/Range距离传感器如红外测距读数/airsim_node/VEHICLE_NAME/lidar/SENSOR_NAMEsensor_msgs/PointCloud2LIDAR 点云由airsim_client_lidar_.getLidarData(...)获取并转换airsim_ros_wrapper.cpp/airsim_node/VEHICLE_NAME/car_stateairsim_ros_pkgs/CarState车辆状态位姿/速度/档位/rpm/手刹见 airsim_ros_wrapper.cpp/airsim_node/VEHICLE_NAME/environmentairsim_ros_pkgs/Environment环境真值位置、气压、温度、空气密度、重力来自simGetGroundTruthEnvironment里程计话题的命名与坐标系在 airsim_ros_wrapper.cpp 中按以下规则联动默认world_frame_idworld_ned、odom_frame_idodom_local_ned一旦把world_frame_id设为world_enuodom 名会自动变为odom_local_enucoordinate_system_enu也自动置为true。5.2 订阅者Subscribers话题消息类型内容说明/airsim_node/vel_cmd_body_frameairsim_ros_pkgs/VelCmd机体坐标系速度指令。vehicle_name字段留空即可源码中 VelCmd 的该字段已被注释掉见 VelCmd.msg/airsim_node/vel_cmd_world_frameairsim_ros_pkgs/VelCmd世界坐标系速度指令/gimbal_angle_euler_cmdairsim_ros_pkgs/GimbalAngleEulerCmd云台欧拉角设定含camera_name、vehicle_name/gimbal_angle_quat_cmdairsim_ros_pkgs/GimbalAngleQuatCmd云台四元数设定/airsim_node/VEHICLE_NAME/car_cmdairsim_ros_pkgs/CarControls油门、刹车、转向与档位选择支持自动/手动变速箱示例见 scripts/car_joy.pyCarControls消息字段CarControls.msg依次为throttle油门、brake刹车、steering转向、handbrake手刹、manual是否手动档、manual_gear手动档位-1倒档、0空档、1前进档、gear_immediate是否立即换档。car_cmd_cbairsim_ros_wrapper.cpp在互斥锁保护下将其映射到CarApiBase::CarControls后下发。速度指令最终在定时器回调中通过get_multirotor_client()-moveByVelocityAsync(x, y, z, vel_cmd_duration_, ...)发送给 AirSimairsim_ros_wrapper.cpp单次速度指令持续时间vel_cmd_duration_ 0.05s。5.3 服务Services服务请求类型说明/airsim_node/VEHICLE_NAME/landairsim_ros_pkgs/Land降落指定无人机请求字段waitOnLastTask/airsim_node/takeoffairsim_ros_pkgs/Takeoff起飞/airsim_node/resetairsim_ros_pkgs/Reset重置所有无人机此外源码还注册了多机相关服务airsim_ros_wrapper.cppall_robots/land、group_of_robots/takeoff、all_robots/vel_cmd_body_frame、all_robots/vel_cmd_world_frame、group_of_robots/vel_cmd_body_frame、group_of_robots/vel_cmd_world_frame等对应 TakeoffGroup.srv 与 VelCmdGroup.msgstring[] vehicle_names批量下发。5.4 参数Parameters参数类型默认值说明/airsim_node/world_frame_idstringworld_ned在 airsim_node.launch 中设置设为world_enu自动切换到 ENU 坐标系/airsim_node/odom_frame_idstringodom_local_ned里程计坐标系名world_frame_id为world_enu时自动默认odom_local_enu/airsim_node/coordinate_system_enuboolfalse是否使用 ENU 坐标系world_frame_id设为world_enu时自动置 true/airsim_node/update_airsim_control_every_n_secdouble0.01s控制定时器回调周期更新里程计/状态并下发控制指令。当前 RPClib 到 Unreal 引擎的接口最高约 50HzROS 定时器回调会以最大可能速率运行官方建议不要改动此参数/airsim_node/update_airsim_img_response_every_n_secdouble0.01s图像定时器回调周期接收 AirSim 所有相机的图像。实际速度取决于请求的图像数量与分辨率同样建议不要改动/airsim_node/publish_clockdoublefalse为true时发布 ROS/clock话题仿真时钟同步launch 文件里实际设置的默认值为update_airsim_img_response_every_n_sec0.05、update_airsim_control_every_n_sec0.01、update_lidar_every_n_sec0.01见 airsim_node.launch。图像与 LIDAR 的回调队列在 airsim_node.cpp 中分别通过img_async_spinner_与lidar_async_spinner_异步驱动避免阻塞主控制回路。六、PD 位置控制器节点原理与 API封装包的第二个节点是“简单 PD 位置控制器”pd_position_controller_simple_node对应源码 pd_position_controller_simple.cpp 与头文件 pd_position_controller_simple.h。6.1 工作原理源码级解读订阅airsim_node发布的里程计/airsim_node/VEHICLE_NAME/odom_local_ned和原点 GPS/airsim_node/home_geo_point在airsim_odom_cb与home_geopoint_cb中分别缓存当前位置与 GPS 原点并用GeodeticConverter::setHome初始化大地坐标转换见 pd_position_controller_simple.cpp。通过服务/airsim_node/VEHICLE_NAME/gps_goal或/airsim_node/VEHICLE_NAME/local_position_goal接收目标点。GPS 目标会先由geodetic2Ned(...)ETH 库或EarthUtils::GeodeticToNedFast(...)AirLib 快速近似转换为 NED 局部坐标pd_position_controller_simple.cpp。定时器回调默认 0.01s中计算误差位置误差target - current偏航误差用math_common::angular_dist求最小角距然后按vel kp * error kd * prev_error计算速度指令其中比例项用当前误差、微分项用上一拍误差pd_position_controller_simple.cpp。通过enforce_dynamic_constraints对水平速度、垂直速度与偏航速率做限幅最后把VelCmd发布到/airsim_node/VEHICLE_NAME/vel_cmd_world_frame由airsim_node转发给 AirSimpd_position_controller_simple.cpp。当三维欧氏距离误差小于reached_thresh_xyz且偏航角差小于reached_yaw_degrees时判定“到达目标”此后保持在目标位姿悬停。6.2 PD 参数Parameters在 position_controller_simple.launch 中配置均属节点私有参数~参数类型默认值launch 示例说明/pd_position_node/kp_xdouble0.30x 方向比例增益/pd_position_node/kp_ydouble0.30y 方向比例增益/pd_position_node/kp_zdouble0.30z 方向比例增益/pd_position_node/kp_yawdouble0.30偏航比例增益/pd_position_node/kd_xdouble0.05x 方向微分增益/pd_position_node/kd_ydouble0.05y 方向微分增益/pd_position_node/kd_zdouble0.05z 方向微分增益/pd_position_node/kd_yawdouble0.05偏航微分增益/pd_position_node/reached_thresh_xyzdouble0.1m判定“到达”的三维欧氏距离阈值/pd_position_node/reached_yaw_degreesdouble5.0°判定“到达”的偏航角差阈值/pd_position_node/update_control_every_n_secdouble0.01s控制更新周期头文件中定义的代码级默认值pd_position_controller_simple.h为kp0.5、kd0.1、reached_thresh_xyz0.5、reached_yaw_degrees5.0launch 文件会用更保守的一组值覆盖。6.3 控制器服务与订阅类型名称说明服务/airsim_node/VEHICLE_NAME/gps_goal目标 GPS 位置 偏航请求字段latitude/longitude/altitude/yaw/vehicle_name高度为绝对高度SetGPSPosition.srv。asyncfalse且 30 秒内到达时返回successtrue服务/airsim_node/VEHICLE_NAME/local_position_goal目标局部位置 偏航请求字段x/y/z/yaw/vehicle_name坐标系为全局 NEDSetLocalPosition.srvz为 NED 下方向向下为正订阅/airsim_node/origin_geo_point监听airsim_node发布的起点 GPS 坐标用于 GPS→NED 转换订阅/airsim_node/VEHICLE_NAME/odom_local_ned监听airsim_node发布的里程计发布/vel_cmd_world_frame向airsim_node发送速度指令此外源码还提供了local_position_goal/override与gps_goal/override两个“覆盖式”服务pd_position_controller_simple.cpp可无视“正在执行上一个目标”的互斥逻辑直接改写目标点。6.4 全局动态约束参数在 dynamic_constraints.launch 中配置DynamicConstraints::load_from_rosparams从全局命名空间读取见 pd_position_controller_simple.cpp参数类型launch 示例值说明/max_vel_horz_absdoublelaunch 中被注释最大水平速度米/秒/max_vel_vert_absdouble2.0launch 中重复声明后值覆盖前值最大垂直速度米/秒/max_yaw_rate_degreedouble1.0最大偏航角速度度/秒注意dynamic_constraints.launch中第 3、4 行重复声明了max_vel_vert_abs依次为10.0与2.0按 rosparam 语义后者生效。头文件中的代码级默认值pd_position_controller_simple.h为max_vel_horz_abs1.0、max_vel_vert_abs0.5、max_yaw_rate_degree10.0。该 launch 还定义了云台角度限幅参数gimbal_front_center_max/min_pitch/yaw/roll。限幅逻辑在enforce_dynamic_constraints中对速度矢量按范数等比缩放实现。6.5 一键启动组合airsim_all.launch依次 includeairsim_node.launchdynamic_constraints.launchposition_controller_simple.launch一次拉起封装节点、动态约束与 PD 控制器是无人机闭环控制的推荐入口。airsim_with_simple_PD_position_controller.launch与airsim_all.launch内容相同等价别名。airsim_car_with_joy_control.launch车模式 手柄控制启动joy_node与car_joy并预置world_frame_idworld_enu、coordinate_system_enutrue。airsim_car_with_joy_control_auto.launch同上但car_joy的manual_transmission设为false即自动变速箱模式。七、车辆Car手柄控制car_joy.py 实战对于地面车辆包内提供了 Python 脚本 scripts/car_joy.py把 ROS 的joy话题事件翻译成CarControls并发布到/airsim_node/drone_1/car_cmd默认话题可通过~car_control_topic覆盖。脚本关键逻辑摇杆axes[1]控制油门/刹车正值给油门、负值给刹车~throttle_brake_sign可反转axes[2]经~max_curvature默认 0.75缩放后控制转向~steer_sign默认 -1决定转向方向。按键 0~5 分别对应前进、倒车、空档、驻车、降档、升档索引均可通过私有参数配置~nuetral_button_index为兼容旧版拼写的别名。档位语义-1倒档、0空档、1前进档手动模式~manual_transmissiontrue下用升/降档键逐级换挡自动模式false下直接挂到~auto_gear_max默认 5。驻车时置handbraketrue并把档位置 0发布频率由~update_rate_hz默认 20Hz控制数据用互斥锁保护以支持异步回调。使用前需先运行rosrun joy joy_node提供手柄原始数据。八、Windows10 WSL1/WSL2 方案官方文档提供了在 Windows 上运行 ROS 封装的两条路径一是用 WSL 跑封装节点、Windows 跑 AirSim二是用 Docker。8.1 WSL1 与 WSL2 的选择WSL2是较新版本在/home/...原生文件系统上工作时比 WSL1 快很多远快于/mnt/...下的 Windows 挂载盘官方强烈推荐用它编译代码。安装完成后可在 WSL1 / WSL2 之间自由切换。8.2 设置步骤按微软官方指引启用 WSL 并安装 Linux 发行版确保所选 Ubuntu 版本支持你要装的 ROS 版本。进入 Ubuntu 子系统后按前面“环境准备”与“编译”章节的 Linux 步骤执行即可。8.3 WSL 中运行图形程序X11可以在 Windows 上安装VcXsrv后在 WSL 中运行 XWindows 应用包括 SITL从开始菜单运行XLaunch。第一个弹窗选Multiple Windows第二个弹窗选Start no client第三个弹窗只勾选Clipboard不要选Native Opengl若连不上再选Disable access control。设置 DISPLAY 环境变量WSL1 下为127.0.0.1:0WSL2 下用下面的命令自动探测export DISPLAY$(cat /etc/resolv.conf | grep nameserver | awk {print $2}):0把该行加入~/.bashrc可免去重复执行。WSL2 下还可能需要为公共网络关闭防火墙或添加例外否则 VcXsrv 无法与 WSL2 通信。建议在 WSL 内安装 VSCode 进行代码编辑Windows Defender 会拖慢 WSL 磁盘性能可自行权衡是否关闭。8.4 WSL 与 Windows 的文件互访在 WSL 内访问 Windows 盘ls /mnt/c/Users/username/Documents在 Windows 资源管理器地址栏访问 WSL 文件\\wsl$\distribution name例如\\wsl$\Ubuntu-18.048.5 在 Windows 跑 AirSim、WSL 跑 ROS 封装设置宿主机 IPWSL1 用export WSL_HOST_IP127.0.0.1WSL2 用export WSL_HOST_IP$(cat /etc/resolv.conf | grep nameserver | awk {print $2})。像 Linux 一样启动封装并通过host参数指定该 IPsource devel/setup.bash roslaunch airsim_ros_pkgs airsim_node.launch output:screen host:$WSL_HOST_IP roslaunch airsim_ros_pkgs rviz.launchhost参数最终进入节点的host_ip参数见 airsim_node.cpp驱动MultirotorRpcLibClient/CarRpcLibClient连接对应 IP 上的 AirSim RPC 服务。九、Docker 方案仓库 tools/Dockerfile-ROS 提供了一个基于ubuntu:18.04的镜像定义创建免密 sudo 用户testuser并通过 tools/install_ros_deps.sh 安装 ROS 依赖。构建镜像cd tools docker build -t airsim-ros -f Dockerfile-ROS .运行容器把your-AirSim-folder-path换成你的 AirSim 目录绝对路径docker run --rm -it --nethost -v your-AirSim-folder-path:/home/testuser/AirSim airsim-ros:latest bash命令把宿主机 AirSim 目录挂载到容器内/home/testuser/AirSim宿主上的源码改动会即时反映到容器内方便开发调试。随后按“编译”章节步骤在容器内编译并运行 ROS 封装即可。十、典型使用流程小结启动 AirSim 仿真Unreal/Unity 端并在其 settings.json 中配置车辆与相机、设置OriginGeopoint。按本文第二、三节完成 GCC/ROS/catkin_tools 安装与catkin build编译。roslaunch airsim_ros_pkgs airsim_all.launch一次性启动封装节点 PD 控制器 动态约束。用rosservice call调用起飞与位置目标服务或在 RViz 中观察里程计、TF 与传感器话题。需要手柄驾驶车辆时改用airsim_car_with_joy_control.launch或_auto版本。相关参考资料docs/airsim_ros_pkgs.md本文文档主体、ros/src/airsim_ros_pkgs包源码、airsim_tutorial_pkgs配套的仿真教程包、docs/code_structure.md仓库结构总览。赞分享自动驾驶人工智能深度学习强化学习计算机视觉科研【免费下载链接】AirSimOpen source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI Research项目地址https://gitcode.com/gh_mirrors/ai/AirSim点击查看免费下载相关推荐AirSim ROS 封装airsim_ros_pkgs从环境搭建到多旋翼/车辆控制的完整实战指南AirSim ROS 封装airsim_ros_pkgs从环境搭建到多旋翼/车辆控制的完整实战指南 导读 airsim_ros_pkgs 是 AirSim自动驾驶人工智能深度学习强化学习计算机视觉科研从零搭建Autoware高效开发环境ROS 2包结构管理指南从零搭建Autoware高效开发环境ROS 2包结构管理指南 Autoware作为全球领先的自动驾驶开源项目其基于ROS 2的模块化架构为开发者提供了强大的自动驾驶Google Cartographer ROS API 完全指南Google Cartographer ROS API 完全指南 概述 Google Cartographer 是一个开源的实时同步定位与地图构建 SLAM 系机器人ROS上一篇Google Cloud KMS Python 示例库实战指南密钥创建、加密解密与权限配置python-docs-samples下一篇如何构建币安交易信号生成器技术指标与模式识别完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

技术面被问「你做过最难的项目」,用三段讲法 + 三层追问准备(附后端例子)

技术面被问「你做过最难的项目」,用三段讲法 + 三层追问准备(附后端例子)

几乎每一场技术面都会有这道题:「讲讲你做过最难 / 最有挑战的项目」。 它看起来是开放题,其实面试官心里有一张很具体的评分表。很多同学项目本身不差,却讲成了流水账,白白丢分。这篇把这道题拆开讲:面试官想听什么、…

2026/10/10 1:45:44 阅读更多 →
UWB定位算法仿真包:6种算法+实测数据+Matlab工程

UWB定位算法仿真包:6种算法+实测数据+Matlab工程

简介:本资源是一套面向通信与定位算法学习者的UWB高精度定位仿真代码包,聚焦卡尔曼滤波在超宽带室内定位中的建模、实现与优化,适用于高校研究生、嵌入式定位开发工程师及物联网定位方向实践者。包内共12个文件,含9个MATLAB核心算…

2026/10/10 1:44:44 阅读更多 →
express-validator 整 body 校验实战:直接验证字符串、数组与数值型请求体

express-validator 整 body 校验实战:直接验证字符串、数组与数值型请求体

后端 【免费下载链接】express-validator An express.js middleware for validator.js. 项目地址: https://gitcode.com/gh_mirrors/ex/express-validator 点击查看 免费下载 express-validator 的绝大多数校验都围绕 req.body 中的命名字段展开,但实际…

2026/10/10 1:44:44 阅读更多 →

最新新闻

SpringBoot+Vue+MySQL健康打卡系统:从设计到部署全解析

SpringBoot+Vue+MySQL健康打卡系统:从设计到部署全解析

最近好几届毕业生都在找我聊毕设选题,问来问去,出镜率最高的还是那类“管理系统”。之前有个学生拿了个题目过来——SpringBootVueMySQL的疫情打卡健康评测系统,源码、数据库、论文、部署文档全都带。我当时就跟他讲,这套组合拳打…

2026/10/11 2:46:14 阅读更多 →
11条降AI味提示词:让AI写出像人话的正式文本

11条降AI味提示词:让AI写出像人话的正式文本

写这段话之前,我刚把一段AI生成的总结扔进回收站。那篇总结每个字都工整、每段都对称,连“综上所述”都用了三遍——你挑不出什么大毛病,但你就是能一眼认出来这是机器写的。做内容这行久了,“机械输出”四个字其实很好辨认&#…

2026/10/11 2:46:14 阅读更多 →
百度AI情感倾向分析实战:微博评论批量处理与避坑指南

百度AI情感倾向分析实战:微博评论批量处理与避坑指南

简介:调用百度云API并用Python对微博评论进行情感偏向分析,是一套面向数据分析入门者与开发者的完整参考资源。资源内含可直接演练的微博评论数据文件,并配有调用百度API获取情感得分的程序代码,以及将原始得分标准化、映射到统一…

2026/10/11 2:46:14 阅读更多 →
Sentinel-3 OLCI数据下载、解析与批量预处理全流程实战

Sentinel-3 OLCI数据下载、解析与批量预处理全流程实战

前两周我帮一个做内陆水体遥感的朋友处理了一批 Sentinel-3 影像,他前面折腾了两天,卡在“数据下不下来”和“下下来不知道怎么打开”这两个环节上,最后我也跟着踩了一遍坑,才发现这套数据跟常用的哨兵2号在结构、格式、处理思路上…

2026/10/11 2:46:14 阅读更多 →
Moltbot/Clawdbot双助手架构:从零部署可扩展的AI智能助理系统

Moltbot/Clawdbot双助手架构:从零部署可扩展的AI智能助理系统

1. 方案整体拆解:双助手架构为什么是这个形态直接说结论:2026 年你还在用一个单体聊天机器人跑所谓的“智能助手”,天花板已经到头了。我这次构建的 Moltbot / Clawdbot 部署方案,核心思路是拆成两个角色——Moltbot 作为中枢大脑…

2026/10/11 2:46:14 阅读更多 →
2026年最新6款AI编程工具实测:个人开发者如何用AI独立完成项目

2026年最新6款AI编程工具实测:个人开发者如何用AI独立完成项目

去年底,我接了一个副业项目——帮一家线下工作室做预约管理后台。需求不算复杂:客户能在线选时间、提交预约,管理员能看到排期并导出。甲方预算有限,我一个人全栈扛下,从后端API到前端页面都得自己写。当时正好想深度体…

2026/10/11 2:45:13 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →