ROS No transform from [sth] to [sth]

问题来源

    近期在研究机器人操作系统(ROS),着实遇到很多使用上的问题。 比如今天在利用urdf_tutorial功能包学习urdf相关部分时,执行如下操作:

roslaunch urdf_tutorial display.launch model:=urdf/04-materials.urdf

这个操作其实就是利用ROS的rviz可视化自己设计的机器人。 rviz打开后机器人显示不太正常,原因是有状态错误。点开后查看发现汇报了如下的错误:

No transform from [right_leg] to [base_link]
使用下面的指令:

check_urdf *.urdf

查看urdf文件没有问题。

解决过程

    解决这个问题花费了不少时间。开始时我认为是我写的urdf文件中确实缺少了关于坐标变换的描述,但是我运行现成的例程也不行。这说明问题不在这里。后来经过网上查阅,

我把问题锁定在了字符编码上面。

    在阿困的这篇博客中,我第一次看到这个问题是与linux中Python只支持ASCII文件编码有关(虽然可能说得不太确切)。但是这里似乎没有提到解决办法。于是我开始第一次尝试

解决这个问题,那就是更改文件编码格式。我试了很多在linux上的工具,但是最后还是失败了。

    于是开始第二波搜索。我在ROS wiki的这篇贴子上发现这样一段文字:

     I got it! It took me a whole day to figure out why. joint_state_publisher failed to parse the urdf xml file. It dumped error message:

UnicodeEncodeError: 'ascii' codec can't encode character
    大概意思就是joint_state_publish这个功能包无法解析urdf文件。从错误信息上看这里依然指向了编码问题。于是我以这条错误信息为关键字再一次检索。

    最终我在dazhi_100的这篇关于编码类型转换的博客中找到这样一句:

    实际上,出现上面错误的原因是,MAC已经内置了unicode的支持,而Linux下没有。

这句话就成了解决问题的关键,没有内置unicode支持,那就需要安装,于是很自然的进行了如下的操作:

sudo apt-get install unicode 
这个操作完成之后需要重启一下ROS的节点管理器roscore,重启之后问题得到解决。

总结

    问题的解决当然依赖了众多前人们提供的解决思路,我只是在这里把这些思路拼接起来解决了自己遇到的一个特定的问题。在此感谢这些帮助了我的博主。

声明

    本文中引用的内容已注明出处,如还有哪里侵犯了网友的知识产权,烦请告知,我会及时删帖。

你可能感兴趣的:(ROS,操作系统,ROS,机器人)