ROS安装
ROS的版本和操作系统是关联的, 如果是Ubuntu 16, 就装Kinetic
; 如果是Ubuntu 18, 就装Melodic
. 下面以Ubuntu 18.04安装Melodic
为例, 来源是官方的 Ubuntu install of ROS Melodic.
# Setup your computer to accept software from packages.ros.org
# 最好用默认的官方源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# Set up your keys
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# Installation
# 如果是配置高的, 装desktop-full, 对于性能弱的嵌入式设备如Jetson Nano, 装ros-melodic-desktop
sudo apt update
sudo apt install ros-melodic-desktop-full
# Initialize rosdep
# 如果失败, 多试几次, 不行挂梯子试试
sudo rosdep init
rosdep update
# Environment setup
# bash对应bashrc, 如果用的是zsh, 换成zshrc
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
# Dependencies for building packages
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
安装完后运行roscore
检验一下:
运行 printenv | grep ROS
检查下环境变量:
$ printenv | grep ROS
ROS_ETC_DIR=/opt/ros/melodic/etc/ros
ROS_ROOT=/opt/ros/melodic/share/ros
ROS_MASTER_URI=http://localhost:11311
ROS_VERSION=1
ROS_PYTHON_VERSION=2
ROS_PACKAGE_PATH=/opt/ros/melodic/share
ROSLISP_PACKAGE_DIRECTORIES=
ROS_DISTRO=melodic
创建空的catkin工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
编译成功, 没有报错, catkin_ws
下面现在有3个文件夹build
, devel
, src
, 如果把这个当做常用的工作空间, 不想每个窗口都source devel/setup.bash
, 可以这么搞:
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
创建catkin包
比Workspace小一级的是Package, 一般位于src
目录下, 如创建一个beginner_tutorial
的包, 这个包还依赖于std_msgs
, roscpp
, rospy
包:
cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
catkin_ws/src/beginner_tutorial
文件夹下自动生成CMakeLists.txt
, include
文件夹, package.xml
, src
文件夹.
可以单独对包进行编译:
cd ~/catkin_ws
catkin_make -DCATKIN_WHITELIST_PACKAGES="beginner_tutorials"
把包拉入黑名单不编译用:
catkin_make -DCATKIN_BLACKLIST_PACKAGES="beginner_tutorials"
省事就整个工作空间编译:
cd ~/catkin_ws
catkin_make
查看依赖: rospack depends1 beginner_tutorials
切换目录: roscd beginner_tutorials
节点
Workspace -> Package -> Node, 起了roscore
后, 节点可以和其他节点通信, 可以发布或者订阅Topic(话题), 可以提供或使用Service(服务).
列出节点: rosnode list
, 如起了roscore
后, 会有一个rosout
的节点用于收集打印调试输出.
节点信息: rosnode info [node_name]
运行节点: rosrun [package_name] [node_name]
如起了roscore
后, 运行turtlesim
包中的turtlesim_node
节点:
rosrun turtlesim turtlesim_node
蹦出海龟界面:
再打开一个终端, 运行 rosrun turtlesim turtle_teleop_key
, 可以用上下键控制海龟移动的线速度(2.0), 左右键控制海龟移动的角速度(2.0).
ping节点: rosnode ping turtlesim
使用参数映射改变节点名: rosrun turtlesim turtlesim_node __name:=my_turtle
, 可以用这种方式打开多个海龟窗口.
使用rosnode -h
查看相关命令:
$ rosnode -h
rosnode is a command-line tool for printing information about ROS Nodes.
Commands:
rosnode ping test connectivity to node
rosnode list list active nodes
rosnode info print information about node
rosnode machine list nodes running on a particular machine or list machines
rosnode kill kill a running node
rosnode cleanup purge registration information of unreachable nodes
Type rosnode <command> -h for more detailed usage, e.g. 'rosnode ping -h'
话题
# 1st terminal
roscore
# 2nd terminal
rosrun turtlesim turtlesim_node # /turtlesim
# 3rd terminal
rosrun turtlesim turtle_teleop_key # /teleop_turtle
其中, turtle_teleop
发布/turtle1/cmd_vel
的Topic
, turtlesim
订阅这个Topic
, 用rqt_graph
查看:
使用rostopic -h
查看相关命令:
$ rostopic -h
rostopic is a command-line tool for printing information about ROS Topics.
Commands:
rostopic bw display bandwidth used by topic
rostopic delay display delay of topic from timestamp in header
rostopic echo print messages to screen
rostopic find find topics by type
rostopic hz display publishing rate of topic
rostopic info print information about active topic
rostopic list list active topics
rostopic pub publish data to topic
rostopic type print topic or field type
Type rostopic <command> -h for more detailed usage, e.g. 'rostopic echo -h'
详细用法亦可参考官方例子: Understanding ROS Topics
其中rostopic pub
, rostopic type
与rosmsg
打交道, 可以rosmsg -h
查看相关命令:
$ rosmsg -h
rosmsg is a command-line tool for displaying information about ROS Message types.
Commands:
rosmsg show Show message description
rosmsg info Alias for rosmsg show
rosmsg list List all messages
rosmsg md5 Display message md5sum
rosmsg package List messages in a package
rosmsg packages List packages that contain messages
Type rosmsg <command> -h for more detailed usage
rostopic pub [topic] [msg_type] [args]
, 如让海龟做圆周运动:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 2.0]'
运行rqt_plot
可以查看topic的曲线图:
服务
Services是节点通信的另一种方式, 允许节点发送请求, 接收响应. 先用 rosservice -h
查看相关命令:
$ rosservice -h
Commands:
rosservice args print service arguments
rosservice call call the service with the provided args
rosservice find find services by service type
rosservice info print information about service
rosservice list list active services
rosservice type print service type
rosservice uri print service ROSRPC uri
Type rosservice <command> -h for more detailed usage, e.g. 'rosservice call -h'
上节提到使用参数映射改变节点名, 可以生成多个海龟窗口, 那怎么在一个窗口中添加多只海龟呢?
roscore
rosrun turtlesim turtlesim_node
rosservice call /spawn 7 7 1.5 "" # return name: "turtle2"
rosservice call /spawn 2 2 0.5 "turtle_3"
这样多只海龟就来了:
如rotopic
和rosmsg
的关系, rosservice
则和rosparam
关系紧密:
rosparam allows you to store and manipulate data on the ROS Parameter Server. The Parameter Server can store integers, floats, boolean, dictionaries, and lists. rosparam uses the YAML markup language for syntax.
先用rosparam -h
查看相关命令:
$ rosparam -h
rosparam is a command-line tool for getting, setting, and deleting parameters from the ROS Parameter Server.
Commands:
rosparam set set parameter
rosparam get get parameter
rosparam load load parameters from file
rosparam dump dump parameters to file
rosparam delete delete parameter
rosparam list list parameter names
如rostopic list
:
$ rosparam list
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_ubuntu__36553
/rosversion
/run_id
改变背景色:
rosparam set /background_r 150
rosservice call /clear #调用clear服务参数才生效
更多用法参考官方Understanding ROS Services and Parameters.
微信公众号
欢迎扫描关注我的微信公众号, 及时获取最新文章: