吉林省机器人大赛智能无人仿真车竞速比赛赛后总结

  • 个人总结
    • 备赛环节
    • 钉钉群内交流
    • 安装系统
    • 组委会赛道模型
    • 绘制赛道
    • 源代码下载链接
    • 小车运行视频成果展示
    • 小车三维模型代码
    • 调试参数
    • 比赛流程
    • 节点图
    • 比赛推荐使用的录屏软件:Kazam
      • Kazam下载方式
    • 哈希校验
    • 哈希值校验视频
    • 尾声

个人总结

对于个人而言,这是我获得的竞赛类最高奖项,省级一等奖,没有国家级的奖项,让我在多项荣誉伴随的同时倍感凄凉。梅西在12/19的凌晨带领球队夺得本届世界杯的冠军,他结束了来自内心的凄凉,拿到了属于自己的最高荣誉,他不在乎他是不是金靴,是不是MVP,因为这不是最高荣誉,只有全金的大力神杯才是他心中想要的,我没法与世界巨星相比较,他昨天的经历仿佛映照在现在的我身上,但是今天的他补足了这份遗憾,功成名就,而我,确实不再可能拿到属于我自己的本科阶段大学生竞赛类国奖。因而对我现在拿到的最高奖项作总结,当作遗憾,也作为纪念。

备赛环节

本次比赛在10月6日印发红头文件,我们收到竞赛通知是在10月11日,最比赛时间定为11月26,27日,可能因为疫情影响,最终时间改到12月4日,这个时间是智能无人仿真车竞速比赛,收到通知后,我们实验室成员首先进行分组商讨,但是有一位同学因疫情原因不能到校,所以分组方面纠结了有一周时间,为此深感羞愧。
组队组委会限制不超出三人,我们最终组名定为“一xin”,三人成一组开始了长达一月半备赛,也不要嘲笑我,这虽然不是我们学院第一次参加这个比赛的这个项目,但是并没有真正做出可以跑动作品的学长,没有了前人栽树,哪有后人乘凉的道理,这一月半就当我为学院栽了棵树,做了微乎其微了贡献。
既然是栽树,那第一件事就是看看树是什么品种,不错,我们连这个比赛是什么都不知道,什么是ROS,什么是Gazebo,什么又是Sim_time等等,其实当时坚持了两周没有一点头绪时组内就不想接着做下去了,有这些时间背几个abandon也是好的,幸好有一天,我们装好系统了,这么点成就也足以成为我们继续做下去的动力。

钉钉群内交流

钉钉群是组委会赛前培训比赛内容,发布比赛规则,解决参赛选手问题的群聊,但是并不会在我们存在问题的时候去指导怎么做,我为自己和组内另一位同学配置完两套系统,(防止赛时我的电脑崩溃,作备用)可以说一样的电脑存在的问题并不相同,所以在群内的error问题和bug问题,组委会是不可能为我们解决的,而且这种也保证了比赛的公平性,当时感觉很无奈,现在想想确实考验参赛选手的各方面素质。

这是摘取的群内部分聊天,可以看到,包括我在内的很多人都存在问题,他们与我分别来自省内的21所大学,我也通过这次比赛结识了许多志同道合的同学。

安装系统

整体的运行环境要在虚拟机上进行,要下载的有VMware,其次是ubuntu,组委会在培训时使用的版本是16.04,但是对于比赛的ubuntu版本不作限制,经过大量版本对比查阅后我们下载了较新版本的20.04,之后就是安装机器人操作系统ROS,最后便是Gazebo和Rviz(如下图标),最后导入组委会提供的小车模型,赛道模型和基本参数。

组委会赛道模型

赛道模型并不复杂,采用“去”“回”模式,也就是对称模型 ,但是对于代码控制的仿真车来讲便是个问题了,组委会禁止向小车发送实时位置坐标,刚开始我还不理解为什么要这么限制,后续做出点眉目的时候才明白,向小车实时发布坐标就等同于上帝视角,驾照都应该学过,如果给我们上帝视角去考试,会有人挂科吗?所以取消这种做法做出来的小车便具有不确定性,我最终最出来的小车在比赛的时间也是在限定五分钟内重跑了一次,庆幸第二次跑成功了,最终公布的成绩单中时间是1分28秒。

绘制赛道

做好环境配置工作后,需要绘制小车运行的地图。
绘制过程中需要手动控制按键WASD,待小车走完全图,地图建立完毕。

地图建立后,需要保存,保存默认在主文件夹,需要将地图放置到工程中的map文件夹下。保存命令为

rosrun map_server map_saver -f test_map//“test_map”是地图名

启动Gazebo,Rviz命令

roslaunch bringup racecar_gazebo_rviz.launch

输入上方命令时,Rviz里没有地图,需要输入地图命令。
运行小车地图命令

roslaunch bringup move_base.launch

源代码下载链接

链接: https://download.csdn.net/download/CauchyKAI/87319786.

小车运行视频成果展示

链接: https://www.bilibili.com/video/BV1zM41127uA/?vd_source=e1a731dd19e7c02baaa22bc85db8648c.

小车三维模型代码

小车的初始位置不能改变!!!

x=-0.5;
y=0.0;
z=0.0;

racecar.launch

<?xml version="1.0"?>
<launch><!-- 设置launch文件的参数 --><arg name="paused" default="false"/><arg name="use_sim_time" default="true"/><arg name="gui" default="true"/><arg name="headless" default="false"/><arg name="debug" default="false"/><!--模型车的位置不能修改--><arg name="x_pos" default="-0.5"/><arg name="y_pos" default="0.0"/><arg name="z_pos" default="0.0"/><!--运行gazebo仿真环境--><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="debug" value="$(arg debug)" /><arg name="gui" value="$(arg gui)" /><arg name="paused" value="$(arg paused)"/><arg name="use_sim_time" value="$(arg use_sim_time)"/><arg name="headless" value="$(arg headless)"/><arg name="world_name" value="$(find racecar_gazebo)/worlds/racetrack.world"/><!-- 此处改成参赛者放置.world文件的地址--></include><!-- 加载机器人模型描述参数 --><param name="robot_description" command="$(find xacro)/xacro --inorder '$(find racecar_description)/urdf/racecar.urdf.xacro'"/><!--运行joint_state_publisher节点,发布机器人关节状态--><node name = "robot_state_publisher" pkg = "robot_state_publisher" type = "state_publisher"><param name="publish_frequency" type="double" value="20.0" /></node><!-- 在gazebo中加载机器人模型--><node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"args="-urdf -model shcrobot -param robot_description -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos)"/>
</launch>

camera.xacro

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="camera"><link name="camera_link"><inertial><mass value="0.001" /><origin xyz="0 0 0" /><inertia ixx="0.001" ixy="0.0" ixz="0.0"iyy="0.001" iyz="0.0"izz="0.001" /></inertial><visual><origin xyz=" 0 0 0 " rpy="1.57 0 1.57" /><geometry><mesh filename="package://racecar_description/meshes/S1030-0315.dae" scale="0.1 0.1 0.1" /></geometry></visual><collision><origin xyz="0.0 0.0 0.0" rpy="0 0 0" /><geometry><box size="0.03 0.16 0.03" /></geometry></collision></link><gazebo reference="camera_link"><material>Gazebo/Black</material></gazebo> <gazebo reference="camera_link"><sensor type="camera" name="camera_node"><pose>0 0 0 0 0 0</pose><update_rate>30.0</update_rate><camera name="head"><horizontal_fov>1.3962634</horizontal_fov><image><width>1280</width><height>720</height><format>R8G8B8</format></image><clip><near>0.02</near><far>300</far></clip><noise><type>gaussian</type><mean>0.0</mean><stddev>0.007</stddev></noise></camera><plugin name="gazebo_camera" filename="libgazebo_ros_camera.so"><alwaysOn>true</alwaysOn><updateRate>0.0</updateRate><cameraName>/camera</cameraName><imageTopicName>image_raw</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>
</robot>

imu.xacro

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="imu"><xacro:macro name="imu" params="prefix:=imu"><!-- Create laser reference frame --><link name="${prefix}_link"><inertial><mass value="0.001" /> <origin xyz="0 0 0" /><inertia ixx="0.001" ixy="0.0" ixz="0.0"iyy="0.001" iyz="0.0"izz="0.001" /></inertial><visual><origin xyz=" 0 0 0 " rpy="0 0 0" /><geometry><box size="0.04 0.04 0.03" /></geometry><material name="black"/></visual><collision><origin xyz="0.0 0.0 0.0" rpy="0 0 0" /><geometry><box size="0.04 0.04 0.03" /></geometry></collision></link><gazebo reference="${prefix}_link"><material>Gazebo/Black</material></gazebo><gazebo reference="${prefix}_link"><gravity>true</gravity><sensor name="imu_sensor" type="imu"><always_on>true</always_on><update_rate>100</update_rate><visualize>true</visualize><topic>/imu_data</topic><plugin filename="libgazebo_ros_imu_sensor.so" name="imu_plugin"><topicName>/imu_data</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></xacro:macro>
</robot>

lidar.xacro

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="lidar"><xacro:macro name="lidar" params="prefix:=laser"><!-- Create laser reference frame --><link name="${prefix}_link"><inertial><mass value="0.001" /><origin xyz="0 0 0" /><inertia ixx="0.001" ixy="0.0" ixz="0.0"iyy="0.001" iyz="0.0"izz="0.001" /></inertial><visual><origin xyz=" 0 0 0 " rpy="0 0 0" /><geometry><cylinder length="0.05" radius="0.05"/></geometry><material name="black"/></visual><collision><origin xyz="0.0 0.0 0.0" rpy="0 0 0" /><geometry><cylinder length="0.06" radius="0.05"/></geometry></collision></link><gazebo reference="${prefix}_link"><material>Gazebo/Black</material></gazebo><gazebo reference="${prefix}_link"><sensor type="ray" name="ls01g"><pose>0 0 0 0 0 0</pose><visualize>false</visualize><update_rate>10.0</update_rate><ray><scan><horizontal><samples>360</samples><resolution>1</resolution><min_angle>-3.1415926</min_angle><max_angle>3.1415926</max_angle></horizontal></scan><range><min>0.10</min><max>8.0</max><resolution>0.01</resolution></range><noise><type>gaussian</type><mean>0.0</mean><stddev>0.01</stddev></noise></ray><plugin name="gazebo_ls01g" filename="libgazebo_ros_laser.so"><topicName>/scan</topicName><frameName>laser_link</frameName></plugin></sensor></gazebo></xacro:macro>
</robot>

racecar.urdf.xacro

<?xml version="1.0"?>
<robot name="racecar" xmlns:xacro="http://www.ros.org/wiki/xacro"><!-- include sensors --><xacro:include filename="$(find racecar_description)/urdf/sensors/lidar.xacro" /><xacro:include filename="$(find racecar_description)/urdf/sensors/imu.xacro" /><xacro:include filename="$(find racecar_description)/urdf/sensors/camera.xacro" /><!-- Degree-to-radian conversions --><xacro:property name="degrees_45" value="0.785398163"/><xacro:property name="degrees_90" value="1.57079633"/><!-- chassis_length is measured along the x axis, chassis_widthalong the y axis, and chassis_height along the z axis. --><xacro:property name="chassis_length" value="0.258"/><xacro:property name="chassis_width" value="0.168"/><xacro:property name="chassis_height" value="0.01"/><xacro:property name="chassis_mass" value="2.788"/><!-- battery_dist is the distance between the inner edges of thebatteries. battery_comp_depth is the battery compartment depth.battery_length is measured along the x axis, battery_widthalong the y axis, and battery_height along the z axis. --><xacro:property name="battery_x_offset" value="0.055"/><xacro:property name="battery_dist" value="0.065"/><xacro:property name="battery_comp_depth" value="0.02"/><xacro:property name="battery_comp_angle" value="0.34906585"/><xacro:property name="battery_length" value="0.16"/><xacro:property name="battery_width" value="0.047"/><xacro:property name="battery_height" value="0.024"/><xacro:property name="battery_mass" value="0.5025"/><!-- hub_dia and tire_dia are the diameters of the hub and tire,respectively. hex_hub_depth is the distance that the hex hub isinset from the outer edge of the tire. It is set so that each wheelis a "zero offset" wheel. hex_hub_depth = tire_width / 2 -axle_length. --><xacro:property name="hub_dia" value="0.09652"/><xacro:property name="tire_dia" value="0.14605"/><xacro:property name="tire_width" value="0.0889"/><xacro:property name="hex_hub_depth" value="0.01445"/><xacro:property name="wheel_mass" value="0.29"/><!-- hex_hub_dist is the distance between left and right hex hubs whenthe shock absorbers are fully extended. axle_length is the distancefrom a U joint to the corresponding hex hub. wheel_travel is thevertical wheel travel. --><xacro:property name="wheelbase" value="0.335"/><xacro:property name="hex_hub_dist" value="0.365"/><xacro:property name="axle_length" value="0.03"/><xacro:property name="wheel_travel" value="0.084"/><xacro:property name="shock_z_offset" value="0.0655"/><!-- shock_eff_limit is 2 * ((shock_stroke / 2) * shock_spring_constant) N.shock_stroke is 0.028575 meters. shock_spring_constant, an approximationof a Traxxas Ultra Shock shock absorber spring's constant, is437.817 N/m. --><xacro:property name="shock_eff_limit" value="12.5106"/><xacro:property name="shock_vel_limit" value="1000"/><!-- The specifications for a Titan(R) 550 motor could not be found, so thestall torque of a Mabuchi Motor(R) RS-550VC-7525 motor was used instead.num_spur_gear_teeth = 68num_pinion_gear_teeth = 19final_gear_ratio = (num_spur_gear_teeth / num_pinion_gear_teeth) *5.22 = 18.68stall_torque = 0.549 N maxle_eff_limit = ((2 * stall_torque) * final_gear_ratio) / 4 =5.12766 N mmax_speed = 40 mph (30+ mph) = 17.8816 m/saxle_vel_limit = (2 * pi) * (max_speed / (pi * tire_dia)) =244.8696 rad/s --><xacro:property name="axle_eff_limit" value="5.12766"/><xacro:property name="axle_vel_limit" value="244.8696"/><!-- These constants are used to simulate a Traxxas 2056 servo operated at6 V. servo_stall_torque is measured in N m. servo_no_load_speed ismeasured in rad/s. --><xacro:property name="servo_stall_torque" value="0.5649"/><xacro:property name="servo_no_load_speed" value="4.553"/><xacro:property name="layer_mass"   value="0.0" /><xacro:property name="layer_x" value="0.40"/><xacro:property name="layer_y" value="0.18"/><xacro:property name="layer_z" value="0.01"/><xacro:property name="layer_height" value="0.08"/><material name="battery_mat"><color rgba="0 0 1 1"/></material><material name="chassis_mat"><color rgba="0.5 0.5 0.5 1"/></material><material name="tire_mat"><color rgba="0 0 0 1"/></material><material name="yellow"><color rgba="1 0.4 0 1"/></material><!-- Null inertial element. This is needed to make the model work withGazebo. --><xacro:macro name="null_inertial"><inertial><mass value="0.001"/><inertia ixx="0.001" ixy="0" ixz="0" iyy="0.001" iyz="0" izz="0.001"/></inertial></xacro:macro><!-- Inertia of a solid cuboid. Width is measured along the x axis, depthalong the y axis, and height along the z axis. --><xacro:macro name="solid_cuboid_inertial"params="width depth height mass *origin"><inertial><xacro:insert_block name="origin"/><mass value="${mass}"/><inertia ixx="${mass * (depth * depth + height * height) / 12}"ixy="0" ixz="0"iyy="${mass * (width * width + height * height) / 12}"iyz="0"izz="${mass * (width * width + depth * depth) / 12}"/></inertial></xacro:macro><!-- Inertia of a thick-walled cylindrical tube with open ends. Height ismeasured along the z axis, which is the tube's axis. inner_rad andouter_rad are the tube's inner and outer radii, respectively. --><xacro:macro name="thick_walled_tube_inertial"params="inner_rad outer_rad height mass"><inertial><mass value="${mass}"/><inertia ixx="${(1 / 12) * mass * (3 * (inner_rad * inner_rad +outer_rad * outer_rad) + height * height)}"ixy="0" ixz="0"iyy="${(1 / 12) * mass * (3 * (inner_rad * inner_rad +outer_rad * outer_rad) + height * height)}"iyz="0"izz="${mass * (inner_rad * inner_rad +outer_rad * outer_rad) / 2}"/></inertial></xacro:macro><!-- Battery --><xacro:macro name="battery" params="prefix reflect"><joint name="chassis_to_${prefix}_battery" type="fixed"><parent link="chassis"/><child link="${prefix}_battery_offset"/><origin xyz="${battery_x_offset - battery_length / 2}${reflect * battery_dist / 2}0"rpy="${reflect * battery_comp_angle} 0 0"/></joint><link name="${prefix}_battery_offset"><xacro:null_inertial/></link><joint name="offset_to_${prefix}_battery" type="fixed"><parent link="${prefix}_battery_offset"/><child link="${prefix}_battery"/><origin xyz="0${reflect * battery_width / 2}${(battery_height / 2) - battery_comp_depth}"/></joint><link name="${prefix}_battery"><visual><geometry><box size="${battery_length} ${battery_width} ${battery_height}"/></geometry><material name="battery_mat"/></visual><collision><geometry><box size="${battery_length} ${battery_width} ${battery_height}"/></geometry></collision><xacro:solid_cuboid_inertialwidth="${battery_length}" depth="${battery_width}"height="${battery_height}" mass="${battery_mass}"><origin/></xacro:solid_cuboid_inertial></link><gazebo reference="${prefix}_battery"><material>Gazebo/Blue</material></gazebo></xacro:macro><!-- Shock absorber --><xacro:macro name="shock"params="lr_prefix fr_prefix lr_reflect fr_reflect child"><joint name="${lr_prefix}_${fr_prefix}_shock" type="prismatic"><parent link="chassis"/><child link="${child}"/><origin xyz="${fr_reflect * wheelbase / 2}${lr_reflect * ((hex_hub_dist / 2) - axle_length)}${(wheel_travel / 2) - shock_z_offset}"/><axis xyz="0 0 -1"/><limit lower="${-wheel_travel / 2}" upper="${wheel_travel / 2}"effort="${shock_eff_limit}" velocity="${shock_vel_limit}"/></joint><transmission name="${lr_prefix}_${fr_prefix}_shock_trans"><type>transmission_interface/SimpleTransmission</type><joint name="${lr_prefix}_${fr_prefix}_shock"><hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface></joint><actuator name="${lr_prefix}_${fr_prefix}_shock_act"><!-- This hardwareInterface element exists for compatibilitywith ROS Hydro. --><hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface><mechanicalReduction>1</mechanicalReduction></actuator></transmission></xacro:macro><!-- The "wheel" macro defines an axle carrier, axle, and wheel. --><xacro:macro name="wheel" params="lr_prefix fr_prefix lr_reflect"><link name="${lr_prefix}_${fr_prefix}_axle_carrier"><xacro:null_inertial/></link><!-- The left and right axles have the same axis so that identicalrotation values cause the wheels to rotate in the same direction. --><joint name="${lr_prefix}_${fr_prefix}_axle" type="continuous"><parent link="${lr_prefix}_${fr_prefix}_axle_carrier"/><child link="${lr_prefix}_${fr_prefix}_wheel"/><origin rpy="${degrees_90} 0 0"/><axis xyz="0 0 -1"/><limit effort="${axle_eff_limit}" velocity="${axle_vel_limit}"/></joint><transmission name="${lr_prefix}_${fr_prefix}_axle_trans"><type>transmission_interface/SimpleTransmission</type><joint name="${lr_prefix}_${fr_prefix}_axle"><hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface></joint><actuator name="${lr_prefix}_${fr_prefix}_axle_act"><!-- This hardwareInterface element exists for compatibilitywith ROS Hydro. --><hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface><mechanicalReduction>1</mechanicalReduction></actuator></transmission><link name="${lr_prefix}_${fr_prefix}_wheel"><visual><origin xyz="0${lr_reflect * (axle_length - (tire_width /2 - hex_hub_depth))}0"/><geometry><cylinder radius="${tire_dia / 2}" length="${tire_width}"/></geometry><material name="tire_mat"/></visual><collision><origin xyz="0${lr_reflect * (axle_length - (tire_width /2 - hex_hub_depth))}0"/><geometry><cylinder radius="${tire_dia / 2}" length="${tire_width}"/></geometry></collision><xacro:thick_walled_tube_inertialinner_rad="${hub_dia / 2}" outer_rad="${tire_dia / 2}"height="${tire_width}" mass="${wheel_mass}"/></link><gazebo reference="${lr_prefix}_${fr_prefix}_wheel"><material>Gazebo/Black</material></gazebo></xacro:macro><!-- Front wheel --><xacro:macro name="front_wheel"params="lr_prefix fr_prefix lr_reflect fr_reflect"><xacro:shock lr_prefix="${lr_prefix}" fr_prefix="${fr_prefix}"lr_reflect="${lr_reflect}" fr_reflect="${fr_reflect}"child="${lr_prefix}_steering_link"/><link name="${lr_prefix}_steering_link"><xacro:null_inertial/></link><joint name="${lr_prefix}_steering_joint" type="revolute"><parent link="${lr_prefix}_steering_link"/><child link="${lr_prefix}_${fr_prefix}_axle_carrier"/><axis xyz="0 0 1"/><limit lower="${-degrees_45}" upper="${degrees_45}"effort="${servo_stall_torque}" velocity="${servo_no_load_speed}"/></joint><transmission name="${lr_prefix}_steering_trans"><type>transmission_interface/SimpleTransmission</type><joint name="${lr_prefix}_steering_joint"><hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface></joint><actuator name="${lr_prefix}_steering_act"><!-- This hardwareInterface element exists for compatibilitywith ROS Hydro. --><hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface><mechanicalReduction>1</mechanicalReduction></actuator></transmission><xacro:wheel lr_prefix="${lr_prefix}" fr_prefix="${fr_prefix}"lr_reflect="${lr_reflect}"/></xacro:macro><!-- Rear wheel --><xacro:macro name="rear_wheel"params="lr_prefix fr_prefix lr_reflect fr_reflect"><xacro:shock lr_prefix="${lr_prefix}" fr_prefix="${fr_prefix}"lr_reflect="${lr_reflect}" fr_reflect="${fr_reflect}"child="${lr_prefix}_${fr_prefix}_axle_carrier"/><xacro:wheel lr_prefix="${lr_prefix}" fr_prefix="${fr_prefix}"lr_reflect="${lr_reflect}"/></xacro:macro><!-- chassis for sensors --><xacro:macro name="layer" params="layer parent m x y z *joint_pose"><joint name="${layer}_joint" type="fixed"><xacro:insert_block name="joint_pose"/><parent link="${parent}"/><child link="${layer}_link" /></joint><link name="${layer}_link"><visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="${x} ${y} ${z}" /></geometry><material name="yellow" /></visual><collision><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="${x} ${y} ${z}" /></geometry></collision><xacro:solid_cuboid_inertialwidth="${x}" depth="${y}"height="${z}" mass="${m}"><origin xyz="0 0 ${-z / 2}"/></xacro:solid_cuboid_inertial></link><gazebo reference="${layer}_link"><material>Gazebo/Orange</material></gazebo></xacro:macro><link name="base_footprint"/><!-- base_link must have geometry so that its axes can be displayed inrviz. --><link name="base_link"><visual><geometry><box size="0.01 0.01 0.01"/></geometry><material name="chassis_mat"/></visual></link><gazebo reference="base_link"><material>Gazebo/Grey</material></gazebo><joint name="base_footprint_to_base_link" type="fixed"><parent link="base_footprint"/><child link="base_link"/><origin xyz="0 0 ${(wheel_travel/2)+shock_z_offset}" /></joint><!-- Chassis --><link name="chassis"><visual>W<origin xyz="0 0 ${-chassis_height / 2}"/><geometry><box size="${chassis_length} ${chassis_width} ${chassis_height}"/></geometry><material name="chassis_mat"/></visual><collision><origin xyz="0 0 ${-chassis_height / 2}"/><geometry><box size="${chassis_length} ${chassis_width} ${chassis_height}"/></geometry></collision><xacro:solid_cuboid_inertialwidth="${chassis_length}" depth="${chassis_width}"height="${chassis_height}" mass="${chassis_mass}"><origin xyz="0 0 ${-chassis_height / 2}"/></xacro:solid_cuboid_inertial></link><gazebo reference="chassis"><material>Gazebo/Grey</material></gazebo><joint name="base_link_to_chassis" type="fixed"><parent link="base_link"/><child link="chassis"/></joint><!-- Batteries --><xacro:battery prefix="left" reflect="1"/><xacro:battery prefix="right" reflect="-1"/><!-- Wheels --><xacro:front_wheel lr_prefix="left" fr_prefix="front"lr_reflect="1" fr_reflect="1"/><xacro:front_wheel lr_prefix="right" fr_prefix="front"lr_reflect="-1" fr_reflect="1"/><xacro:rear_wheel lr_prefix="left" fr_prefix="rear"lr_reflect="1" fr_reflect="-1"/><xacro:rear_wheel lr_prefix="right" fr_prefix="rear"lr_reflect="-1" fr_reflect="-1"/><gazebo><plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"><legacyModeNS>true</legacyModeNS><robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType><robotNamespace>/racecar</robotNamespace></plugin></gazebo><!-- layers --><layer layer="platform" parent="chassis" m="${layer_mass}" x="${layer_x}" y="${layer_y}" z="${layer_z}"><origin xyz="0 0 ${layer_height}" rpy="0 0 0" /></layer><layer layer="lidar_platform" parent="platform_link" m="${layer_mass}" x="0.12" y="0.10" z="0.01"><origin xyz="0.08 0 ${layer_height}" rpy="0 0 0" /></layer><joint name="lidar_joint" type="fixed"><origin xyz="0 0 0.03" rpy="0 0 0" /><parent link="lidar_platform_link"/><child link="laser_link"/></joint><lidar prefix="laser"/><joint name="imu_joint" type="fixed"><origin xyz="0.16 0 0.015" rpy="0 0 0" /><parent link="platform_link"/><child link="imu_link"/></joint><imu prefix="imu"/><joint name="camera_joint" type="fixed"><origin xyz="0.16 0 0.05" rpy="0 0 0" /><parent link="platform_link"/><child link="camera_link"/></joint><camera prefix="camera"/>
</robot>

调试参数

代码部分不需要作大的变动,并且组委会提供的代码是绝对正确的,也不要进行修改,否则会引起MD5码变动导致验证失败。
需要调试很多次的地方是在servo_commads.py中的throttle。

throttle = data.drive.speed*15.5//改变15.5的数值

通过改变throttle的值改变小车的行驶速度,使得小车不碰撞,不停止。

比赛流程

正式比赛Flowchart流程图:

Created with Raphaël 2.3.0裁判宣布开始比赛1.校验MD5码2.完成后保存视频3.裁判记录初始Sim_time4.小车运行5.运行结束裁判记录最终Sim_time6.做差即为最终成绩7.节点图展示确认成绩无误?将视频和代码工程发送至组委会邮箱(比赛结束)yes

节点图

在小车行驶完毕后,新建终端输入节点图命令:

rqt_graph//节点命令

展示结果如下:


注:节点图的作用能够清晰展示

比赛推荐使用的录屏软件:Kazam

Kazam下载方式

Kazam可以在虚拟机中直接用命令下载,如下:

sudo apt-get install kazam

因为第一次使用这个软件,害怕录不上等问题,我们采用的是windows系统下的普通录屏软件。

哈希校验

哈希校验会生成MD5码,MD5码能够检验文件是否被修改,已下面检验camera.xacro文件的命令为例。

md5sum camera.xacro

哈希值校验视频

链接: https://www.bilibili.com/video/BV1Xg411E7Pu/?vd_source=e1a731dd19e7c02baaa22bc85db8648c

尾声

我的大学竞赛时光到此基本结束,在此感谢陪伴我的实验室成员,队友,感谢教导培养我的老师,感谢身后坚实的家庭后盾。自强不息,我们日后继续努力。

硬件艺术家Cauchy吉林省机器人大赛智能无人仿真车竞速比赛赛后总结相关推荐

  1. 山东省高校机器人大赛-智能避障避险小车经验分享

    山东省高校机器人大赛-智能避障避险小车经验分享 概述 竞赛题目 详细设计过程 车体设计 现在开车 过⑧号障碍物 如何跑完全程 概述 今天是2020年2月9日,因为新冠肺炎的原因,学校依然没有要开学的意 ...

  2. 赛事快讯|2022中国工程机器人大赛——飞思无人机仿真与自主任务赛项演示视频来啦!

    作为第十一届中国工程机器人大赛暨国际公开赛的重要赛项,飞思无人机仿真与自主任务赛项诚邀全国各区域高效优秀人才及社会无人机极客参与其中,在实践中探索无人机奥秘! 中国工程机器人大赛-飞思实验室无人机仿真 ...

  3. 2020世界机器人大赛:BCI脑控机器人大赛技术赛B榜成绩最终公布

    中国电子学会将联合相关单位举办的2020世界机器人大赛-BCI脑控机器人大赛,旨在打造集科技性.创新性.实用性于一体的世界级脑-机接口赛事,使之惠及人类社会生活发挥积极作用. 本次大赛技术赛重点考察各 ...

  4. 临沂机器人火锅_临沂知名智能无人火锅前景

    临沂知名智能无人火锅前景 实际上,做小事在你看来并没有太大意义,所以看到别人的小道消息,想做就去做,根本无从下手.这是传统创业.新兴企业的常态.然而,今天小道消息却有多少***正面临产品危机.产品失去 ...

  5. 恩智浦智能车大赛2020_2020年中国人工智能机器人大赛在宝鸡市会展中心举办

    11月20日,2020年中国人工智能机器人大赛在陕西宝鸡会展中心开幕.本次大赛为期三天,将有来自湖北.河南.山西等地的530余支队伍同台比拼. 据了解,大赛分为预赛.初赛.决赛,期间将进行垃圾分类机器 ...

  6. 小智机器人有初中课程吗_征战记大写的优秀!2020世界机器人大赛,看这些奖项收入囊中!...

     世界机器人 大赛   WORLD ROBOT CONTEST 冠军!亚军!季军! 一等奖!三等奖! 全部收入囊中!  赛项                         奖项  Enjoy AI非 ...

  7. 赛事解读|中国工程机器人大赛暨国际公开赛——飞思实验室空中机器人项目-仿真与自主任务赛项

    飞思实验室承办中国工程机器人大赛暨国际公开赛--无人机仿真与自主任务赛项,自5月6日开启赛事报名通道以来,受到了全国院校的高度关注. 赛事背景: 中国工程机器人大赛暨国际公开赛是由教育部高等学校创新方 ...

  8. 中国工程机器人大赛暨国际公开赛(RoboWork)

    中国工程机器人大赛暨国际公开赛(RoboWork)-探索者全地形赛 目 录 摘要 正 文 1.1 综述 1.2 系统整体设计 1.3 机械结构设计 1.4 硬件设计 1.5 软件设计 1.6 系统开发 ...

  9. 2021-工程实践与创新大赛-智能物流搬运

    Background 继西门子杯智能制造挑战赛后,俺参加了第七届工程训练大赛(现在改名叫"中国大学生工程实践与创新能力大赛"),后续文章皆简称"工训赛".工训赛 ...

最新文章

  1. 新警达尼亚尔·迪力木拉提的春运一天
  2. drbd配置文件详解
  3. ZTE物联网之智能电表简介
  4. abs 不会整数 方法 溢出_在 Golang 中针对 int64 类型优化 abs()
  5. [GKCTF2020]Pokémon
  6. jquery如何获取元素的滚动高度
  7. 高中python公开课怎么上好_如何上好高中英语公开课
  8. 华为云UGO正式公测:4大核心优势破解异构数据库迁移难题
  9. 第三篇: UpdatePanel 控件示例
  10. 2022 数学建模B题 高教社杯 含半成品论文 部分代码 全部数学模型 和全套思路
  11. 二叉树查找结点及父结点
  12. 课程设计:基于C52单片机的循迹小车
  13. docker-ce 的安装与镜像加速
  14. 带有鸿蒙logo的壁纸,鸿蒙OS Logo曝光
  15. Linux 云服务器aircrack-ng后台跑包并用邮件发送结果
  16. unable to load Private Key 6572:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\
  17. mysql服务器相关命令
  18. 光速入门Docker 和 Kubernetes,一起学~
  19. 植物大战僵尸:寻找葵花生产速度
  20. 神威太湖之光超级计算机的运算速度是,“神威·太湖之光”运算速度到底有多快?...

热门文章

  1. kkFileView集成LibreOffice,解决部分文档预览500
  2. 托福100分什么水平
  3. 2013年中国中产阶级消费十大趋势
  4. 软考中级哪一门比较好过?
  5. 微信开发者工具-真机调试,可查看接口信息
  6. jvisualvm 连接 docker 监控springboot jvm
  7. oracle dbms是什么意思,什么是Oracle特殊包和DBMS?
  8. 计算机考研与就业的利弊分析,考研和就业怎么选择 考研和就业的利弊分析
  9. 《计算传播学导论》读书笔记:第二章 文本分析简介
  10. vivo手机的微信消息不提示问题解决