一、安装操作系统
- 1、具体参考Ubuntu 20.04 LTS 桌面版详细安装指南进行操作系统安装,操作系统可以从开源镜像站下载
https://mirrors.huaweicloud.com 华为开源
https://mirrors.tuna.tsinghua.edu.cn 清华开源下载
https://mirrors.ustc.edu.cn 中国科学技术大学开源软件镜像
- 2、安装支持ifconfig命令
sudo apt install net-tools
- 3、安装支持SSH
sudo apt updatesudo apt install openssh-server
sudo systemctl status ssh
二、安装ROS Noetic
- 1、安装源
sudo sh -c '. /etc/lsb-release && echo "d{2d3b390d-f615-41d0-a830-7bbdcedbd397}eb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
- 2、安装KEY
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
- 3、更新源
sudo apt update
- 4、安装ROS
sudo apt install ros-noetic-desktop-full
- 5、环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
三、安装测试
- 1、启动
roscore
- 2、打开小乌龟
rosrun turtlesim turtlesim_node
- 3、键盘控制小乌龟
rosrun turtlesim turtle_teleop_key
- 4、命令控制小乌龟
输入rostopic pub /turtle2/cmd_vel 然后按tab键会自动联想参数;
geometry_msgs/Twist 为数据类型。linear为线速度,angular为角速度,单位是m/s 和 rad/s.
例如:”linear: x: 1.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 1.0” 小乌龟边向前,边自传,速度合成后,轨迹是一个圆。
rostopic pub /turtle2/cmd_vel geometry_msgs/Twist "linear:
x: 1.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0"
- 5、开发代码控制小乌龟
1、具体参考关于ros提到的那只turtle
2、创建名为toldturtle 的package,以及名为talk.cpp一个node
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
cd ~/catkin_ws/src
catkin_create_pkg toldturtle roscpp rospy std_msgs geometry_msgs
cd toldturtle
vi talk.cpp
cd ~/catkin_ws/
catkin_make
. ~/catkin_ws/devel/setup.bash
3、修改CMakeLists.txt
target_link_libraries(talk
${catkin_LIBRARIES}
)
add_executable(talk src/talk.cpp)
4、执行
rosrun toldturtle talk
5、talk.cpp参考
#include
#include
ros::Publisher cmdVelPub;
int main(int argc, char **argv){
ros::init(argc, argv, "talk"); // rosrun toldturtle talk //Usage: rosrun [--prefix cmd] [--debug] PACKAGE EXECUTABLE [ARGS]
//"talk"必须是nodename
std::string topic = "/turtle1/cmd_vel"; //topic name
ros::NodeHandle n;
cmdVelPub = n.advertise(topic, 1);
//第一个参数也可以写成"/turtle1/cmd_vel"这样的topic name
//第二个参数是发布的缓冲区大小,是消息类型
ros::Rate loopRate(2);
//与Rate::sleep();配合指定自循环频率
ROS_INFO("talk cpp start...");//输出显示信息
geometry_msgs::Twist speed; // 控制信号载体 Twist message
while (ros::ok()){
speed.linear.x = 1; // 设置线速度为1m/s,正为前进,负为后退
speed.angular.z = 1; // 设置角速度为1rad/s,正为左转,负为右转
cmdVelPub.publish(speed); // 将刚才设置的指令发送给机器人
ros::spinOnce();
loopRate.sleep();//按loopRate(2)设置的2HZ将程序挂起
}
return 0;
}
四、主题和服务开发
包括:主题、服务,涉及消息定义。具体参考如下资源:
ROS学习笔记五:创建和使用ROS msg和srv
ros学习之消息和服务
ROS 新手测试简单的Service和Client
ROS学习笔记(一):自己动手写一个ROS程序/一个简单的发布(Publisher)、订阅(Subscriber)程序
- 1、启动
roscore
五、安装rosbridge,支持java与ROS通信
- 1、安装
sudo apt-get install ros-noetic-rosbridge-server
- 2、启动
roscore
roscd rosbridge_server
roslaunch rosbridge_server rosbridge_websocket.launch
#列出所有节点,可见增加了rosbridge_websocket
rosnode list
成功运行后可见,默认9090端口:
Rosbridge WebSocket server started at ws://0.0.0.0:9090
- 3、测试
下载java_rosbridge,该工程只支持topic通信,需要自己扩展下service通信,然后运行工程的RosTest,另外消息结构也需要根据需要扩展,以及自己实现重连机制。
#列出所有主题,可见主题增加了java_to_ros和ros_to_java
rostopic list
#输出主题消息
rostopic echo /java_to_ros
#发布主题消息
rostopic pub /ros_to_java std_msgs/String "helloJAVA"
rostopic pub /java_to_ros std_msgs/String "helloROS"
#列出所有服务,可代码调用默认的/rosapi/get_time
rosservice list
rosservice call /rosapi/get_time
- 4、rosbridge协议
底层为websocket通信,在这之上封装具体的数据格式,具体见:
Rosbridge协议定义
rosbridge_suite
六、常用命令
#进入ROS目录
roscd
#运营
roslaunch
rosrun
#节点
rosnode list
#主题
rostopic list
#服务
rosservice list
rosservice call /rosapi/get_time
#消息
rosmsg list
#查看消息定义
rosed geometry_msgs Twist.msg
#消息的存储和重新发布
rosbag
#参数
rosparam list
七、ROS优缺点
ROS系统的实时性是不够的
……