ip地址规划工具_开发者说丨ROS、Simulink、Carsim的互联与规划、控制算法的验证...

99274d66c55865b98dfe34817d2b8610.png

运动规划,又称运动插补,是在给定的路径端点之间插入用于控制的中间点序列,从而实现沿给定的路径平稳运动。

运动规划由路径规划(空间)和轨迹规划(时间)组成,连接起点位置和终点位置的序列点或曲线称之为路径,构成路径的策略称之为路径规划。

自动驾驶汽车又称无人驾驶汽车、电脑驾驶汽车、轮式移动机器人,是一种通过电脑系统实现无人驾驶的智能汽车。

在MATLAB中,Simulink是用来建模、仿真和分析动态多维系通的交通工具。Carsim是专门针对车辆动力学的仿真软件,可以方便灵活的定义试验环境和试验过程,详细地定义整车各系统的特性参数和特性文件。ROS则是机器人学习和无人车学习最好linux平台软件,资源丰厚。

本文由社区开发者—杨小育撰写,对ROS、Simulink、Carsim的互联与规划、控制算法的验证进行了详细讲解,希望感兴趣的开发者能通过阅读这篇文章有所收获。

  以下,ENJOY  

0c13232fe1f94c143f67805cb45a6a8b.png

在进行无人车的规划控制算法调试时,直接在实车上进行不仅危险且效率低下,一个好的运动学仿真平台将会加速开发进度。Carsim非常适合进行车辆动力学仿真,但是只能运行在Windows系统上,好在它可以连接Simulink。而无人车的规划控制算法通常运行在Linux系统上,各个模块通常使用ROS进行连接。本篇文章提供一种方法,将ROS 、 Simulink、carsim进行互联,完成规划、控制算法的动力学仿真。

923cb43f5a29475b33cc6663bb499c8e.png

a、硬件基础:PC1和PC2使用路由器连接同一局域网。

b、PC1为Ubuntu系统,运行规划、控制算法,各模块使用ROS进行通信。

c、PC2为Windows系统,运行Simulink和Carsim。

49b96ec05969750caa9b8162d602e5a2.png

建立两个ROS节点,一个为Talker负责发送车辆的转向、油门、刹车指令,一个为 Listener接收车辆的位姿信息,(此处msgs仅为示例,需结合具体的工程项目建立相应的node和topic)。

b65d23151e39f0cbf4c01301c3dee616.png

见文末链接—1*《Talker节点》

 1//talker.cpp
2#include 
3#include "ros/ros.h"
4#include "geometry_msgs/Pose2D.h"
5#include "std_msgs/Float64.h"
6
7int main(int argc,char **argv) 8{
9    ros::init(argc,argv,"talker1");
10    ros::NodeHandle n;
11    ros::Publisher chatter_pub = n.advertise<:pose2d>("control",10);12    ros::Rate loop_rate(10);           13    float count = 0;14    while(ros::ok())15    {16        geometry_msgs::Pose2D msg;17        msg.x = count * 0.01;      // 油门开度18        msg.y = 0.5;               //方向盘扭矩 19        msg.theta = 0;             //刹车气缸的压强20        ROS_INFO("%f",msg.x);21        //printf("%f\n",msg.data);22        chatter_pub.publish(msg);23        ros::spinOnce();24        loop_rate.sleep();25        ++count;2627        if (msg.x > 1)28        {29            count = 0;30        }31    }32    return 0;33}

7f20f1c6a761e0075bef7612203a5396.png

见文末链接—2*《Listener节点》

 1//listenner.cpp
2#include 
3#include "ros/ros.h"
4#include "geometry_msgs/Pose2D.h"
5void chatterCallback(const geometry_msgs::Pose2D& msg) 6{
7    //ROS_INFO("I heard:[%f]",msg );
8    ROS_INFO("I heard:",msg );
9    printf("%f\n",msg.x);
10    printf("%f\n",msg.y);
11    printf("%f\n",msg.theta);
12}
13int main(int argc,char **argv)14{
15    ros::init(argc,argv,"listener1");
16    ros::NodeHandle n;
17    ros::Subscriber sub = n.subscribe("simulink_pose",1,chatterCallback);
18    ros::spin();
19    return 0;
20}

进入主文件夹,使用从Ctrl + H快捷键显示隐藏的文件。

46932c0a1f7f09200b3f3dc3575949fc.png

双击 .bashrc文件,在末尾加入两行代码:

db2d79232ce8aadf5bffeafb8f29d647.png

192.168.0.101为PC1的IP地址。

9907e6dd16068157ddbbfcc71ce1d759.png

输入通道分别为油门开度方向盘扭矩刹车压力。

886d7f3e8607f6d142dd1fbfe9df912c.png

输出通道分别为X、Y、Yaw、速度、方向盘转角。

8801bca94a03ff8cb64ade5958c9acf3.png

0aab6b163da5efeeb2214f1651f952f9.png

见文末链接—3*《PC2上的Simulink模型的搭建》参考资料

45c86f7d728727afac4c0245506ed0d3.png

a29b61904b95be9d86fc683718513d6a.png

6af61bc4099b140eab2c65fc50c72d60.png

见文末链接—4*《该Simulink模型的下载链接》

02da7d31440f3531ab7197e66afb4981.png

进入Simulink Library Browser中的ROS工具箱,添加Subscribe工具箱,并双击,将弹出如下的窗口:

7525978d838a7ae7f792e823dd58b1ff.png

a、选择Topic的来源。

b、编辑Topic的名称,输入/control,与ROS的Talker节点里的Topic对应。

c、选择msg的类型,与Talker节点里的Topic的msg对应。

86bc7f1bfb031532cc95bc4f8166910d.png

添加总线选择器模块Bus Selector,以Subscribe的msg引脚作为它的输入,并双击进行参数设置

e92ab31e04d603505d85e8bb980bc19e.png

使用Select按钮进行Bus Selector输出引脚的定义。

016cc925f5dd22b8f58b3398cc22e743.png

从Simulink Library Browser中的ROS工具箱添加空白消息模块Blank Message,该模块用于创建ROS消息,并双击进行参数设置。

81b23e8e12a997a98a19b1eaf6a1c49e.png

Message类型与ROS中的Listener节点中的消息类型一致。

从Simulink Library Browser中添加Bus Assignment模块,并双击打开如下窗口,使用Select按钮进行输出通道设置。

2dfce986fb795471575bc9aab22256e2.png

从Simulink Library Browser中的ROS工具箱添加Publish模块,并双击进行参数设置。

b52f6663192aba3c9bf0822d763b101c.png

Topic为/simulink_pose,与ROS中的Listener节点的话题名字对应 Message的类型与Listener节点的消息类型对应。

d21644dcd6053fc8fc8aabcc63b630cf.png

选择Simulink菜单栏中的Tools项,如下图所示进入到Configure Network Address项。

38ab01770290d69adb542fc26927531d.png

上述操作将弹出以下窗口:

3e1530e6d2069f9899f812a6b3fad6d7.png

红色圈为PC1的IP地址。

4a9907d14a7f785f6f142e95ed3afbbf.png

a、首先启动PC1上的ROS收发节点。

b、PC2:在MATLAB的命令窗口输入以下指令,启动Simulink中的节点。

047acdedfcb76eca3f4c38d897b78e9f.png

其中192.168.0.101为PC1的IP地址,192.168.0.100为PC2的IP地址。

0b96ddfd5c5c1373e0de12a47544890f.png

1*《Talker节点》

【https://github.com/xiaoyuyang0901/Simulation-platform/blob/master/ROS-Simulink-Carsim/listenner.cpp】

2*《Listener节点》

【https://github.com/xiaoyuyang0901/Simulation-platform/blob/master/ROS-Simulink-Carsim/listenner.cpp】

3*《PC2上的Simulink模型的搭建》参考资料

【https://github.com/xiaoyuyang0901/Simulation-platform/tree/master/ROS-Simulink-Carsim】

4*《该simulink模型的下载链接》

【https://github.com/xiaoyuyang0901/Simulation-platform/tree/master/ROS-Simulink-Carsim】

更多话题讨论、技术交流

可以添加Apollo小哥哥为好友

进开发者交流群

3747c8e90ed56a50c3bcc44f4bb14667.png

826a5f2f2c48c87056a0290173ffec6a.gif

37875c3e1ca1abed95cf0b6abd8a43e8.png

* 以上内容为开发者原创,不代表百度官方言论。

内容来自开发者知乎专栏:

6bec75db937d31b7d36eb25dc6cc34ac.png

90f9c4c580df484cd59dabd7ad287c03.png

8d6109baf7c9fc4453248983b4e7b581.png

216b98042879892a6ad24f76165c6254.png

7ec9930bb4d3c2be773a8520ab95ed2c.png

8757d3ca7d86bef81f99d01f07d14a30.gif

c1d4c2c5e6301be5aacf8f3789d4e2e7.gif

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值