ROS常用命令指南(长期更新)
记录一下最近调试ros相关代码时常用的命令;
查看ros消息类型:
rosmsg list | grep xxx #xxx类似关键词一样的,比如pose
详细查看具体某一个消息:
rosmsg show xxx #xxx是具体的消息类型名称,比如geometry_msgs/PoseStamped
带有数组以及时间戳的位姿消息:
nav_msgs::Path,它其实就可以看作是一个数组类型的geometry_msgs::posestamped;
不带有stamped的一般意思是不带有时间戳,而时间戳的赋值一般是ros::Time::now();
结合rostopic hz和rostopic echo的调试工具:
rosrun rqt_topic rqt_topic
发布一个节点:
需要定义消息类型,并且要一致,需要在launch文件里加上这个节点名称,否则就用rosrun单独启动这个节点;需要在CMakelists里面加上这个cpp文件;
一般在注册后面加上一行代码:
ros::Duration(3.0).sleep() #延迟3秒
这样做的目的是延迟数据发布,因为一般第一条数据在发布时publisher还没有advertise,会有点慢;
订阅一个节点:
基本同上;
std::vector:
这是一个数组,可以用at()或[ ]来查看其中具体某一个元素,从0开始;
std::vector<std::vector<geometry_msgs::posestamped>>则是一个二维数组,最内部的数据类型是geometry_msgs::posestamped;查看的话可以通过[ ][ ]来查看;
ROS_INFO:
可以输出日志信息,是白色的,如果要其他颜色可以ROS_ERROR_STREAM等;
比如要输出浮点数,则ROS_INFO(“浮点数:%f”,xxx),xxx为具体变量名称;整型则是%d;字符串则是%s,并且字符串需要在xxx后面加上.c_str()转为C++风格的字符串;
如果要输出中文,需要在主函数前面加上locale(LC_ALL,"");
vscode批量注释或者取消:
如果是 // 注释,则是ctrl + /,取消也一样;如果是 /* … */ 注释,则是全部选中然后ctrl + shift + A,取消暂时不知道,个人推荐 // 注释,更好用;
2021.8.7更新:
查看日志信息是由哪个节点发布的:
rqt_console
查看话题列表:
rostopic list
查看具体话题订阅发布节点:
rostopic info xxx #xxx为话题名称,可以通过rostopic list查看
查看具体话题消息发布情况(比如发布的数值):
rostopic echo xxx #xxx为话题名称,可以通过rostopic list查看
查看计算图(也就是节点图):
rqt_graph
查看tf关系:
rosrun rqt_tf_tree rqt_tf_tree
2021.8.12更新:
查看功能包是否存在:
rospack find 包名 # 如果存在则返回安装路径
进入某个功能包:
roscd 包名
列出参数服务器中的具体参数名:
rosparam list
获得参数服务器中的某一个参数值:
rosparam get 参数名
参数服务器,一般适用于存在数据共享的一些应用场景。
唤醒某一个服务:
rosservice call Server "key":number # "key":number实际上是一个键值对,具体根据自己的
2021.8.14更新:
查询某一个服务的具体定义:
rossrv show 包名/定义服务的消息文件名称
查看ros包的层级关系:
tree -L x # x代表要看的层数,比如只看最顶上的三层就是3
服务端写好后的简单测试:
rosservice call /话题名 xxx # xxx是根据自己定义的消息类型来的,也可以用tab键试试能否补全(一般可以)
2021.9.5更新:
不同包之间的服务通信:
服务类似于自定义消息类型,需要自己定义一个消息类型;比如需要在A和B两个包之间实现通信,则需要创建一个新的功能包C,C专门用于存放服务,这样做的好处是不会把代码和服务定义耦合在一起。
2021.12.7更新:
在线调参:
rosrun rqt_reconfigure rqt_configure
2021.12.31更新:
ROS卸载二进制包:
sudo apt-get purge ros-melodic-**