ROS应用开发细节积累——(更新时间:2021年11月3日)

sudo apt-get install ros-<distro>-ros-tutorials

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

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

测试ros系统是否正确安装

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

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

mkdir –p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
echo $ROS_PACKAGE_PATH #查看系统中的ros工作区路径

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

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

编译包的流程

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

ROS中几个概念的理解:

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

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

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

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

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

Roscore:启动核心服务

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

在使用ROS时,先要启动roscore

roscore
rosnode list #列举当前运行的node
rosnode info /rosout #查看 /rosout 的详细信息
rosrun turtlesim turtlesim_node#启动一个小乌龟
rosrun turtlesim turtlesim_node __name:=my_turtle
#改名称,需要注意要是rosnode list还是原来的名称,需要$ rosnode cleaup
rosnode ping my_turtle
rosrun rqt_graph rqt_graph#通过动态图查看系统运行的逻辑状况
rostopic list #列举活动的topic
rostopic 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/X
rosservice 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 /clear
rosparam 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 <*.bag> <topic> <output_directory> 
pcl_pcd2ply –format 0 123.pcd 123.ply #将二进制的.pcd文件转成ascii码的.ply文件

ROS rviz回放bag

roscore
rosrun rviz rviz
rosbag play 123.bag #注意循环播放需要加上 -l
rosbag play -r 3 -l 123.bag#以三倍的速度循环播放123.bag
rosbag 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_ws
source devel/setup.bash #不source,可能无法找到包
roscd beginner_tutorials
mkdir launch
cd 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.”<<k);//相当于c++中的cout

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

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

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

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

数据包的录制和解析

roscore
rosrun turtlesim turtlesim_node
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist  -r 1 -- '[2,0,0]' '[0,0,3.1415926]' 
#让小乌龟一直运动,便于进行后续的录制
rosbag record –a #记录所有的topics
rosbag info <your bagfile> #查看包信息
rosbag play <your bagfile> #播放包
rosbag record –O subset /turtle1/cmd_vel /turtle1/pose #只录制pose,保存的名称为subset.bag
rosbag record –a –O $1 –x “/monitor/(.*)” #只记录过滤掉/monitor/*之外的其它topic
time rosbag info subset.bag | grep –E ** #查看名称为**的topic的信息
time rosbag play –immediate demo.bag –topics  /topic1 /topic2 /topic3 #播放多个topic
#ros_readbagfile 更能胜任解析包,因为速度快,且可以同时读多个topics,但是rostopic 只能读一个topic
rosbag filter input.bag output.bag "t.to_sec() <=1239889.89" #根据时间对input.bag进行拆分
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_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd):$(pwd)/Tools/sitl_gazebo
export 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 #也可以启动仿真模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值