ROS小车记录系列(五)TF树维护,串口ttyUSB*绑定

  • Post author:
  • Post category:其他


1、TF树维护

在这单独列出我的TF树建立过程,只是自己做个记录。开始时候很多都是用代码发布静态TF,可以使用但是后面调试rviz看的时候不方便,所以改用urdf文件统一建立,尤其是方便调雷达的位置参数,rviz中一看就知道。同时,map–>odom–>base_footprint这部分由cartographer发布。

最终完整TF树如下,两个轮子、两个辅助轮、一个rplidar、一个imu:

在这里插入图片描述

该部分启动launch文件如下:

    <param name="robot_description"  textfile="$(find base_controller)/urdf/timiBot_with_laser.urdf" />

    运行joint_state_publisher节点,发布机器人的关节状态
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />

    运行robot_state_publisher节点,发布tf
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />

完整urdf文件如下:

<?xml version="1.0" ?>
<robot name="timiBot">

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

    <link name="base_footprint">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <geometry>
                <cylinder radius="0.1" length = "0.05"/>
            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.9"/>
            </material>
        </visual>
    </link>

    <link name="base_link">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <geometry>
                <!-- <cylinder length="0.16" radius="0.20"/> -->
                <box size="0.8 0.6 0.3" />
            </geometry>
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            </material>
        </visual>
    </link>

    <link name="imu_link">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <geometry>
                <box size="0.1 0.1 0.1" />
            </geometry>
        </visual>
    </link>

    <joint name="imu_joint" type="fixed">
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="imu_link"/>
        <axis xyz="0 0 0"/>
    </joint>

    <joint name="left_wheel_joint" type="continuous">
        <origin xyz="0.2 0.3 -0.1" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="left_wheel_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="left_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.1" length = "0.05"/>
            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.9"/>
            </material>
        </visual>
    </link>

    <joint name="right_wheel_joint" type="continuous">
        <origin xyz="0.2 -0.3 -0.1" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="right_wheel_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="right_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.1" length = "0.05"/>
            </geometry>
            <material name="white">
                <color rgba="0 0 0 0.9"/>
            </material>
        </visual>
    </link>

    <joint name="left_caster_joint" type="continuous">
        <origin xyz="-0.2 0.2 -0.15" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="left_caster_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="left_caster_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.05" />
            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            </material>
        </visual>
    </link>

    <joint name="right_caster_joint" type="continuous">
        <origin xyz="-0.2 -0.2 -0.15" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="right_caster_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="right_caster_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.05" />
            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            </material>
        </visual>
    </link>

    <joint name="laser_joint" type="fixed">
        <origin xyz="0.3 0 0.175" rpy="3.1415 3.1415926 0"/>
        <parent link="base_link"/>
        <child link="laser"/>
    </joint>

    <link name="laser">
		<visual>
			<origin xyz=" 0 0 0 " rpy="0 0 0" />
			<geometry>
				<cylinder length="0.05" radius="0.07"/>
			</geometry>
			<material name="black"/>
		</visual>
    </link>

</robot>

2、串口ttyUSB*绑定

创建文件/etc/udev/rules.d/99-robot-serial.rules,以我自己系统为例,两个串口,一个rplidar、一个底盘(我的imu数据是传到底盘单片机的,然后中转发到了ros),文件内容如下:

KERNELS=="1-3",ATTRS{idProduct}=="ea60",ATTRS{idVendor}=="10c4",SYMLINK="rplidar",MODE="0777"
KERNELS=="1-2",ATTRS{idProduct}=="7523",ATTRS{idVendor}=="1a86",SYMLINK="base",MODE="0777"

文件内容依据你自己设备设置,方法如下:

一次插一个USB设备,换不同USB口,终端输入:

udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)

在第一个带有很长ATTRS属性的条目里找到KERNELS、ATTRS{idProduct}、ATTRS{idVendor},填到文件里,再建立别名,分配下权限,好了重启电脑。

终端查询下:

ls -l /dev |grep ttyUSB

结果如下:

lrwxrwxrwx  1 root  root             7 97 17:56 base -> ttyUSB0
lrwxrwxrwx  1 root  root             7 97 17:56 rplidar -> ttyUSB1
crwxrwxrwx  1 root  dialout 188,     0 97 17:56 ttyUSB0
crwxrwxrwx  1 root  dialout 188,     1 97 18:13 ttyUSB1

表示已经绑定好了,后面设备一定要插到固定的USB口,插的先后可以动,但是不能动位置。

现在代码里就不要用“/dev/ttyUSB0”来建立连接了,改成“/dev/rplidar”这样,完事。



版权声明:本文为Ai_Smith原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。