ROS学习记录13SLAM仿真学习2——创建一个包含LidarCameraIMU的Ackman小车

Posted 康娜喵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS学习记录13SLAM仿真学习2——创建一个包含LidarCameraIMU的Ackman小车相关的知识,希望对你有一定的参考价值。

零.原理

原理就是一个普通的小车,配合上Gazebo plugins实现Gazebo里的信息采集。
对了我目前打算的是个后驱车,如果要四驱的,可以自己给前轮的Joint加两个velocity_controllers即可。

一.造车

1.1 写一个车

先在src/slam_model/urdf/ackman.urdf写一个车:

<robot name="ackman">  
    <!--Main Body Begin-->
    <link name="base_footprint">
        <visual>
            <origin rpy="0 0 0" xyz="0 0 0"/>
            <geometry>
            <box size="0.001 0.001 0.001"/>
            </geometry>
        </visual>
    </link>

    <joint name="base_footprint_joint" type="fixed">
        <origin rpy="0 0 0" xyz="0 0 0.2"/>
        <parent link="base_footprint"/>
        <child link="base_link"/>
    </joint>

    <link name="base_link">
        <inertial>
            <origin xyz="0 0 0"/>
            <mass value="300"/>
            <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
        </inertial>
        <visual>
            <geometry>
                <box size="0.8 0.4 0.1"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0"/>
            <material name="blue">
                <color rgba="0.5 0.2 0.8 1"/>
            </material>
        </visual>
        <collision>
            <origin rpy="0 0 0" xyz="0 0 0"/>
            <geometry>
                <box size="0.8 0.4 0.1"/>
            </geometry>
            <inertial>
                <mass value="300"/>
                <inertia ixx="0.0053" ixy="0" ixz="0" iyy="0.0083" iyz="0" izz="0.0667"/>
            </inertial>
        </collision>
    </link>

    <link name="base_wheel">
        <inertial>
            <origin xyz="0 0 0"/>
            <mass value="0.1"/>
            <inertia ixx="-1.0" ixy="0.0" ixz="0.0" iyy="-1.0" iyz="0.0" izz="-1.0"/>
        </inertial>
        <visual>
            <geometry>
                <box size="0.001 0.001 0.001"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0"/>
            <material name="blue">
                <color rgba="0.5 0.2 0.8 1"/>
            </material>
        </visual>
        <collision>
            <origin rpy="0 0 0" xyz="0 0 0"/>
            <geometry>
                <box size="0.001 0.001 0.001"/>
            </geometry>
            <inertial>
                <mass value="0.1"/>
                <inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1"/>
            </inertial>
        </collision>
    </link>

    <joint name="base_wheel_joint" type="fixed">
        <origin rpy="0 0 0" xyz="0 0 -0.1"/>
        <parent link="base_link"/>
        <child link="base_wheel"/>
    </joint>

	<joint name="left_rear_wheel_joint" type="continuous">
		<axis xyz="0 0 -1"/>
		<parent link="base_wheel"/>
		<child link="left_rear_wheel"/>
		<origin rpy="1.57 0 0" xyz="-0.3 0.3 0"/>
		<limit effort="10" velocity="100"/>
		<joint_properties damping="0.0" friction="0.0"/>    
	</joint>

    <link name="left_rear_wheel">
        <inertial>
            <origin rpy="0 0 0" xyz="0 0 0"/>
            <mass value="10"/>
            <inertia ixx="-0.05" ixy="0.0" ixz="0.0" iyy="-0.05" iyz="0.0" izz="-0.05"/>
        </inertial>
		<visual>
			<origin rpy="0 0 0" xyz="0 0 0"/>
			<geometry>
				<cylinder radius="0.1" length="0.05"/>
			</geometry>
			<material name="black">
				<color rgba="0 0 0 1"/>
		  	</material>
		</visual>
		<collision>
			<origin rpy="0 0 0" xyz="0 0 0"/>
		  	<geometry>
		  		<cylinder radius="0.1" length="0.05"/>
		  	</geometry>
            <inertial>
                <mass value="10"/>
                <inertia ixx="-0.05" ixy="0.0" ixz="0.0" iyy="-0.05" iyz="0.0" izz="-0.05"/>
            </inertial>
		</collision>
	</link>

    <joint name="right_rear_wheel_joint" type="continuous">
		<axis xyz="0 0 -1"/>
		<parent link="base_wheel"/>
		<child link="right_rear_wheel"/>
		<origin rpy="1.57 0 0" xyz="-0.3 -0.3 0"/>
		<limit effort="10" velocity="100"/>
		<joint_properties damping="0.0" friction="0.0"/>    
	</joint>

    <link name="right_rear_wheel">
        <inertial>
            <origin rpy="0 0 0" xyz="0 0 0"/>
            <mass value="10"/>
            <inertia ixx="-0.05" ixy="0.0" ixz="0.0" iyy="-0.05" iyz="0.0" izz="-0.05"/>
        </inertial>
		<visual>
			<origin rpy="0 0 0" xyz="0 0 0"/>
			<geometry>
				<cylinder radius="0.1" length="0.05"/>
			</geometry>
			<material name="black">
				<color rgba="0 0 0 1"/>
		  	</material>
		</visual>
		<collision>
			<origin rpy="0 0 0" xyz="0 0 0"/>
		  	<geometry>
		  		<cylinder radius="0.1" length="0.05"/>
		  	</geometry>
            <inertial>
                <mass value="10"/>
                <inertia ixx="-0.05" ixy="0.0" ixz="0.0" iyy="-0.05" iyz="0.0" izz="-0.05"/>
            </inertial>
		</collision>
	</link>
    
    <joint name="left_bridge_joint" type="revolute">
        <parent link="base_wheel"/>
        <child link="left_bridge"/>
        <origin rpy="0 0 0" xyz="0.3 0.255 0"/>  <!--Y=0.25-0.5*whell_length-0.5*brige_y-->
        <axis xyz="0 0 1"/>
        <limit effort="2.5" lower="-0.758" upper="0.758" velocity="1"/>
    </joint>

    <link name="left_bridge">
        <inertial>
            <origin xyz="0.0 0 0"/>
            <mass value="0.1"/>
            <inertia ixx="-1.0" ixy="0.0" ixz="0.0" iyy="-1.0" iyz="0.0" izz="-1.0"/>
        </inertial>
        <visual>
            <geometry>
            <box size="0.06 0.04 0.01"/>
            </geometry>
            <material name="red">
            <color rgba="1 0 0 1"/>
            </material>
        </visual>
        <collision>
            <geometry>
            <box size="0.06 0.04 0.01"/>
            </geometry>
            <inertial>
            <mass value="0.1"/>
            <inertia ixx="-1.0" ixy="0.0" ixz="0.0" iyy="-1.0" iyz="0.0" izz="-1.0"以上是关于ROS学习记录13SLAM仿真学习2——创建一个包含LidarCameraIMU的Ackman小车的主要内容,如果未能解决你的问题,请参考以下文章

ROS学习记录12SLAM仿真学习1——ROS Control

ROS学习记录12SLAM仿真学习1——ROS Control

ROS学习记录17SLAM仿真学习6完结—— 无人驾驶

ROS学习记录17SLAM仿真学习6完结—— 无人驾驶

ROS学习记录15SLAM仿真学习4——使用gmapping建图与保存地图

ROS学习记录15SLAM仿真学习4——使用gmapping建图与保存地图