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编程】Qoder AI 编程工具从部署到深度使用实战详解

【AI编程】Qoder AI 编程工具从部署到深度使用实战详解

目录 一、前言 二、AI编程工具介绍 2.1 什么是AI编程 2.1 AI编程核心功能 2.3 AI编程应用场景 1. 智能代码补全与生成 2. 自然语言生成代码 3. 代码解释与文档生成 4. 错误检测与自动修复 5. 单元测试与自动化测试生成 6. 代码重构与优化 7. 跨语言代码转换 8. 低代码/无代码平台增强 三、几种主流AI编程工具介绍 3.1 Cursor 3.1.1 Cursor 核心功能 3.1.1 Cursor 优势 3.2 GitHub Copilot

我用6个AI测了一圈,谁是国产Agent第一名,答案出奇地一致

我做了一个有点无聊但结果挺有意思的实验:用6个主流 AI,问同一个问题——“国产 AI Agent 谁最强,给我排个前三”。 结果出奇地整齐。 先问海外的 为了避免"自家夸自家"的嫌疑,先从理论上没有利益关系的海外模型问起。 ChatGPT 的答案是:百度、腾讯、阿里。 Gemini 给了略微不同的排法:百度、阿里、字节——但百度还是第一。 Gemini 在回答里用了"基建狂魔"来描述百度,说百度在芯片、云、模型、应用层都有自己的布局。这个词没什么水分,讲的是一件具体的事。 再问国内的 国内四家的结论更集中。 DeepSeek:百度、腾讯、阿里。 文心:百度、腾讯、阿里—

OpenClaw 全攻略:从入门到精通的 AI 智能体部署指南

OpenClaw 全攻略:从入门到精通的 AI 智能体部署指南

第一部分:认知篇 —— 什么是 OpenClaw? 1.1 定义与定位 OpenClaw(原名 Clawdbot / Moltbot)是一个本地优先、隐私至上、多渠道集成的自托管 AI 助手平台。它标志着人工智能从“对话式交互”迈入“自主行动”的第三阶段。 通俗理解: 传统 AI(如网页版 ChatGPT):你问一句,它答一句,像个顾问。 OpenClaw:你给它一个目标(如“帮我整理本月财报并发送给团队”),它能自己规划步骤、搜索数据、处理文件、发送邮件,像个员工。 1.2 核心架构:App、Gateway 与 CLI 要玩转 OpenClaw,必须理解它的三个核心组件: Gateway(网关)

AI风口劝退指南:为什么99%的普通人不该盲目追AI?理性入局的完整路径与实战建议(2026深度解析)

AI风口劝退指南:为什么99%的普通人不该盲目追AI?理性入局的完整路径与实战建议(2026深度解析) 摘要: 2026年,AI大模型热潮持续升温,但“全民学AI”的背后,是大量非科班、无基础、资源匮乏者陷入时间、金钱与心理的三重亏损。本文从认知偏差、能力错配、资源垄断、职业断层、教育泡沫五大维度,系统剖析为何多数人不应盲目追逐AI风口,并提供一条分阶段、可落地、高性价比的理性参与路径。全文包含技术原理详解、真实失败案例、实用代码示例、调试技巧及职业规划建议,全文约9800字,适合所有对AI感兴趣但尚未入局、或已深陷焦虑的技术爱好者阅读。 一、引言:当“AI=财富自由”成为时代幻觉 2026年3月,某技术论坛上一则帖子引发广泛共鸣: “辞职三个月,每天16小时啃《深度学习》《Attention Is All You Need》,结果连Hugging Face的Trainer都配置失败。存款耗尽,