ROS 安装 工作空间 包 节点 话题 服务

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_velTopic, 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 typerosmsg打交道, 可以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"

这样多只海龟就来了:
在这里插入图片描述
rotopicrosmsg的关系, 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.

微信公众号

欢迎扫描关注我的微信公众号, 及时获取最新文章:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值