ROS应用开发细节积累

您所在的位置:网站首页 rviz使用教程 ROS应用开发细节积累

ROS应用开发细节积累

#ROS应用开发细节积累| 来源: 网络整理| 查看: 265

sudo apt-get install ros--ros-tutorials

#以上是安装不同ros系统,可以是indigo,jade,kinetic等

#我选择是melodic版本(按照网上的流程安装和测试!不要自己乱搞)

测试ros系统是否正确安装

roscorerosrun turtlesim turtlesim_noderosrun turtlesim turtle_teleop_key

将源码拷贝至src中(先要编译catkin_ws,这部分在网上有流程),创建工作空间流程如下:

mkdir –p ~/catkin_ws/srccd ~/catkin_ws/srccatkin_init_workspacecd ~/catkin_ws/catkin_makesource devel/setup.bashecho $ROS_PACKAGE_PATH #查看系统中的ros工作区路径

创建catkin 包的流程(先要创建工作空间):

cd ~/catkin_ws/srccatkin_create_pkg beginner_tutorials std_msgs rospy roscpp#(创建一个叫beginner_tutorials的包,该包依赖于std_msgs,roscpp,rospy)#catkin_create_pkg

[depend1] [depend2] [depend3]cd ~/catkin_wscatkin_make #编译后工作空间就有一个devel文件夹.~/catkin_ws/devel/setup.bash #(或者 source ~/catkin_ws/devel/setup.bash)#将工作空间加到ros空间,前面加source也行,用 . 也行rospack depends1 beginner_tutorials#查看依附项roscd beginner_tutorialscat package.xml#查看xml的包信息rospack depends1 rospy #查看非直接的附属库rospack depends beginner_tutorials #(注意要是提示没有包,那么要重新source,让工作空间加到ros系统中)

编译包的流程:

catkin_makecatkin_make install#会编译所有在src文件夹下的工程catkin_make –source my_srccatkin_make install –source my_src#以上可以编译不在src文件夹下的其它地方的文件#编译完后就会在工作区出现 build,devel,src三个文件夹

ROS中几个概念的理解:

Nodes:节点,一种可执行文件,在ros中与其他节点进行交流

Messages:一种数据类型,用于发布或者订阅topics

Topics:节点将信息发布到某个topic,或者订阅topic以便接收信息

Masters:名称服务器,用于通过名称找到各节点

Rosout:等价于标准输出/标准错误输出

Roscore:启动核心服务

测试ros环境(以及简单操作):

在使用ROS时,先要启动roscore

roscorerosnode list #列举当前运行的noderosnode info /rosout #查看 /rosout 的详细信息rosrun turtlesim turtlesim_node#启动一个小乌龟rosrun turtlesim turtlesim_node __name:=my_turtle#改名称,需要注意要是rosnode list还是原来的名称,需要$ rosnode cleauprosnode ping my_turtlerosrun rqt_graph rqt_graph#通过动态图查看系统运行的逻辑状况rostopic list #列举活动的topicrostopic echo /turtle1/cmd_vel#执行后,当你控制键盘方向键,就会打印动作的数据rostopic list –v #查看所有的topic的发布和订阅信息rostopic type /turtle1/cmd_vel #查看topic类型rosmsg show geometry_msgs/Twist #查看消息的详细情况 rostopic pub [topic] [msg_type] [args]rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0,0.0,0.0]' '[0.0,0.0,1.8]' #发布数据,运动距离是2.0(沿X方向),运动弧度是1.8(绕Z轴逆时针)#-1表示只发布一次,然后退出,可以用 –r 1表示一直发布数据;rosrun rqt_plot rqt_plot#通过plot查看具体的动态,可以选择topic种类,例如/turtle1/pose/Xrosservice list #查看ros服务rosservice type [service] #查看服务类型rosservice call /clear #调用clear服务,该服务可以把小乌龟所走的路径都清除掉rosservice call /spawn 2 2 0.2 #可以再启动一个小乌龟rosparam list #参数清单rosparam set /turtlesim/background_r 150 #改变颜色,需要 $rosservice call /clearrosparam get /turtlesim/background_r #可以得到r的颜色值,可以用 $ rosparam get / 得到所有的参数信息

控制小乌龟运动的三部曲:

#一个终端roscore#另一个终端rosrun turtlesim turtlesim_node#再一个终端rosrun turtlesim turtle_teleop_key#turtle_teleop_key发布键盘动作到topic,turtlesim订阅相同的topic来接收键盘动作

ROS解析.bag(以及.pcd转化)

rosbag play *.bag #可以播放数据rosbag info file.bag #查看包的信息rostopic echo –b file.bag /topic_name #打印包中topic信息rostopic echo –b file.bag /topic_name > file.txt #把topic的数据存到txt文件中rosrun pcl_ros bag_to_pcd ***.bag /LD07/LDLiDAR . #把包中的topic对应的数据解析到.pcd文件,注意后面的directory,当前目录就用 . #格式为 rosrun pcl_ros bag_to_pcd pcl_pcd2ply –format 0 123.pcd 123.ply #将二进制的.pcd文件转成ascii码的.ply文件

ROS rviz回放bag

roscorerosrun rviz rvizrosbag play 123.bag #注意循环播放需要加上 -lrosbag play -r 3 -l 123.bag#以三倍的速度循环播放123.bagrosbag paly -r 3 -l -s 9 -u 10 123.bag#以三倍的速度循环播放前10秒的数据(-s 9 表示从第9秒开始,-u 10 表示播放前10秒,-s 被覆盖了)

通过launch启动工作环境

rosrun rqt_console rqt_console %启动控制台rosrun rqt_logger_level rqt_logger_level #启动日志cd ~/catkin_wssource devel/setup.bash #不source,可能无法找到包roscd beginner_tutorialsmkdir launchcd launch#然后需要 gedit turtlemimic.launch 来编辑launch文件(内容可参考网上)roslaunch beginner_tutorials turtlemimic.launch #编辑完后就可以启动了rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]' #对turlesim1 进行设置运动路径

在线记录bag数据

rosbag record –O bag_name /hdl64_points#bag_name为录制包的名称 /hdl64_points为topic#-O表示数据包名称后面不带时间信息,-a 表示记录所有的topic(有msg的topic)

消息和服务的设置

参考 wiki.ros.org/Tutorials/CreatingMsgAndSrv

设置完成后,需要catkin_make

编写简单的发布者和订阅者

ros 编程细节

ros::init(argc,argv,”my_node_name”);//每个roscpp函数前必须调用该函数

ROS_INFO(“INFO message %d”,k);//相当于c中的printf

ROS_INFO_STREAM(“INFO message.”

ros::Subcriber sub=n.subscribe(“chatter”,1000,chatterCalllback);//订阅名称为chatter的topic,当新的消息到达ros就调用chatterCallback()函数,1000为队列的大小,当消息超过1000条时,就会抛弃其它旧的消息

//当编辑好topic后,需要对包重新编译 catkin_make

$ source ./devel/setup.bash #记得每开终端需要source,否则找不到package

//同样可以建立服务端和客户端,具体见网页教程

数据包的录制和解析:

roscorerosrun turtlesim turtlesim_noderostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2,0,0]' '[0,0,3.1415926]' #让小乌龟一直运动,便于进行后续的录制rosbag record –a #记录所有的topicsrosbag info #查看包信息rosbag play #播放包rosbag record –O subset /turtle1/cmd_vel /turtle1/pose #只录制pose,保存的名称为subset.bagrosbag record –a –O $1 –x “/monitor/(.*)” #只记录过滤掉/monitor/*之外的其它topictime rosbag info subset.bag | grep –E ** #查看名称为**的topic的信息time rosbag play –immediate demo.bag –topics /topic1 /topic2 /topic3 #播放多个topic#ros_readbagfile 更能胜任解析包,因为速度快,且可以同时读多个topics,但是rostopic 只能读一个topicrosbag filter input.bag output.bag "t.to_sec() rosbag filter input.bag output.bag "topic == '/tf'" #根据topic进行拆分

创建ROS程序包(就是软件包)

cd ~/catkin_ws/src #工作区catkin_create_pkg beginner_tutorials std_msgs rospy roscpp #程序包后面的是依赖的程序包(类似于添加的头文件和链接文件)rospack depends1 beginner_tutorials #查看依赖包rospack depends1 roscpp #查看roscpp的依赖包

rviz中显示topic

注意fixed frame的设置,如果不知道,可以通过topic中的信息来查看fixed frame,终端命令  rostopic echo /**** | grep frame_id (其中/****为topic);

.bag查看 fixed frame

rostopic echo /topic_name | grep frame_id

PX4+Gazebo仿真无人机飞行(需要安装PX4)

source Tools/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_defaultexport ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd):$(pwd)/Tools/sitl_gazeboexport PX4_HOME_LON=113.3799675 #设置经纬度export PX4_HOME_LAT=23.1606850./QGroundControl.AppImage #启动QGC控制仿真无人机飞行,注意路径make px4_sitl gazebo_iris #在PX4-Autopilot中启动仿真模型roslaunch px4 mavros_posix_sitl.launch #也可以启动仿真模型



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3