ROS常用命令

1.创建工作空间

        mkdir -p ~/catkin_ws/src

        cd ~/catkin_wc/src

        catkin_init_workspace

创建完成后,在工作空间根目录下使用catkin_make命令编译整个工作空间

        ca ~/catkin_ws

        catkin_make(编译

        catkin_make install

2.设置环节变量

编译完成后,在devel文件夹中产生机构setup.*sh形式的环境变量设置脚本,使用source命令运行这些脚本文件,则工作空间中的环境变量可以生效

        source devel/setup.bash        (环境变量只对当前终端生效)

        echo $ROS_PACKAGE_PATH 检查环境变量是否已经生效

环境变量对所有终端生效,在终端的配置文件中加入环境变量的设置:

        echo "source catkin_ws/devel/setup.bash" >> ~/.bashrc

3.创建功能包        

        (ros自带的功能包是在/opt/ros/noetic/share目录下)

        cd ~/catkin_ws/src

        catkin_create_pkg learning_communication std_msgs rospy roscpp

        回工作空间根目录下进行编译

4.查看功能包所放置的位置

        rospack find learning_communication

5.rosxxx命令

rostopic

        rostopic list

        rostopic list -v

rosmsg

        rosmsg show <消息类型>Person 查看自定义Person消息类型的详细描述

        rosmsg list :列出所有的话题()

        rosmsg package <包名>:列出指定 ROS 软件包中包含的所有消息类型

        rosmsg packages <消息类型>:列出 ROS 系统中所有包含消息定义的软件包列表

rossrv

rosbag数据记录于回放

        rosbag:数据记录与回放的功能包,搜集ROS系统运行时的消息数据,然后在离线状态下回放

        记录数据

        roscore 

        rosrun turtlesim  turtlesim_node

        rosrun turtlesim  turtle_teleop_key

        移动小乌龟,rostopic list -v查看ROS系统的话题,使用rosbag抓取这些话题的消息,并打包成一个文件放置到指定文件夹中:

                mkdir  ~/rosbagfiles

                cd  ~/rosbagfiles

                rosbage record -a,记录数据,-a参数指记录所有发布的消息,Ctrl+c终止数据记录

                生成.bag文件 ( 2023-08-19-10-54-20.bag)

        回放数据

               在rosbagfiles目录下启动终端:rosbag info  <your bagfile> 查看数据记录文件的详细信息

                rosbag play  2023-08-19-10-54-20.bag

6.编译功能包

        ROS中的编译器使用的是CMake,编译规则通过功能包中的CMakeLists.txt文件设置,使用catkin命令创建功能包中会自动生成该文件。

        include_directories:设置头文件的相对路径,

        add_executable:设置编译的代码和生成的可执行文件

 add_executable(publisher   src/publisher.cpp)

        target_link_libraries:用于设置链接库,配置可执行文件连接的库文件,第一个参数是可执行文件的名称,后面依次列出需要链接的库 

target_link_libraries (publisher ${catkin_LIBRARIES})

   add_dependencies:用于设置依赖,功能包对定义的与语言无关的消息类型动态产生消息代码 (无定义则不需要添加)

add_dependencies(publisher ${PROJECT_NAME}_generate_message_cpp)
cd ~/catkin_ws
catkin_make

编译生成的可执行文件放在/devel/lib/路径下

        package.xlm文件内设置编译和运行所依赖的相关功能包

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

srv文件:添加配置:

        package.xml:   

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

        CMakeLists.txt:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)
add_message_files(
   FILES
   Person.msg
)

add_service_files(
   FILES
   AddTwoInt.srv
 )
catkin_package(
    CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
)
generate_messages(
   DEPENDENCIES
   std_msgs
 )

        message_generation包不仅可以针对话题消息产生相应的代码,还可以根据服务消息的类型描述文件产生相应的代码。 

        功能包编译成功后,在服务的Server节点和Clinet节点的代码实现中就可以直接调用定义好的服务消息了     

7.发现存在重名的功能包处理办法

        方法一:若功能包不再需要,可直接删除

        方法二:功能包需要,则重命名其中一个功能包;

        在修改软件包名称后,确保在 ROS 工作空间中执行以下操作,以清除可能存在的构建和开发文件:catkin clean;

        最后要重新构建和编译您的 ROS 工作空间,以确保修改后的软件包名称生效:catkin build

        

8.话题消息rosmsg 相关用法

        rosmsg show <消息类型>Person 查看自定义Person消息类型的详细描述

        rosmsg list :列出所有的话题()

        rosmsg package <包名>:列出指定 ROS 软件包中包含的所有消息类型

        rosmsg packages <消息类型>:列出 ROS 系统中所有包含消息定义的软件包列表

9.分布式多机通信

        第一步:确定所有计算机处于同一网络,分别在计算机hcx-oc、raspi2使用ifconfig命令查看计算机的局域网if地址

        第二步:分别在两台计算机系统的/etc/hosts文件中加入对方的IP地址和对应的计算机名

        第三步:分别在两台计算机上使用ping命令测试网络是否联通

                        ping raspi2      ping hcx-pc

                如果双向网络都畅通,说明底层网络的通信没有网络

        第四步:选择一台计算机当作从机(raspi2),在从机使用如下命令设置ROS_MASTER_URI

                export ROS_MASTER_URI+http://hcx-pc:11311        (设置只对当前终端生效)

将环境变量的设置加入终端的配置文件中

echo "export ROS_MASTER_URI+http://hcx-pc:11311" >> ~/.bashrc

10.launch启动文件

<launch>…</launch>:定义根元素

<node  …  />:启动文件的核心是启动ROS节点,采用<node>定义

        <node  pkg="package-name"  type="executable-name" name="node-name">:

                功能包名  可执行文件名称   节点运行名称

        node中其它属性:

        output = "screen":将节点的标准输出打印到终端屏幕,默认输出为日志文档

        respawn="true":复位属性,该节点停止时,会自动重启,默认为false

        required="true":必要节点,当该节点终止时,launch文件中的其它节点也别终止

        ns=“namespace”:命名空间,为节点内的相对名称添加命令空间前缀

        args="arguments":节点需要的输入参数

参数设置:

<param  …  />:parameter是ROS系统运行中的参数,存储在参数服务器中,每个活跃的节点可以通过ros::param:get()接口来获取parameter的值。

        使用方法:<param name="output_frame" value="odom" />

系统中的参数的数量有很多,若一个一个设置会非常麻烦,采用另类参数<rosparam>加载方式

<rosparam file="$(find 2dnav_pr2)/config/costmap_common_params.yaml" command="load" ns="local_costmap">

将一个YAML格式文件中的参数全部加载到ROS参数服务器中,需设置command属性为“load”        ,还可以选择命名空间“ns”

<arg… />:argument是launch文件内部的局部变量,仅限于launch文件使用

        语法:<arg name="arg-name" default="arg-value"/>

        launch文件中需要使用argument时,调用方式:

                <param name="foo" value="$(arg arg-name)" />

                <node name="node" pkg="package" type="executable" args="$(arg arg-name)"/>

<remap…/>:重映射机制:使用别人的功能包时,可能别人的功能包的接口不一定与我们的系统兼容,比如turtlebot的键盘控制节点发布的速度控制指令话题可能是 /turtlebot/cmd_vel,但是我们自己的机器人订阅的速度控制话题是 /cmd_vel,这时使用<remap>就可以将 /turtlebot/cmd_vel重映射为 /cmd_vel,我们的机器人就可以接收到速度控制指令:

<remap from=" /turtlebot/cmd_vel" to="/cdm_vel" />

<include…/>:嵌套复用,直接复用一个已有的launch文件中的内容,类似于C中的头文件包含。

<include file="$(dirname)/other.launch" />

11.TF工具

        tf_monitor:打印TF树中所有坐标系的发布状态,也可以通过输入参数来查看知道坐标系之间的发布状态。

rosrun tf tf_monitor
rosrun tf tf_monitor <source_frame> <target_target>

        tf_echo:工具的功能是查看指定坐标系之间的变换关系

rosrun tf tf_echo <source_frame> <target_target>

        stat ice_transform_publisher:发布两个坐标系之间的静态坐标变换

rosrun  tf stat ice_transform_publisher  x y z yaw pitch roll frame_id  child_frame_id period_in_ms

rosrun  tf stat ice_transform_publisher  x y z qx qy qz qw frame_id  child_frame_id period_in_ms

以上两种命令格式,设置坐标的偏移参数和旋转参数:偏移参数使用相对于x,y,z三轴的坐标位移‘

旋转参数的第一种命令格式使用以弧度为单位的 yaw(绕z轴旋转的偏航角)、pitch(绕y轴旋转的俯仰角)、roll角度(绕x轴旋转的翻滚角);旋转参数的第二种命令格式使用四元数表达旋转角度

发布频率以ms为单位

在launch文件中使用方法如下:

<launch>
    <node pkg="tf" type="static_transform_publisher" name="link1_broadcast" args = "1 0 0 0 0 0 1 link1_parent link1 100" />
</launch>

        view_frams:可视化调试工具,显示TF树的信息,可以生成pdf文件

rosrun tf view_frames

之后使用 evince frames.pdf 查看生成的pdf文件

12.QT工具箱

        rqt_console:日志输出工具,图形化显示和过滤ROS系统运行状态中的所有日志信息

        rqt_graph:计算图可视化工具,图形化显示当前ROS系统中 的计算图

        rqt_plot:数据绘图工具,二位数值曲线绘制工具,将需要显示的数据在xy坐标系中曲线描绘,然后再界面上方的Topic中输入需要显示的话题消息

        rqt_reconfigure:可以在不重启系统的情况下,动态配置ROS系统终端参数,但该功能的使用需要在代码中设置参数的相关属性,从而支持动态配置。

        启动:rosrun rqt_reconfigure rqt_reconfigure

13.rviz三维可视化平台

        Add添加显示数据的插件

        “Display Name”:填入一个唯一的名称,用来识别显示的数据。如要显示两个传感器的数据,添加两个Laser Scan类型的插件,命名为Laser_base和Laser_head。

        左侧的“Displays”会列出已经添加的显示插件,设置插件属性,“Topic”属性重要,用来声明该显示插件所订阅的数据来源


14.Gazebo

        启动:rosrun gazebo_ros gazebo

        创建仿真环境:

                1.直接插入模型:左侧模型列表,insert,选择需要的模型,放置在主显示区

                2.Building Editor:ctrl+B、edit->building Editor

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值