{"id":22111373,"url":"https://github.com/hebirobotics/hebi_cpp_api_ros_examples","last_synced_at":"2026-03-06T13:04:19.699Z","repository":{"id":45965380,"uuid":"167587511","full_name":"HebiRobotics/hebi_cpp_api_ros_examples","owner":"HebiRobotics","description":"Examples of using HEBI components through ROS, using the HEBI C++ API","archived":false,"fork":false,"pushed_at":"2025-11-03T19:27:03.000Z","size":509,"stargazers_count":11,"open_issues_count":7,"forks_count":8,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-11-03T21:16:59.700Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HebiRobotics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-01-25T17:38:13.000Z","updated_at":"2024-09-23T16:31:45.000Z","dependencies_parsed_at":"2025-07-25T07:31:56.288Z","dependency_job_id":"0cd6bd1f-9799-4731-916e-3bfe2b68f8ae","html_url":"https://github.com/HebiRobotics/hebi_cpp_api_ros_examples","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/HebiRobotics/hebi_cpp_api_ros_examples","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HebiRobotics%2Fhebi_cpp_api_ros_examples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HebiRobotics%2Fhebi_cpp_api_ros_examples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HebiRobotics%2Fhebi_cpp_api_ros_examples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HebiRobotics%2Fhebi_cpp_api_ros_examples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HebiRobotics","download_url":"https://codeload.github.com/HebiRobotics/hebi_cpp_api_ros_examples/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HebiRobotics%2Fhebi_cpp_api_ros_examples/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30178286,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T12:39:21.703Z","status":"ssl_error","status_checked_at":"2026-03-06T12:36:09.819Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-01T10:40:08.194Z","updated_at":"2026-03-06T13:04:19.502Z","avatar_url":"https://github.com/HebiRobotics.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hebi_cpp_api_ros_examples\n\nExamples of using HEBI components through ROS, using the HEBI C++ API.\n\nThis repository demonstrates integration of the HEBI C++ API with ROS, as well as several system-level demonstrations.\n\n**This is intended to be a replacement for the deprecated `hebi_ros` package.**\n\n## Overview\n\nThis package provides a collection of nodes which can be used as standalone components of a larger system, or you can use as a starting point for creating your own custom nodes controlling HEBI hardware at a low level.\n\nFor full documentation, see the package documentation on the ROS wiki:\n\nhttp://wiki.ros.org/hebi_cpp_api_examples\n\nIf you want to jump straight into the code, check out the `src` folder.\n\n## Automatically starting a HEBI demo configuration with systemd\n\nFor kits with included computers, it can be convenient to autostart a demo configuration as soon as the onboard system has booted. To do this, we make use of systemd services. Our structure is based on the one provided by Rover Robotics (https://blog.roverrobotics.com/how-to-run-ros-on-startup-bootup/)\n\n### Configuring autostart\nThe autostart config relies on 2 services: `roscore.service` and `roslaunch.service` that we will create.\n\nTo create `roscore.service`, create a file at `/etc/systemd/system/roscore.service` with the following contents:\n\n```\n[Unit]\nAfter=network-online.target time-sync.target\n[Service]\nType=forking\nUser=hebi\n# Start roscore as a fork and then wait for the tcp port to be opened\n# —————————————————————-\n# Source all the environment variables, start roscore in a fork\n# Since the service type is forking, systemd doesn’t mark it as\n# ‘started’ until the original process exits, so we have the\n# non-forked shell wait until it can connect to the tcp opened by\n# roscore, and then exit, preventing conflicts with dependant services\nExecStart=/bin/sh -c \". /opt/ros/kinetic/setup.sh; . /etc/ros/env.sh; roscore \u0026 while ! echo exit | nc localhost 11311 \u003e /dev/null; do sleep 1; done\"\n[Install]\nWantedBy=multi-user.target\n```\n\nThis service references `/etc/ros/env.sh`, which defines the environment variables `ROS_IP` and `ROS_MASTER_URI`. These are needed when running multi-computer ROS configurations. For HEBI kits, `env.sh` should look like\n```\n#!/bin/sh\nexport ROS_IP=10.10.1.2\nexport ROS_MASTER_URI=http://10.10.1.2:11311\n```\n\nafter these files are created, run `sudo systemctl enable roscore.service` to enable the roscore service.\n\nNext create `/etc/systemd/system/roslaunch.service` containing\n\n```\n[Unit]\nRequires=roscore.service\nPartOf=roscore.service\nAfter=network-online.target time-sync.target roscore.service\n[Service]\nType=simple\nUser=hebi\nExecStart=/usr/sbin/roslaunch\n[Install]\nWantedBy=multi-user.target\n```\n\nnote the reference to `/usr/sbin/roslaunch`. Now create that file:\n\n```\n#!/bin/bash\nsource ~/workspaces/melodic_ws/devel/setup.bash\nsource /etc/ros/env.sh\nexport ROS_HOME=$(echo ~hebi)/.ros\nroslaunch \u003cYOUR_LAUNCHFILE_HERE\u003e \u0026\nPID=$!\nwait \"$PID\"\n```\n\nThe second line should be updated to match the location of your ROS workspace, and the roslaunch line with whatever launchfile you would like to run on system boot.\n\nMake sure this file is executable by running `sudo chmod +x /usr/sbin/roslaunch` \n\nFinally, run `sudo systemctl enable roslaunch.service` to enable the roslaunch service.\n\nNext time you boot the onboard PC, the two services created should start a `roscore` process, and `roslaunch` the file you indicated.\n\n### Disabling/Enabling Autostart\n\nIf your kit has been configured to autostart a demo, and you would like to disable this behavior, run the following commands:\n\n`sudo systemctl disable roscore.service`\n\n`sudo systemctl disable roslaunch.service`\n\nThe launchfile and roscore will no longer start automatically on boot. To reenable the original behavior, run \n\n`sudo systemctl enable roscore.service`\n\n`sudo systemctl enable roslaunch.service`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhebirobotics%2Fhebi_cpp_api_ros_examples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhebirobotics%2Fhebi_cpp_api_ros_examples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhebirobotics%2Fhebi_cpp_api_ros_examples/lists"}