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

区块链|WEB3:时间长河共识算法(Time River Consensus Algorithm)

区块链|WEB3:时间长河共识算法(Time River Consensus Algorithm)

区块链|WEB3:时间长河共识算法(Time River Consensus Algorithm)(原命名为时间证明公式算法(TCC)) 本共识算法以「时间长河」为核心设计理念,通过时间节点服务器按固定最小时间间隔打包区块,构建不可篡改的历史数据链,兼顾区块链的金融属性与信用属性,所有优化机制形成完整闭环,无核心逻辑漏洞,具体总结如下: 一、核心机制(闭环无漏洞) 1. 节点准入与初始化:候选时间节点需先完成全链质押,首个时间节点由所有质押节点投票选举产生,彻底杜绝系统指定带来的初始中心化问题,实现去中心化初始化。 2. 时间节点推导与防作弊:下一任时间节点通过共同随机数算法从上一区块推导(输入参数:上一区块哈希、时间戳、固定数据顺序),推导规则公开可验证;时间节点需对数据顺序签名,任一节点发现作弊(篡改签名、操控随机数等),该节点立即失去时间节点资格并扣除全部质押。质押的核心目的是防止节点为持续获取区块打包奖励作弊,作弊损失远大于收益,确保共同随机数推导百分百不可作弊。 3. 节点容错机制:每个时间节点均配置一组合规质押节点构成的左侧顺邻节点队列(队列长度可随全网节点规

By Ne0inhk
kanass详解与实战 - kanass与soular相关联,实现统一登录

kanass详解与实战 - kanass与soular相关联,实现统一登录

本篇文章将介绍,如何通过soular实现kanass的统一登录 1、soular的安装与配置 1.1 安装 * 下载,点此下载,或直接使用命令在线下载安装包 wget -O tiklab-soular-1.1.5.rpm https://install.tiklab.net/app/install/soular/V1.1.5/tiklab-soular-1.1.5.rpm * 安装,以centos为例,将Linux下的centos安装包下载,并使用rpm命令安装soular。 sudo rpm -ivh tiklab-soular-1.1.5.rpm * 启动 安装成功后,会自动在opt目录下创建出tiklab-kanass目录,进入tiklab-kanass/bin目录下,使用sh命令启动kanass cd /opt/tiklab-soular/

By Ne0inhk
从零开始使用ISSACLAB训练自己的机器人行走

从零开始使用ISSACLAB训练自己的机器人行走

ISAACLAB入门教程 作者:陈维耀 1. 环境配置 1.1 推荐配置 * 操作系统: Ubuntu 22.04 LTS * 显卡: NVIDIA RTX 4080或以上 1.2 ubuntu 22.04 LTS安装 参考ZEEKLOG的Ubuntu 16.04 LTS安装教程,将其中的ubuntu 16.04镜像文件替换为ubuntu 22.04镜像文件,其他步骤保持不变,建议/home与/usr的硬盘容量均不少于200G。 1.3 安装NVIDIA驱动 根据自身显卡型号与操作系统,选择对应的显卡驱动,建议选择550.xxx.xxx版本的显卡驱动,按照教程进行安装即可,安装完成后在终端输入nvidia-smi,若出现以下信息则表示驱动安装成功: Thu Jun 5

By Ne0inhk
【征文计划】AR健身教练:形随心动 - 基于Rokid CXR-M SDK的实践落地

【征文计划】AR健身教练:形随心动 - 基于Rokid CXR-M SDK的实践落地

一、项目背景与创意起源 在当今快节奏的都市生活中,健身已成为许多人保持健康的重要方式。然而,居家健身面临一个普遍痛点:缺乏专业指导,容易因动作不规范导致运动损伤,同时低头看手机或平板的体验也大大降低了健身的沉浸感和效率。 根据《2024年中国健身行业白皮书》显示,超过65%的居家健身用户表示"缺乏专业指导"是他们放弃健身的主要原因。而Rokid Glasses作为一款轻量级AR眼镜,其独特的"抬头即见"交互方式,为解决这一问题提供了绝佳的硬件基础。 "形随心动"创意的诞生源于一个简单但关键的观察:如果能将专业教练"投射"到用户视野中,实时指导动作,同时提供直观的数据反馈,那么居家健身体验将发生质的飞跃。通过Rokid CXR-M SDK的AI场景、自定义页面和提词器功能,我们能够实现这一愿景。 二、Rokid CXR-M SDK 相关 1. Rokid

By Ne0inhk