2025睿抗机器人大赛智能侦查赛道省赛全流程

2025睿抗机器人大赛智能侦查赛道省赛全流程

2025睿抗机器人大赛智能侦查赛道省赛全流程——基础入门

安装好Ubuntu系统和ROS

  1. 安装Ubuntu
    首先需选择与目标 ROS 版本匹配的 Ubuntu 系统镜像(如 ROS Noetic 对应 Ubuntu 20.04、ROS Humble 对应 Ubuntu 22.04),从 Ubuntu 官网下载正版镜像文件;接着使用 U 盘启动盘制作工具(如 Rufus),将镜像写入空白 U 盘并设置为可引导模式;随后将制作好的 U 盘插入待安装设备(一般选择自己的笔记本电脑),重启设备并通过快捷键(不同的电脑按键不同,大家自行搜索)进入 BIOS 设置 U 盘为第一启动项;进入 Ubuntu 安装界面后,按需选择 “试用” 或 “安装 Ubuntu”,依次完成语言设置、磁盘分区(推荐新手选择 “清除磁盘并安装 Ubuntu”)、地区与时区设置、用户名及密码创建,等待系统文件复制与配置完成后重启设备,即可完成 Ubuntu 系统安装。ZEEKLOG有很多现成的好的方案,我在这就不班门弄斧了。
  2. 实操建议
    (1)对笔记本电脑的要求:处于Free状态的空间100G以上(我一般是用diskgenius分配空间),预留这么大主要是考虑到后续大家由于不熟悉使用,在前期入门的时候会安装不少东西,给大家实操留下足够的容错空间。
    (2)准备一个64G或者32G的U盘用于作启动盘,Ubuntu镜像下载可以去Ubuntu官网,但想要快点一般去中科大镜像源官网下载(清华源这些也可以),注意下载的版本一般是要对应,且一般是桌面版。
    (3)安装好之后相当于又是一个新的系统,接下来要做的是熟悉这个系统怎么使用(你当时怎么了解使用Windows的就可以怎么学习使用Ubuntu,只是要记住一点,Ubuntu系统整个底层是python构建起来的,你没看错,就是用你学的Python搭建起来的整个系统,因此在主环境下(即终端默认打开进去的环境)更新一些Python库的时候要注意不要无脑更新,尤其是在后续部署yolo的时候容易出现因为更新了某些库导致系统底层代码兼容性出问题
  3. 安装ROS
    十分十分推荐鱼香ROS一键安装,按照终端输出提示安装就行
wget http://fishros.com/install -O fishros && . fishros 
在这里插入图片描述

依次完成①更换系统源,更换系统源并删除旧源②ROS安装,系统版本是Ubuntu20.04–安装noetic,Ubuntu18.04–安装melodic,继续选择完整安装③rosdep更新,安装rosdepc④更新ROS环境设置⑤运行小乌龟检测是否安装成功,即

// 第一个终端输入下面的指令 roscore // 第二个终端输入下面的指令 rosrun turtlesim turtlesim_node // 第三个终端输入下面的指令 rosrun turtlesim turtle_teleop_key 

(光标要在这个终端闪动时,键盘控制小乌龟才是有效的,按键盘的向上等四个方向按键就可以控制乌龟运动,小乌龟的轨迹也会被记录出来。

新建工作空间和功能包

完成功能包gazebo_pkg配置

第一阶段:框架搭建

打开终端依次输入以下指令:

在这里插入图片描述

出现了下图所示的情况说明工作空间编译完成。

在这里插入图片描述


然后继续依次输入下面的指令:

在这里插入图片描述

出现了编译成功的结果(如下图)

在这里插入图片描述


之后可以添加环境变量设置,先打开文件夹到主目录下,勾选显示隐藏文件。

在这里插入图片描述

然后找到.bashrc文件,双击打开,在文件最后一行输入下面的指令之后保存退出即可

source ~/test_ws/devel/setup.bash 
在这里插入图片描述

最后在终端验证是否添加成功,注意这里需要新开一个终端,因为.bashrc文件相当于启动文件,可以理解为只要开终端就会自动执行的内容。

在这里插入图片描述

至此第一阶段配置算是完成了。下面进行第二阶段的配置,主要是编写机器人模型。

第二阶段:搭建机器人模型

继续在终端输入下面的指令:

在这里插入图片描述

在打开的waking_robot_new.xacro输入以下内容之后保存退出即可

<?xml version="1.0"?> <robot name="robot" xmlns:xacro="http://www.ros.org/wiki/xacro"> <xacro:property name="length_wheel" value="0.05" /> <xacro:property name="radius_wheel" value="0.06" /> <xacro:property name="camera_link" value="0.05" /> <xacro:property name="PI" value="3.1415926"/> <xacro:macro name="default_inertial" params="mass"> <inertial> <mass value="${mass}" /> <inertia ixx="0.1" ixy="0.0" ixz="0.0" iyy="0.1" iyz="0.0" izz="0.1" /> </inertial> </xacro:macro> <link name="dummy"> </link> <link name="base_footprint"> <visual> <geometry> <box size="0.001 0.001 0.001"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> </visual> <xacro:default_inertial mass="0.0001"/> </link> <joint name="dummy_joint" type="fixed"> <parent link="dummy"/> <child link="base_footprint"/> </joint> <!-- <xacro:include filename="$(find nav_sim)/urdf/robot.gazebo" /> --> <gazebo reference="base_footprint"> <material>Gazebo/Green</material> <turnGravityOff>false</turnGravityOff> </gazebo> <joint name="base_footprint_joint" type="fixed"> <origin xyz="0 0 0" /> <parent link="base_footprint" /> <child link="base_link" /> </joint> <link name="base_link"> <visual> <geometry> <box size="0.2 .3 .1"/> </geometry> <origin rpy="0 0 ${PI/2}" xyz="0 0 0.05"/> <material name="white"> <color rgba="1 1 1 1"/> </material> </visual> <collision> <geometry> <box size="0.2 .3 0.1"/> </geometry> </collision> <xacro:default_inertial mass="8.2"/> </link> <link name="wheel_1"> <visual> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> <!-- <origin rpy="0 1.5 0" xyz="0.1 0.1 0"/> --> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="black"> <color rgba="0 0 0 1"/> </material> </visual> <collision> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> </collision> <mu1>0.5</mu1> <mu2>0.5</mu2> <!-- <mu1>0.5</mu1> <mu2>0.5</mu2> --> <xacro:default_inertial mass="0.5"/> </link> <link name="wheel_2"> <visual> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> <!-- <origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/> --> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="black"/> </visual> <collision> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> </collision> <mu1>0.5</mu1> <mu2>0.5</mu2> <!-- <mu1>0.5</mu1> <mu2>0.5</mu2> --> <xacro:default_inertial mass="0.5"/> </link> <link name="wheel_3"> <visual> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> <!-- <origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/> --> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="black"/> </visual> <collision> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> </collision> <mu1>0.5</mu1> <mu2>0.5</mu2> <!-- <mu1>0.5</mu1> <mu2>0.5</mu2> --> <xacro:default_inertial mass="0.5"/> </link> <link name="wheel_4"> <visual> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> <!-- <origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/> --> <origin rpy="0 0 0" xyz="0 0 0" /> <material name="black"/> </visual> <collision> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> </collision> <mu1>0.5</mu1> <mu2>0.5</mu2> <!-- <mu1>0.5</mu1> <mu2>0.5</mu2> --> <xacro:default_inertial mass="0.5"/> </link> <joint name="base_to_wheel1" type="continuous"> <parent link="base_link"/> <child link="wheel_1"/> <origin rpy="${-PI/2} 0 0" xyz="0.1 0.13 0"/> <axis xyz="0 0 1" /> </joint> <joint name="base_to_wheel2" type="continuous"> <axis xyz="0 0 1" /> <anchor xyz="0 0 0" /> <limit effort="100" velocity="100" /> <parent link="base_link"/> <child link="wheel_2"/> <origin rpy="${-PI/2} 0 0" xyz="-0.1 0.13 0"/> </joint> <joint name="base_to_wheel3" type="continuous"> <parent link="base_link"/> <axis xyz="0 0 1" /> <child link="wheel_3"/> <origin rpy="${-PI/2} 0 0" xyz="0.1 -0.13 0"/> </joint> <joint name="base_to_wheel4" type="continuous"> <parent link="base_link"/> <axis xyz="0 0 1" /> <child link="wheel_4"/> <origin rpy="${-PI/2} 0 0" xyz="-0.1 -0.13 0"/> </joint> <!-- IMU joint --> <joint name="imu_joint" type="fixed"> <axis xyz="0 1 0" /> <origin xyz="0.125 0 0.125" rpy="0 0 0"/> <parent link="base_link"/> <child link="imu_link"/> </joint> <!-- IMU --> <link name="imu_link"> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="0.05 0.05 0.05"/> </geometry> </collision> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="0.05 0.05 0.05"/> </geometry> <material name="green"> <color rgba="0 1 0 1"/> </material> </visual> <inertial> <mass value="1e-2" /> <origin xyz="0 0 0" rpy="0 0 0"/> <inertia ixx="1e-6" ixy="0" ixz="0" iyy="1e-6" iyz="0" izz="1e-6" /> </inertial> </link> <!-- IMU --> <!-- Camera joint --> <joint name="camera_joint" type="fixed"> <axis xyz="0 1 0" /> <origin xyz="0.125 0 0.175" rpy="0 0 0"/> <parent link="base_link"/> <child link="camera_link"/> </joint> <!-- Camera --> <link name="camera_link"> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="0.05 0.05 0.05"/> </geometry> </collision> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="0.05 0.05 0.05"/> </geometry> <material name="red"> <color rgba="1 0 0 1"/> </material> </visual> <inertial> <mass value="1e-2" /> <origin xyz="0 0 0" rpy="0 0 0"/> <inertia ixx="1e-6" ixy="0" ixz="0" iyy="1e-6" iyz="0" izz="1e-6" /> </inertial> </link> <!-- camera --> <!-- Hokuyo joint --> <joint name="hokuyo_joint" type="fixed"> <origin xyz="0.125 0.0 0.225" rpy="0 0 0"/> <parent link="base_link"/> <axis xyz="0 1 0" /> <child link="laser_frame"/> </joint> <!-- Hokuyo Laser --> <link name="laser_frame"> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="0.05 0.05 0.05"/> </geometry> </collision> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <mesh filename="package://gazebo_pkg/meshes/hokuyo.dae"/> </geometry> </visual> <inertial> <mass value="1e-2" /> <origin xyz="0 0 0" rpy="0 0 0"/> <inertia ixx="1e-6" ixy="0" ixz="0" iyy="1e-6" iyz="0" izz="1e-6" /> </inertial> </link> <!-- hokuyo --> <!-- gazebo插件设置相关 --> <gazebo reference="base_link"> <material>Gazebo/Orange</material> </gazebo> <gazebo reference="wheel_1"> <material>Gazebo/Red</material> </gazebo> <gazebo reference="wheel_2"> <material>Gazebo/Black</material> </gazebo> <gazebo reference="wheel_3"> <material>Gazebo/Red</material> </gazebo> <gazebo reference="wheel_4"> <material>Gazebo/Black</material> </gazebo> <!-- ros_control plugin --> <!-- <gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> <robotNamespace>/robot</robotNamespace> <legacyModeNS> true </legacyModeNS> </plugin> </gazebo> --> <!-- camera_link --> <gazebo reference="camera_link"> <material>Gazebo/Red</material> </gazebo> <!-- hokuyo --> <gazebo reference="laser_frame"> <sensor type="ray" name="head_hokuyo_sensor"> <!-- <sensor type="gpu_ray" name="head_hokuyo_sensor"> --> <!-- GPU rate:15 30改为30可以有效避免地图更新不及时造成小车短暂迷路的情况--> <pose>0 0 0 0 0 0</pose> <visualize>false</visualize> <update_rate>30</update_rate> <ray> <scan> <horizontal> <samples>720</samples> <resolution>1</resolution> <min_angle>-3.1415926</min_angle> <max_angle>3.1415926</max_angle> </horizontal> </scan> <range> <min>0.05</min> <max>30.0</max> <resolution>0.01</resolution> </range> <noise> <type>gaussian</type> <!-- Noise parameters based on published spec for Hokuyo laser achieving "+-30mm" accuracy at range < 10m. A mean of 0.0m and stddev of 0.01m will put 99.7% of samples within 0.03m of the true reading. --> <mean>0.0</mean> <stddev>0.01</stddev> </noise> </ray> <!-- GPU版本 --> <!-- <plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_gpu_laser.so"> --> <plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_laser.so"> <topicName>/scan</topicName> <frameName>laser_frame</frameName> </plugin> </sensor> </gazebo> <!-- camera --> <gazebo reference="camera_link"> <sensor type="camera" name="camera1"> <update_rate>30.0</update_rate> <camera name="head"> <horizontal_fov>1.3962634</horizontal_fov> <image> <width>1920</width> <height>1080</height> <format>R8G8B8</format> </image> <clip> <near>0.02</near> <far>300</far> </clip> <noise> <type>gaussian</type> <!-- Noise is sampled independently per pixel on each frame. That pixel's noise value is added to each of its color channels, which at that point lie in the range [0,1]. --> <mean>0.0</mean> <stddev>0.007</stddev> </noise> </camera> <plugin name="camera_controller" filename="libgazebo_ros_camera.so"> <alwaysOn>true</alwaysOn> <updateRate>0.0</updateRate> <cameraName>/</cameraName> <imageTopicName>/cam</imageTopicName> <cameraInfoTopicName>camera_info</cameraInfoTopicName> <frameName>camera_link</frameName> <hackBaseline>0.07</hackBaseline> <distortionK1>0.0</distortionK1> <distortionK2>0.0</distortionK2> <distortionK3>0.0</distortionK3> <distortionT1>0.0</distortionT1> <distortionT2>0.0</distortionT2> </plugin> </sensor> </gazebo> <!-- Drive controller --> <gazebo> <plugin name="planar_controller" filename="libgazebo_ros_planar_move.so"> <enableYAxis>true</enableYAxis> <commandTopic>/cmd_vel</commandTopic> <odometryTopic>/odom</odometryTopic> <odometryFrame>odom</odometryFrame> <odometryRate>30</odometryRate> <robotBaseFrame>base_footprint</robotBaseFrame> </plugin> </gazebo> <!-- imu控制 --> <gazebo reference="imu_link"> <material>Gazebo/Orange</material> <gravity>true</gravity> <sensor name="imu_sensor" type="imu"> <always_on>true</always_on> <update_rate>100</update_rate> <visualize>true</visualize> <topic>__default_topic__</topic> <plugin filename="libgazebo_ros_imu_sensor.so" name="imu_plugin"> <topicName>/imu</topicName> <bodyName>imu_link</bodyName> <updateRateHZ>100.0</updateRateHZ> <gaussianNoise>0.0</gaussianNoise> <xyzOffset>0 0 0</xyzOffset> <rpyOffset>0 0 0</rpyOffset> <frameName>imu_link</frameName> </plugin> <pose>0 0 0 0 0 0</pose> </sensor> </gazebo> <!-- gazebo插件设置相关结束 --> </robot> 

之后去编写launch文件对机器人在rviz里面可视化,先新建launch文件夹,然后新建名为view_waking_robot.launch的launch文件(新建文件夹除了前面的mkdir指令也可以和Windows系统一样右击新建即可,这里不做演示,因为和Windows完全一样),并在launch文件里添加以下内容,之后保存退出

<launch> <!-- 1. 声明xacro文件路径(核心:替换为你的功能包名和实际文件路径) --> <param name="robot_description" command="$(find xacro)/xacro '$(find gazebo_pkg)/urdf/waking_robot_new.xacro'" /> <!-- 说明: - your_package_name:替换为你的ROS功能包名称(存放xacro文件的功能包) - urdf:若xacro文件存放在xacro文件夹,改为xacro即可 --> <!-- 2. 启动关节状态发布节点(静态模型可保留,动态模型必需,确保关节正常显示) --> <node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" /> <!-- 3. 启动机器人状态发布节点(将机器人描述和关节状态整合发布,RViz需依赖此节点) --> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" /> <!-- 4. 启动RViz可视化工具(可选:指定默认配置文件,无需手动重复配置) --> <node name="rviz" pkg="rviz" type="rviz" args="-d $(find gazebo_pkg)/rviz/test.rviz" output="screen" /> <!-- 说明: - 若没有自定义rviz配置文件,可删除 args="-d ..." 这部分,启动后手动配置 - 若要创建自定义rviz配置,先手动配置好后保存到功能包的rviz文件夹即可 - RVIZ是我提前新建好的,大家没有新建的话需要新建一下,至于里面的RVIZ文件是在运行没有配置RVIZ的launch时手动配置好保存在功能包的,具体流程如下,这里给出来的是配置好的launch --> </launch> 

这里要注意的是,Rviz已经配置好了,具体配置流程如下:
①启动 launch 文件后,RViz 界面打开,首先在左侧「Displays」面板中,设置 Fixed Frame 为机器人基坐标系(通常为 base_link 或 base_footprint,坐标系随便选择都可以,影响的只是机器人位置);
②点击左侧「Displays」面板下方的「Add」按钮,在弹出的窗口中选择 RobotModel 组件,点击「OK」添加。
③添加完成后,无需额外修改参数(Robot Description 默认识别 /robot_description 话题,与 launch 文件配置对应),此时即可在 RViz 中看到 waking_robot_new.xacro 对应的机器人 3D 可视化模型。(RobotModel会冒红,是因为缺失//gazebo_pkg/meshes/hokuyo.dae,这个下一步就会解决)。

出现下面的结果说明一切正常。

在这里插入图片描述

继续新建文件夹meshes,注意仍旧是在工作包gazebo_pkg里面。

在这里插入图片描述

进入gazebo_pkg下的meshes文件夹下,右击打开终端,使用touch命令进行下面两个文件:

在这里插入图片描述


在bot.dae文件里面添加一下内容:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1"> <asset> <contributor> <authoring_tool>Google SketchUp 8.0.3161</authoring_tool> </contributor> <created>2013-03-12T18:37:32Z</created> <modified>2013-03-12T18:37:32Z</modified> <unit meter="0.0254000" name="inch" /> <up_axis>Z_UP</up_axis> </asset> <library_visual_scenes> <visual_scene> <node name="SketchUp"> <instance_geometry url="#ID2"> <bind_material> <technique_common> <instance_material symbol="Material2" target="#ID4"> <bind_vertex_input semantic="UVSET0" input_semantic="TEXCOORD" input_set="0" /> </instance_material> </technique_common> </bind_material> </instance_geometry> <instance_geometry url="#ID10"> <bind_material> <technique_common> <instance_material symbol="Material2" target="#ID4"> <bind_vertex_input semantic="UVSET0" input_semantic="TEXCOORD" input_set="0" /> </instance_material> </technique_common> </bind_material> </instance_geometry> </node> </visual_scene> </library_visual_scenes> <library_geometries> <geometry> <mesh> <source> <float_array count="1380">0.0000000 -45.7519685 7.1023622 9.2094319 -27.6589793 7.1023622 0.0000000 0.0000000 7.1023622 27.3385827 -45.7519685 7.1023622 19.5952586 -27.6589793 7.1023622 19.5952586 -15.2455935 7.1023622 9.2094319 -15.2455935 7.1023622 27.3385827 0.0000000 7.1023622 0.0000000 -45.7519685 7.1023622 0.0000000 -42.4667573 3.5912116 0.0000000 -45.7519685 0.0000000 0.0000000 -41.4149158 4.3983180 0.0000000 -40.1900204 4.9056863 0.0000000 -38.8755457 5.0787402 0.0000000 0.0000000 7.1023622 0.0000000 -43.2738637 2.5393701 0.0000000 -43.7812320 1.3144747 0.0000000 -43.9542859 0.0000000 0.0000000 -37.5610710 4.9056863 0.0000000 -36.3361756 4.3983180 0.0000000 -35.2843341 3.5912116 0.0000000 -34.4772277 2.5393701 0.0000000 -33.9698594 1.3144747 0.0000000 -33.7968056 -0.0000000 0.0000000 -7.4224696 4.8068120 0.0000000 -8.6226772 4.3096697 0.0000000 -9.6533188 3.5188306 0.0000000 -10.4441579 2.4881890 0.0000000 -10.9413002 1.2879814 0.0000000 -11.1108661 0.0000000 0.0000000 -6.1344882 4.9763780 0.0000000 -4.8465068 4.8068120 0.0000000 -3.6462992 4.3096697 0.0000000 -2.6156576 3.5188306 0.0000000 -1.8248185 2.4881890 0.0000000 -1.3276762 1.2879814 0.0000000 -1.1581102 -0.0000000 0.0000000 0.0000000 0.0000000 27.3385827 -45.7519685 7.1023622 0.0000000 -45.7519685 0.0000000 27.3385827 -45.7519685 0.0000000 0.0000000 -45.7519685 7.1023622 27.3385827 -43.9542859 -0.0000000 27.3385827 -45.7519685 7.1023622 27.3385827 -45.7519685 0.0000000 27.3385827 -43.7812320 1.3144747 27.3385827 -43.2738637 2.5393701 27.3385827 -42.4667573 3.5912116 27.3385827 -41.4149158 4.3983180 27.3385827 -40.1900204 4.9056863 27.3385827 -38.8755457 5.0787402 27.3385827 0.0000000 7.1023622 27.3385827 -37.5610710 4.9056863 27.3385827 -36.3361756 4.3983180 27.3385827 -35.2843341 3.5912116 27.3385827 -34.4772277 2.5393701 27.3385827 -33.9698594 1.3144747 27.3385827 -33.7968056 0.0000000 27.3385827 -7.4224696 4.8068120 27.3385827 -8.6226772 4.3096697 27.3385827 -9.6533188 3.5188306 27.3385827 -10.4441579 2.4881890 27.3385827 -10.9413002 1.2879814 27.3385827 -11.1108661 -0.0000000 27.3385827 -6.1344882 4.9763780 27.3385827 -4.8465068 4.8068120 27.3385827 -3.6462992 4.3096697 27.3385827 -2.6156576 3.5188306 27.3385827 -1.8248185 2.4881890 27.3385827 -1.3276762 1.2879814 27.3385827 -1.1581102 0.0000000 27.3385827 0.0000000 0.0000000 0.0000000 0.0000000 7.1023622 27.3385827 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 27.3385827 0.0000000 7.1023622 30.0078740 -1.1581102 0.0000000 27.3385827 -11.1108661 -0.0000000 27.3385827 -1.1581102 0.0000000 30.0078740 -11.1108661 -0.0000000 27.3385827 0.0000000 0.0000000 0.0000000 -1.1581102 -0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 -11.1108661 0.0000000 0.0000000 -33.7968056 -0.0000000 0.0000000 -43.9542859 0.0000000 0.0000000 -45.7519685 0.0000000 27.3385827 -45.7519685 0.0000000 27.3385827 -33.7968056 0.0000000 27.3385827 -43.9542859 -0.0000000 -3.6456693 -1.3276762 1.2879814 0.0000000 -1.1581102 -0.0000000 -3.6456693 -1.1581102 -0.0000000 0.0000000 -1.3276762 1.2879814 -3.6456693 -1.8248185 2.4881890 0.0000000 -1.8248185 2.4881890 -3.6456693 -2.6156576 3.5188306 0.0000000 -2.6156576 3.5188306 0.0000000 -3.6462992 4.3096697 -3.6456693 -3.6462992 4.3096697 0.0000000 -4.8465068 4.8068120 -3.6456693 -4.8465068 4.8068120 0.0000000 -6.1344882 4.9763780 -3.6456693 -6.1344882 4.9763780 0.0000000 -7.4224696 4.8068120 -3.6456693 -7.4224696 4.8068120 0.0000000 -8.6226772 4.3096697 -3.6456693 -8.6226772 4.3096697 0.0000000 -9.6533188 3.5188306 -3.6456693 -9.6533188 3.5188306 -3.6456693 -10.4441579 2.4881890 0.0000000 -10.4441579 2.4881890 -3.6456693 -10.9413002 1.2879814 0.0000000 -10.9413002 1.2879814 -3.6456693 -11.1108661 0.0000000 0.0000000 -11.1108661 0.0000000 -3.6456693 -33.9698594 1.3144747 0.0000000 -33.7968056 -0.0000000 -3.6456693 -33.7968056 -0.0000000 0.0000000 -33.9698594 1.3144747 -3.6456693 -34.4772277 2.5393701 0.0000000 -34.4772277 2.5393701 -3.6456693 -35.2843341 3.5912116 0.0000000 -35.2843341 3.5912116 0.0000000 -36.3361756 4.3983180 -3.6456693 -36.3361756 4.3983180 0.0000000 -37.5610710 4.9056863 -3.6456693 -37.5610710 4.9056863 0.0000000 -38.8755457 5.0787402 -3.6456693 -38.8755457 5.0787402 0.0000000 -40.1900204 4.9056863 -3.6456693 -40.1900204 4.9056863 0.0000000 -41.4149158 4.3983180 -3.6456693 -41.4149158 4.3983180 0.0000000 -42.4667573 3.5912116 -3.6456693 -42.4667573 3.5912116 -3.6456693 -43.2738637 2.5393701 0.0000000 -43.2738637 2.5393701 -3.6456693 -43.7812320 1.3144747 0.0000000 -43.7812320 1.3144747 -3.6456693 -43.9542859 0.0000000 0.0000000 -43.9542859 0.0000000 30.0078740 -10.9413002 1.2879814 27.3385827 -11.1108661 -0.0000000 30.0078740 -11.1108661 -0.0000000 27.3385827 -10.9413002 1.2879814 30.0078740 -10.4441579 2.4881890 27.3385827 -10.4441579 2.4881890 30.0078740 -9.6533188 3.5188306 27.3385827 -9.6533188 3.5188306 27.3385827 -8.6226772 4.3096697 30.0078740 -8.6226772 4.3096697 27.3385827 -7.4224696 4.8068120 30.0078740 -7.4224696 4.8068120 27.3385827 -6.1344882 4.9763780 30.0078740 -6.1344882 4.9763780 27.3385827 -4.8465068 4.8068120 30.0078740 -4.8465068 4.8068120 27.3385827 -3.6462992 4.3096697 30.0078740 -3.6462992 4.3096697 27.3385827 -2.6156576 3.5188306 30.0078740 -2.6156576 3.5188306 30.0078740 -1.8248185 2.4881890 27.3385827 -1.8248185 2.4881890 30.0078740 -1.3276762 1.2879814 27.3385827 -1.3276762 1.2879814 30.0078740 -1.1581102 0.0000000 27.3385827 -1.1581102 0.0000000 30.0078740 -43.7812320 1.3144747 27.3385827 -43.9542859 -0.0000000 30.0078740 -43.9542859 -0.0000000 27.3385827 -43.7812320 1.3144747 30.0078740 -43.2738637 2.5393701 27.3385827 -43.2738637 2.5393701 30.0078740 -42.4667573 3.5912116 27.3385827 -42.4667573 3.5912116 27.3385827 -41.4149158 4.3983180 30.0078740 -41.4149158 4.3983180 27.3385827 -40.1900204 4.9056863 30.0078740 -40.1900204 4.9056863 27.3385827 -38.8755457 5.0787402 30.0078740 -38.8755457 5.0787402 27.3385827 -37.5610710 4.9056863 30.0078740 -37.5610710 4.9056863 27.3385827 -36.3361756 4.3983180 30.0078740 -36.3361756 4.3983180 27.3385827 -35.2843341 3.5912116 30.0078740 -35.2843341 3.5912116 30.0078740 -34.4772277 2.5393701 27.3385827 -34.4772277 2.5393701 30.0078740 -33.9698594 1.3144747 27.3385827 -33.9698594 1.3144747 30.0078740 -33.7968056 0.0000000 27.3385827 -33.7968056 0.0000000 27.3385827 -33.7968056 0.0000000 27.3385827 -43.7812320 -1.3144747 27.3385827 -43.9542859 -0.0000000 27.3385827 -43.2738637 -2.5393701 27.3385827 -42.4667573 -3.5912116 27.3385827 -41.4149158 -4.3983180 27.3385827 -40.1900204 -4.9056863 27.3385827 -38.8755457 -5.0787402 27.3385827 -37.5610710 -4.9056863 27.3385827 -36.3361756 -4.3983180 27.3385827 -35.2843341 -3.5912116 27.3385827 -34.4772277 -2.5393701 27.3385827 -33.9698594 -1.3144747 30.0078740 -33.7968056 0.0000000 27.3385827 -43.9542859 -0.0000000 27.3385827 -33.7968056 0.0000000 30.0078740 -43.9542859 -0.0000000 0.0000000 -43.7812320 -1.3144747 0.0000000 -33.7968056 -0.0000000 0.0000000 -43.9542859 0.0000000 0.0000000 -43.2738637 -2.5393701 0.0000000 -42.4667573 -3.5912116 0.0000000 -41.4149158 -4.3983180 0.0000000 -40.1900204 -4.9056863 0.0000000 -38.8755457 -5.0787402 0.0000000 -37.5610710 -4.9056863 0.0000000 -36.3361756 -4.3983180 0.0000000 -35.2843341 -3.5912116 0.0000000 -34.4772277 -2.5393701 0.0000000 -33.9698594 -1.3144747 0.0000000 -33.7968056 -0.0000000 -3.6456693 -43.9542859 0.0000000 -3.6456693 -33.7968056 -0.0000000 0.0000000 -43.9542859 0.0000000 0.0000000 -10.9413002 -1.2879814 0.0000000 -1.1581102 -0.0000000 0.0000000 -11.1108661 0.0000000 0.0000000 -10.4441579 -2.4881890 0.0000000 -9.6533188 -3.5188306 0.0000000 -8.6226772 -4.3096697 0.0000000 -7.4224696 -4.8068120 0.0000000 -6.1344882 -4.9763780 0.0000000 -4.8465068 -4.8068120 0.0000000 -3.6462992 -4.3096697 0.0000000 -2.6156576 -3.5188306 0.0000000 -1.8248185 -2.4881890 0.0000000 -1.3276762 -1.2879814 0.0000000 -11.1108661 0.0000000 -3.6456693 -1.1581102 -0.0000000 -3.6456693 -11.1108661 0.0000000 0.0000000 -1.1581102 -0.0000000 27.3385827 -1.1581102 0.0000000 30.0078740 -1.3276762 -1.2879814 27.3385827 -1.3276762 -1.2879814 30.0078740 -1.1581102 0.0000000 30.0078740 -1.1581102

Read more

两款开源AI工具神器:Antigravity Tools + Vibe Kanban 深度解析

你是不是为了使用AI大模型,注册多个账号享受新人福利,却被账号管理和切换搞得焦头烂额? 你是不是遇到过开着Claude Code编程时,想多开Agent并行工作,又担心代码混乱的困扰? 本文将深入解析两个极具创新性的开源项目,从不同维度解决AI时代开发者的痛点,堪称开源社区在AI工具链领域的前沿探索: * Antigravity Tools:专业的AI账号管理与协议反代系统 * Vibe Kanban:AI编码Agent编排平台 🎯 一、项目概览 1.1 Antigravity Tools:AI调度网关 Antigravity Tools 是基于 Tauri v2 + React (Rust) 构建的专业AI账号管理与切换工具,核心定位是「打破API调用壁垒的终极解决方案」——将常见Web端Session (Google/Anthropic) 转化为标准化API接口,成为个人高性能AI调度网关。 项目名称:Antigravity Manager 当前版本:v3.3.15 技术栈:Tauri v2 + React + Rust

By Ne0inhk
Git下载及安装保姆级教程(内附快速下载方法)

Git下载及安装保姆级教程(内附快速下载方法)

一、下载Git 1、Git的下载地址 Git-2.47.1-64-bit https://git-scm.com/downloads 选择相应的操作系统下载,这里给出的是当前最新版本2.47.1,如需下载之前的版本,可在图片显示的红框内,点击Older releases即可。 PS:由于一些原因,Git安装包下载速度较慢,可以复制资源链接到迅雷等第三方下载工具下载或直接下载本文的资源即可 2、等待安装 找到下载的安装包双击进行安装。 二、Git的安装 1、阅读说明 点击Next进行下一步。 2、选择安装路径 默认安装路径为C:\Program Files\Git,如需修改,点击①Browse选择文件夹,无需修改点击②Next进行下一步。 3、选择安装组件 ①为在桌面上显示Git图标,可以勾选。其余默认选项不建议取消勾选,以免安装出现意外问题。如确认无误,点击②

By Ne0inhk
完美解决 git 报错 “fatal: unable to access ‘https://github.com/.../.git‘: Recv failure Connection was rese

完美解决 git 报错 “fatal: unable to access ‘https://github.com/.../.git‘: Recv failure Connection was rese

文章目录 * 方法一:取消代理设置 * 方法二:设置系统代理 * 结语 🎉欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹✨博客主页:IT·陈寒的博客🎈该系列文章专栏:Java学习路线📜其他专栏:Java学习路线Java面试技巧Java实战项目AIGC人工智能数据结构学习🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏📜 欢迎大家关注! ❤️ 在使用 Git 进行代码管理的过程中,经常会遇到各种各样的问题,其中之一就是在执行 git clone 或 git pull 等操作时出现 “fatal: unable to access ‘https://github.com/…/.git’: Recv failure Connection was reset” 的报错。这个问题通常是由网络连接问题或代理设置不正确导致的。

By Ne0inhk
copilot学生认证2026-github copilot学生认证(手把手教会)

copilot学生认证2026-github copilot学生认证(手把手教会)

1.前言 博主在24年的时候发过一篇copilot认证成功的帖子,当时也是领到了一年的pro 文章链接:github copilot学生认证(手把手一小时成功)-ZEEKLOG博客 如今26年了,copilot的申请增加了一年的时间,博主也进入了研究生生涯,前段时间也是再次进行了申请,现在已经用上了,Pro 版直接解锁无限制基础功能 + 海量高级模型,我的感受是:真香!:   既然官方的申请有变化,咱们教程也得与时俱进,下面就开始手把手教大家如何进行申请copilot学生会员。 2.完善 GitHub 账号基础配置 在Emails里面加入你对应学校的教育邮箱(以edu.cn结尾),打开教育邮箱点击GitHub发送的验证邮件链接,即可完成邮箱认证 3.Github学生认证 完成上述步骤后,打开学生认证申请链接,依旧还是在设置里面,这里也可以用手机操作,因为上传证明材料用手机拍照更方便: 选择身份为学生,下滑填写学校信息,输入学校的英文,最后选择自己的学校教育邮箱,点击continue(还得分享位置) 接下来就是上传证明材料: * 可以使用手机摄像头拍摄,证件

By Ne0inhk