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 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”这样,完事。
版权声明:本文为Ai_Smith原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。