赞
踩
ros的版本选择要与ubnutu系统版本对应,建议使用ros2(通信更便捷)
ROS与操作系统版本对应关系:ROS与操作系统版本对应关系_ros版本与ubuntu对应版本_万俟淋曦的博客-CSDN博客
(1)配置系统软件源
打开“软件和更新”,进入到“Ubuntu软件“页面,允许universe、restricted、multiverse三项,即勾选这三项,如下图所示。
(2)添加秘钥
打开终端,输入以下指令添加秘钥:
sudo apt install curl gnupg2 -y
curl -s https://gitee.com/ohhuo/rosdistro/raw/master/ros.asc | sudo apt-key add -
(3)设置软件源
输入以下指令将存储库添加到源列表:
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
(4)安装ros
sudo apt update
sudo apt install ros-foxy-desktop
注:此处安装的是foxy版本,安装其他版本需将版本号替换
(5)安装自动补全工具
sudo apt install python3-argcomplete -y
(6)设置环境变量
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source .bashrc
(7)查看已安装ros版本
printenv | grep -i ROS
(8)测试运行
ros2安装好后可以运行官方demo来验证是否完成安装:打开两个终端,分别执行两条指令,第一条用于发布话题消息,第二条用于订阅话题消息。
ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_cpp listener
Carla_ros_bridge版本选择要与carla的版本相对应,carla-simulator/ros-bridge: ROS bridge for CARLA Simulator (github.com)
(1)下载对应版本的carla_ros_bridge源码(一定要注意版本)
(2)解压安装包
mkdir -p ~/carla-ros-bridge/project/src
//将解压后的文件夹ros-bridge复制到~/carla-ros-bridge/project/src目录下
(3)安装依赖
cd ~/carla-ros-bridge/project
Rosdepc init
Rosdepc update
rosdepc install --from-paths src --ignore-src -r
rosdepc安装:rosdepc是rosdep的国内版,一般rosdep会遇到网络连接问题,建议使用rosdepc
安装命令:wget http://fishros.com/install -O fishros && . fishros
运行后在终端选择4安装即可
(4)编译
cd ~/carla-ros-bridge/project
colcon build
编译完后会生成build、install、log文件夹
注:编译过程可能会出现依赖缺失的问题,需要手动下载
ROS1想要实现跨机通信,需要配置单Master或者多Master网络环境,过于麻烦;ROS2只要保证多台机器处于同一个局域网就可以实现通信,但是仍需要注意一些细节设置。
X3板端安装的是地平线官方提供的togetheRos.Bot,本质上是ros2-foxy的简化版本,但不支持ros2的显示功能(rviz、pcl等)。
(1)pc与x3板处于同一个局域网
如果使用的是vm虚拟机或vritual box虚拟机,需要将网络连接方式设置为桥接模式,NAT模式无法通信。
让pc和x3板连接同一无线网,查看网络ip在同一网段,测试是否可以双向ping通,如果只能pc端ping通x3板端,需要关闭pc防火墙设置。
(2)测试通信
pc端终端输入:ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
X3终端输入:source /opt/tros/setup.bash
ros2 run examples_rclcpp_minimal_publisher publisher_member_function
上述两条指令也可以替换,实现互相发布订阅:
出现上图结果就表明可以进行ros的跨机通信。
深蓝学院提供了实现ros-carla控制算法的开源代码(c++、carla0.9.13):gxf1002/ShenLanAcademy-PlanningControl: 纵向控制:PID ;横向控制:Stanely \ LQR \ MPC (github.com)
(1)下载解压编译功能包
在上面的网站下载功能包并解压,以解压后的carla-ros-bridge目录为工作空间,在此目录下colcon build编译。
(2)运行算法
第一步:启动carla
在carla安装目录下,运行./CarlaUE4.sh
第二步:配置环境变量
export PYTHONPATH=$PYTHONPATH:<path-to-carla>/PythonAPI/carla/dist/carla-<carla_version_and_arch>.egg
是carla安装路径。
carla-<carla_version_and_arch>.egg选择对应的版本和架构。
第三步:在终端中添加功能包路径
cd到工作空间carla-ros-bridge,在终端输入source /install/laocl_setup.sh
第四步:launch启动carla-ros桥控制界面(以pid算法为例)
ros2 launch carla_shenlan_bridge_ego_vis carla_bridge_ego_vehilce.launch.py
出现以下画面即表示carla和ros可以进行通信:
第五步:运行控制算法节点
在工作空间carla-ros-bridge下打开一个新终端输入:
source /install/laocl_setup.sh
ros2 run carla_shenlan_pid_controller carla_shenlan_pid_controller_node
运行节点后就可以看到车辆运行,pid控制算法调节车辆纵向速度,在终端中输出实时速度、速度误差、角度误差等信息。
上面两种通信方式的实现,为跨机通信提供了可能性,当启动carla-ros桥控制界面,x3板端和pc端ros能接受和订阅的话题内容是相同的,因此在x3板端发布车辆控制信息给vehicle_control_cmd话题,在pc端就可以订阅vehicle_control_cmd话题话题中的信息,通过这种方法来实现跨机通信。
第一步:在pc端启动carla(同上)
第二步:在pc端启动carla-ros桥控制界面(同上)
第三步:在x3板端运行控制算法节点(同上)
使用ros2 topic list查看X3板端接收话题,运行节点:
跨机通信时间:统计pid算法中发布一次信息到话题vehicle_control_cmd上的时间
可以看到发布一次信息到话题vehicle_control_cmd上的时间可以忽略不计,表明跨机通信方式不会影响程序运行效率。
carla_ros_bridge是carla官方提供的carla和ros通信工具,ros1和ros2都适用。本质上是一个由多个功能包组成的ros工作空间,包含了所有基础的功能包以及实现自己算法的功能包。
对基础功能包的解释参考官网:
以深蓝学院pid控制算法为例:
其中carla_shenlan_project_1就是开发者自己添加的功能包,包括实现控制算法的.cpp文件和头文件等,如果实现其他算法,则需要修改替换.cpp文件和头文件。
消息是ros中的一种接口定义方式,carla官方定义了有关carla仿真的消息类型msgs(carla_msga文件夹)。
比如车自车车辆控制CarlaEgoVehicleControl.msg,定义了消息中包含信息的名称和数据类型(int32、float32、bool等),向话题发布和订阅的信息要和话题定义的消息类型中的信息相同,详细内容参考官网:CARLA messages reference - CARLA Simulator
节点的职责就是执行某些具体的任务,从计算机操作系统的角度来看,也叫做进程;每个节点都是一个可以独立运行的可执行文件,比如执行某一个python程序,或者执行C++编译生成的结果,都算是运行了一个节点;节点功能各不相同,根据系统设计的不同,可能位于计算机A,也可能位于计算机B,还有可能运行在云端,这叫做分布式,也就是可以分布在不同的硬件载体上;每一个节点都需要有唯一的命名,当我们想要去找到某一个节点的时候,或者想要查询某一个节点的状态时,可以通过节点的名称来做查询。
话题是节点间传递数据的桥梁。
(1)发布订阅模式
话题数据传输的特性是从一个节点到另外一个节点,发送数据的对象称之为发布者,接收数据的对象称之为订阅者,每一个话题都需要有一个名字,传输的数据也需要有固定的数据类型。支持多对多通信。
(2)异步通信
所谓异步,只要是指发布者发出数据后,并不知道订阅者什么时候可以收到,异步的特性也让话题更适合用于一些周期发布的数据,比如传感器的数据,运动控制的指令等等,如果某些逻辑性较强的指令,比如修改某一个参数,用话题传输就不太合适了。
(3)消息接口
在ROS中,话题通信数据的描述格式称之为消息,对应编程语言中数据结构的概念。比如这里的一个图像数据,就会包含图像的长宽像素值、每个像素的RGB等等,在ROS中都有标准定义。
消息是ROS中的一种接口定义方式,与编程语言无关,我们也可以通过.msg后缀的文件自行定义,有了这样的接口,各种节点就像积木块一样,通过各种各样的接口进行拼接,组成复杂的系统。
服务是一种你问我答的同步通信效果。
从服务的实现机制上来看,这种你问我答的形式叫做客户端/服务器模型,简称为CS模型,客户端在需要某些数据的时候,针对某个具体的服务,发送请求信息,服务器端收到请求之后,就会进行处理并反馈应答信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。