ROS仿真学习笔记_xacro

本文介绍了如何通过xacro优化小车底盘设计,包括创建robot.xacro文件,复用代码并定义参数,以及添加camera和lidar组件。作者详细展示了底盘链接、万向轮和传感器的配置,最终整合所有部分到car.xacro中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS仿真学习笔记_xacro

xacro优化代码:

新建功能包:

catkin_create_pkg xx urdf xacro

1 . 优化上节小车代码:
① 底盘代码
在xacro文件夹下创建robot.xacro

touch robot.xacro
<!-- 设置机器人底盘-->
<!-- 
	1.代码复用
	2.参数设计
-->


<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
	
	<!-- 一、属性封装-->
	<xacro:property name="footprint_radius" value="0.001" />
		
	<!-- 1.base_footprint-->
	<link name="base_footprint">
		<visual>
			<geometry>
				<sphere radius="${footprint_radius}" />		
			</geometry>			 		
		</visual>
	</link>
		
	<xacro:property name="base_link_radius" value="0.1" />
	<xacro:property name="base_link_length" value="0.08" />
	<xacro:property name="lidi" value="0.015" />
	<xacro:property name="base_joint_z" value="${base_link_length/2+lidi}" />
	
	<!-- 2.底盘link-->
	<link name="base_link">
		<visual>
			<geometry>
				<cylinder radius="${base_link_radius}" length="${base_link_length}" />		
			</geometry>	
					 
			<origin xyz="0 0 0" rpy="0 0 0" />		
				
			<material name="car_color">
				<color rgba="1.0 0.5 0 0.5" />			
			</material>		
		</visual>
	</link>

	<!-- 2.1 关联 base_footprint 与 底盘base_link -->
	<joint name="link2footprint" type="fixed">
		<!-- 父级 link-->
		<parent link="base_footprint" />
			
		<!-- 子级 link-->
		<child link="base_link" />
		
		<!-- 设置偏移量-->
		<origin xyz="0 0 ${base_joint_z}" rpy="0 0 0" />
	</joint>


	<xacro:property name="wheel_radius" value="0.0325" />
	<xacro:property name="wheel_length" value="0.015" />
	<xacro:property name="PI" value="3.1415927" />
	<xacro:property name="wheel_joint_z" value="${(base_link_length/2+lidi-wheel_radius)*(-1)}" />

	<!--二、 宏封装-->
	<!-- 
		wheel_name : left or right
		flag : 1 or -1
	
	-->
	<xacro:macro name="wheel_func" params="wheel_name flag">
	
		<link name="${wheel_name}_wheel">
			<visual>
				<geometry>
					<cylinder radius="${wheel_radius}" length="${wheel_length}" />	
				</geometry>	
				
				<!-- 先默认使用,后期需要更改-->		 
				<origin xyz="0 0 0" rpy="${PI/2} 0 0" />
							
				<material name="${wheel_name}_wheel_color">
					<color rgba="0 0 0 0.5" />			
				</material>		
			</visual>
		</link>

		<joint name="${wheel_name}_2base" type="continuous">
			<!-- 父级 link-->
			<parent link="base_link" />
				
			<!-- 子级 link-->
			<child link="${wheel_name}_wheel" />
			
			<!-- 设置偏移量-->
			<origin xyz="0 ${0.1 * flag} ${wheel_joint_z}" rpy="0 0 0" />
			
			<!-- 设置关节旋转参考的坐标轴-->
			<axis xyz="0 1 0" />
		
		</joint>
	
	</xacro:macro>
	
	<!--三、 宏调用才会生效-->
	<xacro:wheel_func wheel_name="left" flag="1" />
	<xacro:wheel_func wheel_name="right" flag="-1" />

	<!--四、 万向轮-->
	<!--4.1 属性封装-->
	<xacro:property name="small_wheel_radius" value="0.0075" />
	<xacro:property name="small_joint_z" value="${(base_link_length/2+lidi-small_wheel_radius)*(-1)}" />

	<xacro:macro name="small_wheel_func" params="small_wheel_name flag">
		<!-- 4.2 万向轮link-->
	
		<link name="${small_wheel_name}_wheel">
			<visual>
				<geometry>
					<sphere radius="${small_wheel_radius}" />	
				</geometry>	
				
				<!-- 先默认使用,后期需要更改-->		 
				<origin xyz="0 0 0" rpy="0 0 0" />
							
				<material name="${small_wheel_name}_wheel_color">
					<color rgba="1 0 0 0.5" />			
				</material>		
			</visual>
		</link>
		
		<!-- 4.3万向轮joint-->
		<joint name="${small_wheel_name}_wheel2base" type="continuous">
			<!-- 父级 link-->
			<parent link="base_link" />
				
			<!-- 子级 link-->
			<child link="${small_wheel_name}_wheel" />
			
			<!-- 设置偏移量-->
			<origin xyz="${0.08*flag} 0 ${small_joint_z}" rpy="0 0 0" />
			
			<!-- 设置关节旋转参考的坐标轴-->
			<axis xyz="0 1 0" />
		
		</joint>
	</xacro:macro>

	<xacro:small_wheel_func small_wheel_name="front" flag="1" />
	<xacro:small_wheel_func small_wheel_name="back" flag="-1" />
</robot>

② 相机代码
在xacro文件夹下创建camera.xacro

touch camera.xacro
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
	<!-- 摄像头部件-->
	<!-- 1.摄像头link-->
	<!-- 厚度-->
	<xacro:property name="camera_length" value="0.02" />
	<!-- 宽度-->
	<xacro:property name="camera_width" value="0.05" />
	<!-- 高度-->
	<xacro:property name="camera_height" value="0.05" />
	
	<xacro:property name="joint_camera_x" value="0.08" />
	<xacro:property name="joint_camera_y" value="0" />
	<xacro:property name="joint_camera_z" value="${base_link_length/2+camera_height/2}" />
	
	<!-- 2.设置连杆与关节-->
	<link name="camera">
		<visual>
			<geometry>
				<box size="${camera_length} ${camera_width} ${camera_height}" />		
			</geometry>	
					 
			<origin xyz="0 0 0" rpy="0 0 0" />		
				
			<material name="camera_color">
				<color rgba="1.0 1.0 0 0.5" />			
			</material>		
		</visual>
	</link>

	<joint name="camera2base" type="fixed">
		<!-- 父级 link-->
		<parent link="base_link" />
			
		<!-- 子级 link-->
		<child link="camera" />
		<!-- 设置偏移量-->
		<origin xyz="${joint_camera_x} ${joint_camera_y} ${joint_camera_z}" rpy="0 0 0" />
		
	</joint>
</robot>

③ 雷达代码
在xacro文件夹下创建lidar.xacro

touch lidar.xacro
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
	<!-- 雷达部件-->
	
	<!-- 支架半径-->	
	<xacro:property name="support_radius" value="0.01" />
	<!-- 支架高度-->
	<xacro:property name="support_length" value="0.15" />
	<!-- 雷达半径-->
	<xacro:property name="lidar_radius" value="0.03" />
	<!-- 雷达高度-->
	<xacro:property name="lidar_length" value="0.05" />
	
	<!-- 支架的坐标偏移-->
	<xacro:property name="joint_support_x" value="0" />
	<xacro:property name="joint_support_y" value="0" />
	<xacro:property name="joint_support_z" value="${base_link_length/2+support_length/2}" />
	<!-- 雷达的坐标偏移-->
	<xacro:property name="joint_lidar_x" value="0" />
	<xacro:property name="joint_lidar_y" value="0" />
	<xacro:property name="joint_lidar_z" value="${support_length/2+lidar_length/2}" />

	<!-- 支架link-->
	<link name="support">
		<visual>
			<geometry>
				<cylinder radius="${support_radius}" length="${support_length}" />		
			</geometry>	
					 
			<origin xyz="0 0 0" rpy="0 0 0" />		
				
			<material name="support_color">
				<color rgba="1.0 0.5 1 0.5" />			
			</material>		
		</visual>
	</link>

	<!-- 支架joint-->
	<joint name="support2base" type="fixed">
		<!-- 父级 link-->
		<parent link="base_link" />
			
		<!-- 子级 link-->
		<child link="support" />
		
		<!-- 设置偏移量-->
		<origin xyz="${joint_support_x} ${joint_support_y} ${joint_support_z}" rpy="0 0 0" />
	</joint>

	<!-- 雷达link-->
	<link name="lidar">
		<visual>
			<geometry>
				<cylinder radius="${lidar_radius}" length="${lidar_length}" />		
			</geometry>	
					 
			<origin xyz="0 0 0" rpy="0 0 0" />		
				
			<material name="lidar_color">
				<color rgba="1.0 0.5 0.5 0.5" />			
			</material>		
		</visual>
	</link>

	<!-- 雷达joint-->
	<joint name="lidar2support" type="fixed">
		<!-- 父级 link-->
		<parent link="support" />
			
		<!-- 子级 link-->
		<child link="lidar" />
		
		<!-- 设置偏移量-->
		<origin xyz="${joint_lidar_x} ${joint_lidar_y} ${joint_lidar_z}" rpy="0 0 0" />
		
	</joint>
</robot>

④ 整合代码
在xacro文件夹下创建car.xacro

touch car.xacro
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
	<!-- 1.包含底盘、摄像头和雷达的 xacro文件-->
	<xacro:include filename="robot.urdf.xacro" />
	<xacro:include filename="camera.urdf.xacro" />
	<xacro:include filename="lidar.urdf.xacro" />
</robot>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值