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

本文是作者参加吉林省机器人大赛智能无人仿真车竞速比赛后的总结。备赛过程中,团队克服了时间紧迫、技术难题等挑战,最终在比赛中取得省级一等奖。文章详细介绍了从备赛环节、系统安装、赛道模型、代码调试到比赛流程的全过程,分享了比赛经验和收获。
摘要由CSDN通过智能技术生成

个人总结

对于个人而言,这是我获得的竞赛类最高奖项,省级一等奖,没有国家级的奖项,让我在多项荣誉伴随的同时倍感凄凉。梅西在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
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
智能优化算法是一种基于自然进化和人工智能的计算方法,可以应用于解决很多实际问题。其中,柯西变异是一种变异操作,常用于差分进化算法中,用于产生新的候选解。在Matlab中,可以使用遗传算法、粒子群算法、蚁群算法等智能优化算法,并结合柯西变异来改进算法性能。 以下是一个使用柯西变异的遗传算法的Matlab代码示例: ```matlab %% 遗传算法 + 柯西变异优化 clc, clear all, close all; %% 设定参数 N = 50; % 种群数量 D = 10; % 变量数量 G = 100; % 迭代次数 pc = 0.8; % 交叉概率 pm = 0.1; % 变异概率 lb = -10; % 变量下限 ub = 10; % 变量上限 %% 初始化种群 pop = repmat(lb, N, D) + rand(N, D) .* repmat((ub-lb), N, D); best = inf; % 最佳适应度 best_x = zeros(1, D); % 最佳解 fitness = zeros(N, 1); % 适应度 for i=1:N fitness(i) = rastrigin(pop(i,:)); if fitness(i) < best best = fitness(i); best_x = pop(i,:); end end %% 迭代 for g=1:G % 选择 idx = randsample(N, N, true, fitness./sum(fitness)); pop_sel = pop(idx,:); % 交叉 pop_cross = pop_sel; for i=1:N/2 if rand < pc p1 = pop_sel(i*2-1,:); p2 = pop_sel(i*2,:); c1 = p1; c2 = p2; pos = randi([1 D-1]); c1(pos+1:end) = p2(pos+1:end); c2(pos+1:end) = p1(pos+1:end); pop_cross(i*2-1,:) = c1; pop_cross(i*2,:) = c2; end end % 变异 pop_new = pop_cross; for i=1:N if rand < pm p = pop_cross(i,:); pos = randi([1 D]); p_new = p; p_new(pos) = cauchy(p(pos), 0.1*(ub-lb)); if p_new(pos) > ub p_new(pos) = ub; elseif p_new(pos) < lb p_new(pos) = lb; end pop_new(i,:) = p_new; end end % 更新最佳解 for i=1:N fitness(i) = rastrigin(pop_new(i,:)); if fitness(i) < best best = fitness(i); best_x = pop_new(i,:); end end % 更新种群 pop = pop_new; end %% 输出结果 disp(['Best fitness: ', num2str(best)]); disp(['Best solution: ', mat2str(best_x)]); ``` 该代码实现了一个求解Rastrigin函数最小化问题的遗传算法,其中使用了柯西变异来增加种群的多样性,提高算法的全局搜索能力。在实际应用中,可以根据具体问题选择不同的智能优化算法和变异操作,以获得更好的性能表现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值