在这单独列出我的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>文件内容依据你自己设备设置,方法如下: 一次插一个USB设备,换不同USB口,终端输入:
udevadm info --name=/dev/ttyUSBx --attribute-walk在第一个带有很长ATTRS属性的条目里找到KERNELS、ATTRS{idProduct}、ATTRS{idVendor},填到文件里,再建立别名,分配下权限,好了重启电脑。
终端查询下:
ls -l /dev |grep ttyUSB结果如下:
lrwxrwxrwx 1 root root 7 9月 7 17:56 base -> ttyUSB0 lrwxrwxrwx 1 root root 7 9月 7 17:56 rplidar -> ttyUSB1 crwxrwxrwx 1 root dialout 188, 0 9月 7 17:56 ttyUSB0 crwxrwxrwx 1 root dialout 188, 1 9月 7 18:13 ttyUSB1表示已经绑定好了,后面设备一定要插到固定的USB口,插的先后可以动,但是不能动位置。 现在代码里就不要用“/dev/ttyUSB0”来建立连接了,改成“/dev/rplidar”这样,完事。
