GithubHelp home page GithubHelp logo

auroai / apollo_ros_bridge Goto Github PK

View Code? Open in Web Editor NEW
96.0 12.0 51.0 21.54 MB

Bridge messaging between Apollo and ROS

License: Apache License 2.0

Python 6.96% Shell 5.26% C++ 85.24% C 1.15% Assembly 0.03% Makefile 0.18% Batchfile 0.02% Dockerfile 0.06% CMake 1.03% EmberScript 0.08%

apollo_ros_bridge's Introduction

Apollo ROS Bridge

Overview

This is a C++ library which is used to interface messages between ROS and Apollo ecosystem. It is designed to help developers use ROS libraries to communicate with Apollo and hence make development easier.

Affiliation: Ridecell
Maintainer: Abhilash Balachandran [email protected]

Lidar Pointcloud received from Apollo , converted and published as a ROS message. {Left} Cyber_visualizer tool showing cyber pointcloud message. {Right} Rviz showing ros pointcloud message

Dependencies

Installation

Using Prebuilt docker image

There is a prebuild docker image which can be directly used. To use the prebuilt docker image:

cd docker_tools
./run.sh

Building docker image

To build the docker image on your machine,

cd docker_tools
./build.sh $image_name

If no image name is provided, it defaults to auroai/apollo_ros_bridge:latest

Building bridge code

In order to build the bridge, first build the appropriate ros messages used in the bridge source code:

cd /home/apollo_ros_bridge/ros_pkgs
catkin build
source devel/setup.bash

Now, build the bridge source code using bazel. From the root workspace of the package,

cd /home/apollo_ros_bridge
bazel build cyber_ros_bridge:all

To run the example node, run

roscore && ./bazel-bin/cyber_ros_bridge/cyber_ros_bridge

for extra logging,

GLOG_v=4 GLOG_logtostderr=1  ./bazel-bin/cyber_ros_bridge/cyber_ros_bridge

This launches the bridge with default params (defined in the common folder).

Alternatively, to launch the bridge with custom parameters,

cyber_launch start cyber_ros_bridge/launch/bridge_example.launch

Run Apollo

Topics can be visualized with rostopic list and echo

Alternatively, publish relevant topics from ROS and view topics using cyber_monitor on Apollo's side

A sample script to run a ROS Container has been provided to help developers. This can be launched using:

cd /home/apollo_ros_bridge/docker_tools
./example_ros_run.sh

Adding Custom Bridging

For detailed information on how to add own bridging of topics, refer to adding custom bridging

Copyright and License

The apollo ros bridge source code is released under the Apache License, Version 2.0

Future Updates

  • Support for apollo 5.0
  • Timer method for bridging
  • easier docker setup

apollo_ros_bridge's People

Contributors

abhilashbalachandran avatar jit-rc avatar quning18 avatar srini-ry avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

apollo_ros_bridge's Issues

Build failure for Custom topic

The error message now is
INFO: Reading 'startup' options from /home/apollo_ros_bridge/tools/bazel.rc: --batch_cpu_scheduling --host_jvm_args=-XX:-UseParallelGC
INFO: (10-29 18:55:21.102) Found 2 targets...
ERROR: (10-29 18:55:26.198) /home/apollo_ros_bridge/cyber_ros_bridge/lib/BUILD:4:1: C++ compilation of rule '//cyber_ros_bridge/lib:cyber_ros_bridge_lib' failed (Exit 1).
cyber_ros_bridge/lib/module_drivers.cpp: In function 'void cyber_ros_bridge::ApolloImuToROSImu(const std::shared_ptrapollo::drivers::gnss::Imu&, sensor_msgs::Imu&)':
cyber_ros_bridge/lib/module_drivers.cpp:197:21: warning: typedef 'byte' locally defined but not used [-Wunused-local-typedefs]
typedef uint8_t byte;
^
cyber_ros_bridge/lib/module_drivers.cpp: In function 'void cyber_ros_bridge::ApolloChassisToROSChassis(const std::shared_ptrapollo::canbus::Chassis&, chassis_msgs::chassis&)':
cyber_ros_bridge/lib/module_drivers.cpp:251:32: error: cannot convert 'apollo::canbus::Chassis::engine_started' from type 'bool (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis_<std::allocator >::engine_started_type {aka unsigned char}'
chassis_ros.engine_started = chassis_msg->engine_started;
^
cyber_ros_bridge/lib/module_drivers.cpp:252:28: error: cannot convert 'apollo::canbus::Chassis::engine_rpm' from type 'float (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::engine_rpm_type {aka double}'
chassis_ros.engine_rpm = chassis_msg->engine_rpm;
^
cyber_ros_bridge/lib/module_drivers.cpp:253:28: error: cannot convert 'apollo::canbus::Chassis::speed_mps' from type 'float (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::speed_mps_type {aka double}'
chassis_ros.speed_mps = chassis_msg->speed_mps;
^
cyber_ros_bridge/lib/module_drivers.cpp:254:29: error: cannot convert 'apollo::canbus::Chassis::odometer_m' from type 'float (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::odometer_m_type {aka double}'
chassis_ros.odometer_m = chassis_msg->odometer_m;
^
cyber_ros_bridge/lib/module_drivers.cpp:255:38: error: cannot convert 'apollo::canbus::Chassis::throttle_percentage' from type 'float (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::throttle_percentage_type {aka double}'
chassis_ros.throttle_percentage = chassis_msg->throttle_percentage;
^
cyber_ros_bridge/lib/module_drivers.cpp:256:35: error: cannot convert 'apollo::canbus::Chassis::brake_percentage' from type 'float (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::brake_percentage_type {aka double}'
chassis_ros.brake_percentage = chassis_msg->brake_percentage;
^
cyber_ros_bridge/lib/module_drivers.cpp:257:38: error: cannot convert 'apollo::canbus::Chassis::steering_percentage' from type 'float (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::steering_percentage_type {aka double}'
chassis_ros.steering_percentage = chassis_msg->steering_percentage;
^
cyber_ros_bridge/lib/module_drivers.cpp:258:37: error: cannot convert 'apollo::canbus::Chassis::steering_torque_nm' from type 'float (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::steering_torque_nm_type {aka double}'
chassis_ros.steering_torque_nm = chassis_msg->steering_torque_nm;
^
cyber_ros_bridge/lib/module_drivers.cpp:259:32: error: cannot convert 'apollo::canbus::Chassis::parking_brake' from type 'bool (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::parking_brake_type {aka unsigned char}'
chassis_ros.parking_brake = chassis_msg->parking_brake;
^
cyber_ros_bridge/lib/module_drivers.cpp:260:35: error: cannot convert 'apollo::canbus::Chassis::high_beam_signal' from type 'bool (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::high_beam_signal_type {aka unsigned char}'
chassis_ros.high_beam_signal = chassis_msg->high_beam_signal;
^
cyber_ros_bridge/lib/module_drivers.cpp:261:34: error: cannot convert 'apollo::canbus::Chassis::low_beam_signal' from type 'bool (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::low_beam_signal_type {aka unsigned char}'
chassis_ros.low_beam_signal = chassis_msg->low_beam_signal;
^
cyber_ros_bridge/lib/module_drivers.cpp:262:35: error: cannot convert 'apollo::canbus::Chassis::left_turn_signal' from type 'bool (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::left_turn_signal_type {aka unsigned char}'
chassis_ros.left_turn_signal = chassis_msg->left_turn_signal;
^
cyber_ros_bridge/lib/module_drivers.cpp:263:36: error: cannot convert 'apollo::canbus::Chassis::right_turn_signal' from type 'bool (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::right_turn_signal_type {aka unsigned char}'
chassis_ros.right_turn_signal = chassis_msg->right_turn_signal;
^
cyber_ros_bridge/lib/module_drivers.cpp:264:23: error: cannot convert 'apollo::canbus::Chassis::horn' from type 'bool (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::horn_type {aka unsigned char}'
chassis_ros.horn = chassis_msg->horn;
^
cyber_ros_bridge/lib/module_drivers.cpp:265:24: error: cannot convert 'apollo::canbus::Chassis::wiper' from type 'bool (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::wiper_type {aka unsigned char}'
chassis_ros.wiper = chassis_msg->wiper;
^
cyber_ros_bridge/lib/module_drivers.cpp:266:35: error: cannot convert 'apollo::canbus::Chassis::disengage_status' from type 'bool (apollo::canbus::Chassis::)()const' to type 'chassis_msgs::chassis
<std::allocator >::_disengage_status_type {aka unsigned char}'
chassis_ros.disengage_status = chassis_msg->disengage_status;
^
cyber_ros_bridge/lib/module_drivers.cpp: In function 'void cyber_ros_bridge::ROSChassisToApolloChassis(const ConstPtr&, apollo::canbus::Chassis&)':
cyber_ros_bridge/lib/module_drivers.cpp:281:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_engine_started'
chassis_apollo.mutable_engine_started()->set_engine_started(chassis_msg->engine_started);
^
cyber_ros_bridge/lib/module_drivers.cpp:282:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_engine_rpm'
chassis_apollo.mutable_engine_rpm()->set_engine_rpm(chassis_msg->engine_rpm);
^
cyber_ros_bridge/lib/module_drivers.cpp:283:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_speed_mps'
chassis_apollo.mutable_speed_mps()->set_speed_mps(chassis_msg->speed_mps);
^
cyber_ros_bridge/lib/module_drivers.cpp:284:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_odometer_m'
chassis_apollo.mutable_odometer_m()->set_odometer_m(chassis_msg->odometer_m);
^
cyber_ros_bridge/lib/module_drivers.cpp:285:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_throttle_percentage'
chassis_apollo.mutable_throttle_percentage()->set_throttle_percentage(chassis_msg->throttle_percentage);
^
cyber_ros_bridge/lib/module_drivers.cpp:286:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_brake_percentage'
chassis_apollo.mutable_brake_percentage()->set_brake_percentage(chassis_msg->brake_percentage);
^
cyber_ros_bridge/lib/module_drivers.cpp:287:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_steering_percentage'
chassis_apollo.mutable_steering_percentage()->set_steering_percentage(chassis_msg->steering_percentage);
^
cyber_ros_bridge/lib/module_drivers.cpp:288:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_steering_torque_nm'
chassis_apollo.mutable_steering_torque_nm()->set_steering_torque_nm(chassis_msg->steering_torque_nm);
^
cyber_ros_bridge/lib/module_drivers.cpp:289:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_parking_brake'
chassis_apollo.mutable_parking_brake()->set_parking_brake(chassis_msg->parking_brake);
^
cyber_ros_bridge/lib/module_drivers.cpp:290:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_high_beam_signal'
chassis_apollo.mutable_high_beam_signal()->set_high_beam_signal(chassis_msg->high_beam_signal);
^
cyber_ros_bridge/lib/module_drivers.cpp:291:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_low_beam_signal'
chassis_apollo.mutable_low_beam_signal()->set_low_beam_signal(chassis_msg->low_beam_signal);
^
cyber_ros_bridge/lib/module_drivers.cpp:292:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_left_turn_signal'
chassis_apollo.mutable_left_turn_signal()->set_left_turn_signal(chassis_msg->left_turn_signal);
^
cyber_ros_bridge/lib/module_drivers.cpp:293:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_right_turn_signal'
chassis_apollo.mutable_right_turn_signal()->set_right_turn_signal(chassis_msg->right_turn_signal);
^
cyber_ros_bridge/lib/module_drivers.cpp:294:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_horn'
chassis_apollo.mutable_horn()->set_horn(chassis_msg->horn);
^
cyber_ros_bridge/lib/module_drivers.cpp:295:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_wiper'
chassis_apollo.mutable_wiper()->set_wiper(chassis_msg->wiper);
^
cyber_ros_bridge/lib/module_drivers.cpp:296:20: error: 'class apollo::canbus::Chassis' has no member named 'mutable_disengage_status'
chassis_apollo.mutable_disengage_status()->set_disengage_status(chassis_msg->disengage_status);

Cannot catch point clouds Data in cyberRT channel..

I executed roslaunch rslidar pointcloud in apollo 3.5 docker.
I can see the point clouds via rviz, and rostopic
I wanna send it to cyberRT.
so I built all of apollo_ros_bridge sources, and I edited default.yaml file.
====> Input_Topic_Name : /rslidar_points.

And then I executed cyber_monitor to monitor it.
but I cannot see any channels in cyber_monitor.

Any comment or advice is truly helpful.

segmentation fault while transform from ros to apollo

Cause by unintilized shared ptr ln apollo_ros_bridge\cyber_ros_bridge\core\cyber_ros_bridge_core.cpp:line 281
std::shared_ptrapollo::drivers::PointCloud pc_apollo
maybe should be
auto pc_apollo = std::make_sharedapollo::drivers::PointCloud();

Not able to get into Apollo docker

Hi
After commenting out those 3 lines in dev_start.sh, I am not able to get into the docker. It complains " Error: No such container: apollo_dev_dpt". Please let me know
thanks

On Using Prebuilt docker image

Hi, I want to pull prebuilt docker image,
When I use the command ./run.sh, the problem is:
bash: /home/apollo_ros_bridge/ros_pkgs/devel/setup.bash: No such file or directory
May I ask the solution to it?

bazel build cyber_ros_bridge:all error .

Thanks in advance for any reply.

I just started learning Apollo recently .
I run "bazel build cyber_ros_bridge:all" in the root workspace of the package according to Readme.md and then I got some errors . As shown below:

WARNING: The following rc files are no longer being read, please transfer their contents or import their path into one of the standard rc files: /apollo/apollo_ros_bridge/tools/bazel.rc ERROR: /apollo/apollo_ros_bridge/WORKSPACE:7:1: name 'new_http_archive' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:16:1: name 'git_repository' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:35:1: name 'new_http_archive' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:51:1: name 'new_http_archive' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:60:1: name 'new_http_archive' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:69:1: name 'new_http_archive' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:145:1: name 'new_http_archive' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:152:1: name 'new_http_archive' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:196:1: name 'new_http_archive' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:204:1: name 'new_http_archive' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:212:1: name 'http_archive' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:226:1: name 'new_http_archive' is not defined ERROR: /apollo/apollo_ros_bridge/WORKSPACE:247:1: name 'http_archive' is not defined ERROR: error loading package '': Encountered error while reading extension file 'bazel/grpc_deps.bzl': no such package '@com_github_grpc_grpc//bazel': error loading package 'external': Could not load //external package

I don't know why this happened ,because according to the Readme.md , I think it's easy to compile this package.
Thanks again for your help!

control topic bridging

Hi
I have bridged the code for chassis topic (candbus::chassis) between apollo and ros thru your bridge. I can see the updates working correctly.
However, when I try to bridge control topic ( apollo::control::ControlCommand), I do not see any update on the /control topic I have created. I can see the topic in the list, but if I echo, there are no updates. Apollo is publishing this meesage (with LGSVL) and I can see the update in cyber_monitor of Apollo as well as under apollo_ros_bridge cyber_monitor. I have checked the code I have developed and its same as the one I have done for chassis. I checked the yaml file too. The .msg file is a simple declaration of control topic's signals. Please let me know what could be the issue

Using Apollo with SVL Simulator on Windows

Hello.

I was trying to install the SVL Simulator with Apollo 5.0 . I noticed that the simulator can be installed easily on Windows but when it comes to Apollo there's nothing to be found in their documentation (it looks outdated to me) on how to use it on Windows. I know that Docker can run Linux containers but there's no base image that tries to build it (like an .yml file or something like this). Is there Windows compatibility, if yes is there a decent tutorial to follow?

Thank you!

Getting Ros topics through bridge

Thank you. I am now able to run apollo and cyber_monitor alongside apollo-ros bridge.
However, I am not seeing any updates of the topics with rostopic echo on bridge side while cyber_monitor is publishing messages ( with LGSLV). What should I do to see these topics on ROS side? Here is the screen shot

/home/jpm/Pictures/RA_Screenshot from 2019-09-18 17-43-45.png

Originally posted by @Prj1508 in #6 (comment)

Initialization

Hi AuroAi:
I want to write a apollo_ros2_bridge refer to your apollo_ros_bridge. ros2 - dashing , apollo - 3.5
There is one question when add 'apollo::cyber::Init(argv[0]);' , the subscription of ros2 can't receive anything. Do you have some solutions,
Thanks.

Run time issue

[ INFO] [1670392428.698230570]: Connected to master at [localhost:11311]
WARNING: Logging before InitGoogleLogging() is written to STDERR
I1207 11:23:48.699414  4357 global_data.cc:150] [cyber_ros_bridge] host ip: 53.217.56.108
W1207 11:23:48.699474  4357 environment.h:33] [cyber_ros_bridge] Environment variable [CYBER_PATH] not set, fallback to 
E1207 11:23:48.699488  4357 file.cc:64] [cyber_ros_bridge] Failed to open file /apollo/cyber/conf/cyber.pb.conf in text mode.
E1207 11:23:48.699506  4357 file.cc:90] [cyber_ros_bridge] Failed to open file /apollo/cyber/conf/cyber.pb.conf in binary mode.
E1207 11:23:48.699517  4357 global_data.cc:156] [cyber_ros_bridge] read cyber default conf failed!
F1207 11:23:48.699522  4357 global_data.cc:58] Check failed: InitConfig() 
*** Check failure stack trace: ***
Aborted (core dumped)

run.sh

您好,我运行run.sh,下载总是失败,而且特别慢,这是什么原因呢?谢谢

hello, when i run run.sh, the download always fails and is particularly slow. What's the reason? thank you

Support for Apollo-5.0

Hi,

Does this bridge support Apollo-5.0 and higher as is? If not, should I change anything in the code to take care of this requirment? Please let me know

Thank you

Trigger Mode not get full frequency

Dear all,

hi, thank you for your wonderful work which solved my problem greatly!
But there's still a problem when I'm using this tool.

My Environment

Apollo 5.5.0, ROS Melodic on Ubuntu 18.04.

Problem

I am using this apollo-ros-bridge to acquire the IMU data from my Apollo to my SLAM algorithm running in ROS. However, my IMU in Apollo has a frequency of 160Hz, but the messages received by ROS topic is only 60~70 Hz. And sometimes I could see irregular messages (e.g. 20 messages in 0.5s and then only 2 messages in the next 0.5s, or something like this). Is there a solution for that?

Thank you again!

Best,
Zifan

No work PointCloud

When running on a ROS point cloud, apollo does not start publishing point cloud messages.
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.